if test $line_handler -eq 0; then
echo ".handler = com_$name_txt,"
else
+ echo ".handler = NULL,"
echo ".line_handler = com_$name_txt,"
fi
if test -n "$perms_txt"; then
echo ".perms = $perms_txt,"
fi
echo ".description = \"$desc_txt\","
- echo ".synopsis = \"$syn_txt\","
+ echo ".usage = \"$usage_txt\","
echo ".help = "
echo "$help_txt" | sed -e 's/^/\"/g' -e 's/$/\\n\"/g'
echo '},'
}
+read_header()
+{
+ local key value i
+
+ while read key value; do
+ case "$key" in
+ ---)
+ break
+ ;;
+ HC:)
+ header_comment="$value"
+ ;;
+ CC:)
+ c_file_comment="$value"
+ ;;
+ OF:)
+ output_file="$value"
+ array_name=${value%command_list}cmds
+ ;;
+ SF:)
+ source_file="$value"
+ ;;
+ AT:)
+ array_type="$value"
+ ;;
+ IN:)
+ for i in $value; do
+ includes="$includes
+#include \"$i.h\""
+ done
+ includes="$includes
+#include \"$output_file.h\""
+ ;;
+ SN:)
+ section_name="$value"
+ esac
+ done
+ if test -z "$header_comment" -o -z "$c_file_comment" \
+ -o -z "$output_file"; then
+ echo "header error" 1&>2
+ exit 1
+ fi
+}
read_one_command()
{
name_txt=""
desc_txt=""
- syn_txt=""
+ usage_txt=""
help_txt=""
perms_txt=""
line_handler=0
L:)
line_handler=1
;;
- S:)
- syn_txt="$value"
+ U:)
+ usage_txt="$value"
;;
H:)
help_txt="${value}"
;;
esac
done
- if test -n "$name_txt" -a -n "$desc_txt" -a -n "$syn_txt" \
+ if test -n "$name_txt" -a -n "$desc_txt" -a -n "$usage_txt" \
-a -n "$help_txt"; then
ret=1
return
fi
- if test -z "$name_txt" -a -z "$desc_txt" -a -z "$syn_txt" \
+ if test -z "$name_txt" -a -z "$desc_txt" -a -z "$usage_txt" \
-a -z "$help_txt"; then
ret=0
return
echo "!ERROR!"
echo "N: $name_txt"
echo "D: $desc_txt"
- echo "S: $syn_txt"
+ echo "S: $usage_txt"
echo "P: $perms_txt"
echo "H: $help_txt"
}
dump_man()
{
- echo "NAME"
- printf "\t$name_txt - $desc_txt\n"
- echo "SYNOPSIS"
- printf "\t$syn_txt\n"
- echo "DESCRIPTION"
+ echo ".SS \"$name_txt\""
+ echo "$desc_txt"
+ echo
+ echo "\\fBusage: \\fP$usage_txt"
+ echo
echo "$help_txt"
+ echo
if test -n "$perms_txt"; then
- echo "PERMISSIONS"
+ echo -n "\\fBpermissions:\\fP "
if test "$perms_txt" = "0"; then
- printf "\t(none)\n"
+ echo "(none)"
else
- printf "\t$perms_txt\n"
+ echo "$perms_txt"
fi
fi
-
+ echo
}
com_man()
{
- local cn="$(grep ^codename Makefile.in)"
- local ver="$(grep ^AC_INIT configure.ac \
- | cut -f 2 -d ',')"
- cn=${cn#*=}
- ver=${ver# *[}
- ver=${ver%]}
- echo "r=paraslash-$ver (cn: $cn)"
- local n
- local txtdir=txt
- local mandir=man/man1
- local htmldir=html
- local pfx="$1"
- mkdir -p $txtdir $mandir $htmldir || exit 1
+ echo "[$section_name]"
+ echo
while : ; do
read_one_command
if test $ret -lt 0; then
if test $ret -eq 0; then
break
fi
- n=$pfx-$name_txt
- echo "pfx: $pfx, name: $n"
- dump_man > $txtdir/$n.txt
- txt2man -t "$n" -r "$r" < $txtdir/$n.txt \
- | sed -e 1d > $mandir/$n.1
- man2html $mandir/$n.1 > $htmldir/$n.html
+ dump_man
done
}
-com_array()
+com_c_file()
{
+ echo "/** \file $output_file.c $c_file_comment */"
+ echo "$includes"
+ echo "struct $array_type $array_name[] = {"
while : ; do
read_one_command
if test $ret -lt 0; then
fi
dump_array_member
done
+ echo '{.name = NULL}};'
}
dump_proto()
{
+ echo '/**'
+ echo " * $desc_txt"
+ echo ' *'
+ echo ' * \param fd the file descriptor to send output to'
if test $line_handler -eq 0; then
- echo "static int com_$name_txt(int, int, char **);"
+ echo ' * \param argc the number of arguments'
+ echo ' * \param argv the argument vector'
else
- echo "static int com_$name_txt(int, char *);"
+ echo ' * \param cmdline the full command line'
fi
+ echo ' * '
+ echo " * usage: $usage_txt"
+ echo ' * '
+ echo "$help_txt" | sed -e 's/^/ * /g'
+ echo ' */'
+ grep "^\(__noreturn \)*int com_$name_txt(" $source_file | sed -e 's/$/;/1'
+ echo
}
-com_proto()
+com_header()
{
+ echo "/** \file $output_file.h $header_comment */"
+ echo
+ echo "extern struct $array_type $array_name[];"
while : ; do
read_one_command
if test $ret -lt 0; then
done
}
+read_header
arg="$1"
shift
case "$arg" in
- "array")
- com_array
+ "c")
+ com_c_file
;;
- "proto")
- com_proto
+ "h")
+ com_header
;;
"man")
com_man $*