#!/bin/sh

die () {
	echo "$@" >&2
	exit 1
}

command_list () {
	while read cmd rest
	do
		case "$cmd" in
		"#"* | '')
			# Ignore comments and allow empty lines
			continue
			;;
		*)
			case "$exclude_programs" in
			*":$cmd:"*)
				;;
			*)
				echo "$cmd $rest"
				;;
			esac
		esac
	done <"$1"
}

category_list () {
	echo "$1" |
	cut -d' ' -f2- |
	tr ' ' '\012' |
	grep -v '^$' |
	LC_ALL=C sort -u
}

define_categories () {
	echo
	echo "/* Command categories */"
	bit=0
	echo "$1" |
	while read cat
	do
		echo "#define CAT_$cat (1UL << $bit)"
		bit=$(($bit+1))
	done
	test "$bit" -gt 32 && die "Urgh.. too many categories?"
}

define_category_names () {
	echo
	echo "/* Category names */"
	echo "static const char *category_names[] = {"
	bit=0
	echo "$1" |
	while read cat
	do
		echo "	\"$cat\", /* (1UL << $bit) */"
		bit=$(($bit+1))
	done
	echo "	NULL"
	echo "};"
}

print_command_list () {
	echo "static struct cmdname_help command_list[] = {"

	echo "$1" |
	while read cmd rest
	do
		synopsis=
		while read line
		do
			case "$line" in
			"$cmd - "*)
				synopsis=${line#$cmd - }
				break
				;;
			esac
		done <"Documentation/$cmd.txt"

		printf '\t{ "%s", N_("%s"), 0' "$cmd" "$synopsis"
		printf " | CAT_%s" $rest
		echo " },"
	done
	echo "};"
}

exclude_programs=:
while test "--exclude-program" = "$1"
do
	shift
	exclude_programs="$exclude_programs$1:"
	shift
done

commands="$(command_list "$1")"
categories="$(category_list "$commands")"

echo "/* Automatically generated by generate-cmdlist.sh */
struct cmdname_help {
	const char *name;
	const char *help;
	uint32_t category;
};
"
define_categories "$categories"
echo
define_category_names "$categories"
echo
print_command_list "$commands"
