eval '(exit $?0)' && eval 'exec perl -S "$0" ${1+"$@"}'
    & eval 'exec perl -S "$0" $argv:q'
    if 0;

## Copyright (c) 2002-2021 Simon Josefsson
##                    added -texinfo, -listfunc, -pkg-name
##                    man page revamp
##                    various improvements
## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
##                    added -tex
## Copyright (c) 1998 Michael Zucchi
## Copyright (c) 2013 Adam Sampson
##                    made highlighting not depend on hash order, for Perl 5.18

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This will read a C source code file and scan for embedded comments
# in the style of gnome comments (+minor extensions - see below).

# usage:
# gdoc [ -docbook | -html | -text | -man | -tex | -texinfo | -listfunc ]
#      [ -sourceversion verno ] [ -include file | -includefuncprefix ]
#      [ -bugsto address ] [ -pkg-name packagename ]
#      [ -seeinfo infonode ] [ -copyright notice ] [ -verbatimcopying ]
#      [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile
#
#  Set output format using one of -docbook, -html, -text, -man, -tex,
#  -texinfo, or -listfunc.  Default is man.
#
#  -sourceversion
#       Version number for source code, e.g. '1.0.4'.  Used in 'man' headers.
#       Defaults to using current date.
#
#  -include FILE
#       For man pages, mention #include <FILE.h> in the synopsis.
#
#  -includefuncprefix
#       For man pages, mention a #include <FILE.h> in the synopsis.
#       The FILE derived from the function prefix.  For example, a
#       function gss_init_sec_context will generate an include
#       statement of #include <gss.h>.
#
#  -bugsto address
#       For man pages, include a section about reporting bugs and mention
#       the given e-mail address, e.g 'bug-libidn@gnu.org'.
#
#  -pkg-name packagename
#       For man pages when -bugsto is used, also include help URLs to the
#       the project's home page.  For example, "GNU Libidn".
#
#  -seeinfo infonode
#       For man pages, include a section that point to an info manual
#       for more information.
#
#  -copyright notice
#       For man pages, include a copyright section with the given
#       notice after a preamble.  Use, e.g., '2002, 2003 Simon Josefsson'.
#
#  -verbatimcopying
#       For man pages, and when the -copyright parameter is used,
#       add a licensing statement that say verbatim copying is permitted.
#
#  -function funcname
#	If set, then only generate documentation for the given function(s).  All
#	other functions are ignored.
#
#  c files - list of 'c' files to process
#
#  All output goes to stdout, with errors to stderr.

#
# format of comments.
# In the following table, (...)? signifies optional structure.
#                         (...)* signifies 0 or more structure elements
# /**
#  * function_name(:)? (- short description)?
# (* @parameterx: (description of parameter x)?)*
# (* a blank line)?
#  * (Description:)? (Description of function)?
#  * (Section header: (section description)? )*
#  (*)?*/
#
# So .. the trivial example would be:
#
# /**
#  * my_function
#  **/
#
# If the Description: header tag is ommitted, then there must be a blank line
# after the last parameter specification.
# e.g.
# /**
#  * my_function - does my stuff
#  * @my_arg: its mine damnit
#  *
#  * Does my stuff explained.
#  */
#
#  or, could also use:
# /**
#  * my_function - does my stuff
#  * @my_arg: its mine damnit
#  * Description: Does my stuff explained.
#  */
# etc.
#
# All descriptions can be multiline, apart from the short function description.
#
# All descriptive text is further processed, scanning for the following special
# patterns, which are highlighted appropriately.
#
# 'funcname()' - function
# '$ENVVAR' - environmental variable OBSOLETE (?)
# '#struct_name' - name of a structure
# '@parameter' - name of a parameter
# '%CONST' - name of a constant.

#
# Extensions for LaTeX:
#
# 1. the symbol '->' will be replaced with a rightarrow
# 2. x^y with ${x}^{y}$.
# 3. xxx\: with xxx:

use POSIX qw(strftime);

# match expressions used to find embedded type information
$type_constant = "\\\%([A-Za-z0-9_]+)";
$type_func = "([A-Za-z0-9_]+\\(\\))";
$type_param = '\@([A-Za-z0-9_]+)\s*';
$type_struct = "\\\#([A-Za-z0-9_]+)";
$type_env = "(\\\$[A-Za-z0-9_]+)";


# Output conversion substitutions.
#  One for each output format

# these work fairly well
@highlights_html = ( [$type_constant, '"<i>$1</i>"'],
		     [$type_func, '"<b>$1</b>"'],
		     [$type_struct, '"<i>$1</i>"'],
		     [$type_param, '" <tt><b>$1</b></tt> "'] );
$blankline_html = "<p>";

@highlights_texinfo = ( [$type_param, '" \@code{$1} "'],
			[$type_constant, '"\@code{$1} "'],
			[$type_func, '"\@code{$1} "'],
			[$type_struct, '"\@code{$1} "'],
			 );
$blankline_texinfo = "";

@highlights_tex = ( [$type_param, '" {\\\bf $1} "'],
		[$type_constant, '"{\\\it $1}"'],
		[$type_func, '"{\\\bf $1}"'],
		[$type_struct, '"{\\\it $1}"'],
		      );
$blankline_tex = "\\\\";

# sgml, docbook format
@highlights_sgml = ( [$type_constant, '"<replaceable class=\"option\">$1</replaceable>"'],
		     [$type_func, '"<function>$1</function>"'],
		     [$type_struct, '"<structname>$1</structname>"'],
		     [$type_env, '"<envar>$1</envar>"'],
		     [$type_param, '" <parameter>$1</parameter> "'] );
$blankline_sgml = "</para><para>\n";

# these are pretty rough
@highlights_man = ( [$type_constant, '"\\\fB$1\\\fP"'],
		    [$type_func, '"\\\fB$1\\\fP"'],
		    [$type_struct, '"\\\fB$1\\\fP"'],
		    [$type_param, '" \\\fI$1\\\fP "'] );
$blankline_man = "";

# text-mode
@highlights_text = ( [$type_constant, '"$1"'],
		     [$type_func, '"$1"'],
		     [$type_struct, '"$1"'],
		     [$type_param, '"$1 "'] );
$blankline_text = "";
my $lineprefix = "";

sub usage {
    print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo  -listfunc ]\n";
    print "         [ -sourceversion verno ] [ -include file | -includefuncprefix ]\n";
    print "         [ -bugsto address ] [ -seeinfo infonode ] [ -copyright notice]\n";
    print "         [ -verbatimcopying ] [ -pkg-name packagename ]\n";
    print "         [ -function funcname [ -function funcname ...] ]\n";
    print "         c source file(s) > outputfile\n";
    exit 1;
}

# read arguments
if ($#ARGV==-1) {
    usage();
}

$verbose = 0;
$output_mode = "man";
@highlights = @highlights_man;
$blankline = $blankline_man;
$modulename = "API Documentation";
$sourceversion = strftime "%Y-%m-%d", localtime;
$function_only = 0;
while ($ARGV[0] =~ m/^-(.*)/) {
    $cmd = shift @ARGV;
    if ($cmd eq "-html") {
	$output_mode = "html";
	@highlights = @highlights_html;
	$blankline = $blankline_html;
    } elsif ($cmd eq "-man") {
	$output_mode = "man";
	@highlights = @highlights_man;
	$blankline = $blankline_man;
    } elsif ($cmd eq "-tex") {
	$output_mode = "tex";
	@highlights = @highlights_tex;
	$blankline = $blankline_tex;
    } elsif ($cmd eq "-texinfo") {
	$output_mode = "texinfo";
	@highlights = @highlights_texinfo;
	$blankline = $blankline_texinfo;
    } elsif ($cmd eq "-text") {
	$output_mode = "text";
	@highlights = @highlights_text;
	$blankline = $blankline_text;
    } elsif ($cmd eq "-docbook") {
	$output_mode = "sgml";
	@highlights = @highlights_sgml;
	$blankline = $blankline_sgml;
    } elsif ($cmd eq "-listfunc") {
	$output_mode = "listfunc";
    } elsif ($cmd eq "-module") { # not needed for sgml, inherits from calling document
	$modulename = shift @ARGV;
    } elsif ($cmd eq "-sourceversion") {
	$sourceversion = shift @ARGV;
    } elsif ($cmd eq "-include") {
	$include = shift @ARGV;
    } elsif ($cmd eq "-includefuncprefix") {
	$includefuncprefix = 1;
    } elsif ($cmd eq "-bugsto") {
	$bugsto = shift @ARGV;
    } elsif ($cmd eq "-pkg-name") {
	$pkgname = shift @ARGV;
    } elsif ($cmd eq "-copyright") {
	$copyright = shift @ARGV;
    } elsif ($cmd eq "-verbatimcopying") {
	$verbatimcopying = 1;
    } elsif ($cmd eq "-seeinfo") {
	$seeinfo = shift @ARGV;
    } elsif ($cmd eq "-function") { # to only output specific functions
	$function_only = 1;
	$function = shift @ARGV;
	$function_table{$function} = 1;
    } elsif ($cmd eq "-v") {
	$verbose = 1;
    } elsif (($cmd eq "-h") || ($cmd eq "--help")) {
	usage();
    }
}

##
# dumps section contents to arrays/hashes intended for that purpose.
#
sub dump_section {
    my $name = shift @_;
    my $contents = join "\n", @_;

    $name = " $name";

    if ($name =~ m/$type_constant/) {
	$name = $1;
#	print STDERR "constant section '$1' = '$contents'\n";
	$constants{$name} = $contents;
    } elsif ($name =~ m/$type_param/) {
#	print STDERR "parameter def '$1' = '$contents'\n";
	$name = $1;
	$parameters{$name} = $contents;
    } else {
#	print STDERR "other section '$name' = '$contents'\n";
	$name =~ tr/ //d;
	$sections{$name} = $contents;
	push @sectionlist, $name;
    }
}

##
# output function
#
# parameters, a hash.
#  function => "function name"
#  parameterlist => @list of parameters
#  parameters => %parameter descriptions
#  sectionlist => @list of sections
#  sections => %descriont descriptions
#

sub just_highlight {
    my $contents = join "\n", @_;
    my $line;
    my $ret = "";

    foreach $highlight (@highlights) {
	my ($pattern, $replace) = @$highlight;
	#print "scanning pattern $pattern ($replace)\n";
	$contents =~ s/$pattern/$replace/gees;
    }
    foreach $line (split "\n", $contents) {
	if ($line eq ""){
	    $ret = $ret . $lineprefix . $blankline;
	} else {
	    $ret = $ret . $lineprefix . $line;
	}
	$ret = $ret . "\n";
    }

    return $ret;
}

sub output_highlight {
    print (just_highlight (@_));
}

# output in texinfo
sub output_texinfo {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;

    print "\@subheading ".$args{'function'}."\n";
    print "\@anchor{".$args{'function'}."}\n";
    print "\@deftypefun {" . $args{'functiontype'} . "} ";
    print "{".$args{'function'}."} ";
    print "(";
    $count = 0;
    foreach $parameter (@{$args{'parameterlist'}}) {
	print $args{'parametertypes'}{$parameter}." \@var{".$parameter."}";
	if ($count != $#{$args{'parameterlist'}}) {
	    $count++;
	    print ", ";
	}
    }
    print ")\n";
    foreach $parameter (@{$args{'parameterlist'}}) {
	if ($args{'parameters'}{$parameter}) {
	    print "\@var{".$parameter."}: ";
	    output_highlight($args{'parameters'}{$parameter});
	    print "\n";
	}
    }
    foreach $section (@{$args{'sectionlist'}}) {
	$section =~ s/\@//g;
	print "\n\@strong{$section:} " if $section ne $section_default;
	$args{'sections'}{$section} =~ s:([{}]):\@$1:gs;
	output_highlight($args{'sections'}{$section});
    }
    print "\@end deftypefun\n\n";
}

sub output_enum_texinfo {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;
    my $name = $args{'enum'};
    my $param;
    my $param2;
    my $sec;
    my $check;
    my $type;

    print "\n\@c $name\n";
    print "\@table \@code\n";

    $check=0;
    foreach $parameter (@{$args{'parameterlist'}}) {
        $param1 = $parameter;
	$param1 =~ s/_/_\@-/g;

	$check = 1;
	print "\@item ".$param1."\n";
#	print "\n";

        $param2 = $args{'parameters'}{$parameter};
	$out = just_highlight($param2);
	chomp $out;
	print $out . "\n";
    }
    print "\@end table\n";
}

# output in html
sub output_html {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;
    print "\n\n<a name=\"". $args{'function'} . "\">&nbsp</a><h2>Function</h2>\n";

    print "<i>".$args{'functiontype'}."</i>\n";
    print "<b>".$args{'function'}."</b>\n";
    print "(";
    $count = 0;
    foreach $parameter (@{$args{'parameterlist'}}) {
	print "<i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n";
	if ($count != $#{$args{'parameterlist'}}) {
	    $count++;
	    print ", ";
	}
    }
    print ")\n";

    print "<h3>Arguments</h3>\n";
    print "<dl>\n";
    foreach $parameter (@{$args{'parameterlist'}}) {
	print "<dt><i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n";
	print "<dd>";
	output_highlight($args{'parameters'}{$parameter});
    }
    print "</dl>\n";
    foreach $section (@{$args{'sectionlist'}}) {
	print "<h3>$section</h3>\n";
	print "<ul>\n";
	output_highlight($args{'sections'}{$section});
	print "</ul>\n";
    }
    print "<hr>\n";
}

# output in tex
sub output_tex {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;
    my $func = $args{'function'};
    my $param;
    my $param2;
    my $sec;
    my $check;
    my $type;

    $func =~ s/_/\\_/g;

    print "\n\n\\begin{function}\n";
    print "\\functionTitle{". $func . "}\n";
    print "\\index{". $func . "}\n";

    $type = $args{'functiontype'};
    $type =~ s/_/\\_/g;

    print "{\\it ".$type."}\n";
    print "{\\bf ".$func."}\n";
    print "(";
    $count = 0;
    foreach $parameter (@{$args{'parameterlist'}}) {
        $param = $args{'parametertypes'}{$parameter};
        $param2 = $parameter;
	$param =~ s/_/\\_/g;
        $param2 =~ s/_/\\_/g;

	print "{\\it ".$param."} {\\bf ".$param2."}";
	if ($count != $#{$args{'parameterlist'}}) {
	    $count++;
	    print ", ";
	}
    }
    print ")\n";

    print "\n\\begin{functionArguments}\n";

    $check=0;
    foreach $parameter (@{$args{'parameterlist'}}) {
        $param1 = $args{'parametertypes'}{$parameter};
        $param1 =~ s/_/\\_/g;
        $param2 = $parameter;
	$param2 =~ s/_/\\_/g;

	$check = 1;
	print "\\functionArgument {\\it ".$param1."} {\\bf ".$param2."}: \n";
#	print "\n";

	$param3 = $args{'parameters'}{$parameter};
	$param3 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
	$param3 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;

	$out = just_highlight($param3);
	$out =~ s/_/\\_/g;
	print $out;
    }
    if ($check==0) {
	print "\\item void\n";
    }
    print "\\end{functionArguments}\n";

    foreach $section (@{$args{'sectionlist'}}) {
	$sec = $section;
	$sec =~ s/_/\\_/g;
	$sec =~ s/#([a-zA-Z\_]+)/{\\it $1}/g;

	print "\n\\begin{function${sec}}\n";
	$out = $args{'sections'}{$section};

	$out =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
	$out =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
	$out =~ s/\@([a-zA-Z\_]+)/{\\bf $1}/g;
	$out =~ s/_/\\_\\-/g;
        $out =~ s/\$/\\\$/g;
	$out =~ s/#/\\#/g;
	$out =~ s/\n\n/\n/g;
	$out =~ s/\\:/:/g;
	$out =~ s/\-\>/\$\\rightarrow\$/g;
	$out =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g;

	print $out;
	print "\\end{function${sec}}\n";
    }
    print "\\end{function}\n\n";
}

sub output_enum_tex {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;
    my $name = $args{'enum'};
    my $param;
    my $param2;
    my $sec;
    my $check;
    my $type;

    print "\n\n\\begin{enum}\n";
    $name =~ s/_/\\_/g;
    print "\\enumTitle{". $name . "}\n";
    print "\\index{". $name . "}\n";

    print "\n\\begin{enumList}\n";

    $check=0;
    foreach $parameter (@{$args{'parameterlist'}}) {
        $param1 = $parameter;
	$param1 =~ s/_/\\_\\-/g;

	$check = 1;
	print "\\enumElement{".$param1."}{";
#	print "\n";

        $param2 = $args{'parameters'}{$parameter};
	$param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
	$param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
	$out = just_highlight($param2);
	$out =~ s/_/\\_/g;
	chomp $out;
	print $out . "}\n";
    }
    print "\\end{enumList}\n";

    print "\\end{enum}\n\n";
}

# output in sgml DocBook
sub output_sgml {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;
    my $id;

    $id = $args{'module'}."-".$args{'function'};
    $id =~ s/[^A-Za-z0-9]/-/g;

    print "<refentry>\n";
    print "<refmeta>\n";
    print "<refentrytitle><phrase id=\"$id\">".$args{'function'}."</phrase></refentrytitle>\n";
    print "</refmeta>\n";
    print "<refnamediv>\n";
    print " <refname>".$args{'function'}."</refname>\n";
    print " <refpurpose>\n";
    print "  ".$args{'purpose'}."\n";
    print " </refpurpose>\n";
    print "</refnamediv>\n";

    print "<refsynopsisdiv>\n";
    print " <title>Synopsis</title>\n";
    print "  <funcsynopsis>\n";
    print "   <funcdef>".$args{'functiontype'}." ";
    print "<function>".$args{'function'}." ";
    print "</function></funcdef>\n";

#    print "<refsect1>\n";
#    print " <title>Synopsis</title>\n";
#    print "  <funcsynopsis>\n";
#    print "   <funcdef>".$args{'functiontype'}." ";
#    print "<function>".$args{'function'}." ";
#    print "</function></funcdef>\n";

    $count = 0;
    if ($#{$args{'parameterlist'}} >= 0) {
	foreach $parameter (@{$args{'parameterlist'}}) {
	    print "   <paramdef>".$args{'parametertypes'}{$parameter};
	    print " <parameter>$parameter</parameter></paramdef>\n";
	}
    } else {
	print "  <void>\n";
    }
    print "  </funcsynopsis>\n";
    print "</refsynopsisdiv>\n";
#    print "</refsect1>\n";

    # print parameters
    print "<refsect1>\n <title>Arguments</title>\n";
#    print "<para>\nArguments\n";
    if ($#{$args{'parameterlist'}} >= 0) {
	print " <variablelist>\n";
	foreach $parameter (@{$args{'parameterlist'}}) {
	    print "  <varlistentry>\n   <term><parameter>$parameter</parameter></term>\n";
	    print "   <listitem>\n    <para>\n";
	    $lineprefix="     ";
	    output_highlight($args{'parameters'}{$parameter});
	    print "    </para>\n   </listitem>\n  </varlistentry>\n";
	}
	print " </variablelist>\n";
    } else {
	print " <para>\n  None\n </para>\n";
    }
    print "</refsect1>\n";

    # print out each section
    $lineprefix="   ";
    foreach $section (@{$args{'sectionlist'}}) {
	print "<refsect1>\n <title>$section</title>\n <para>\n";
#	print "<para>\n$section\n";
	if ($section =~ m/EXAMPLE/i) {
	    print "<example><para>\n";
	}
	output_highlight($args{'sections'}{$section});
#	print "</para>";
	if ($section =~ m/EXAMPLE/i) {
	    print "</para></example>\n";
	}
	print " </para>\n</refsect1>\n";
    }

    print "\n\n";
}

##
# output in man
sub output_man {
    my %args = %{$_[0]};
    my ($parameter, $section);
    my $count;

    print ".\\\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.\n";
    print ".TH \"$args{'function'}\" 3 \"$args{'sourceversion'}\" \"". $args{'module'} . "\" \"". $args{'module'} . "\"\n";

    print ".SH NAME\n";

    print $args{'function'};
    if ($args{'purpose'}) {
	print " \\- " . $args{'purpose'} . "\n";
    } else {
	print " \\- API function\n";
    }

    print ".SH SYNOPSIS\n";
    print ".B #include <". $args{'include'} . ">\n"
	if $args{'include'};
    print ".B #include <". lc((split /_/, $args{'function'})[0]) . ".h>\n"
	if $args{'includefuncprefix'};
    print ".sp\n";
    print ".BI \"".$args{'functiontype'}." ".$args{'function'}."(";
    $count = 0;
    foreach $parameter (@{$args{'parameterlist'}}) {
	print $args{'parametertypes'}{$parameter}." \" ".$parameter." \"";
	if ($count != $#{$args{'parameterlist'}}) {
	    $count++;
	    print ", ";
	}
    }
    print ");\"\n";

    print ".SH ARGUMENTS\n";
    foreach $parameter (@{$args{'parameterlist'}}) {
	print ".IP \"".$args{'parametertypes'}{$parameter}." ".$parameter."\" 12\n";
	$param = $args{'parameters'}{$parameter};
	$param =~ s/-/\\-/g;
	output_highlight($param);
    }
    foreach $section (@{$args{'sectionlist'}}) {
	print ".SH \"" . uc($section) . "\"\n";
	$sec = $args{'sections'}{$section};
	$sec =~ s/-/\\-/g;
	output_highlight($sec);
    }

    if ($args{'bugsto'}) {
	print ".SH \"REPORTING BUGS\"\n";
	print "Report bugs to <". $args{'bugsto'} . ">.\n";
        print ".br\n";
	print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n";
        print ".br\n";
	if ($args{'pkgname'}) {
	    print $args{'pkgname'} . " home page: " .
		"http://www.gnu.org/software/" . $args{'module'} . "/\n";
	}
	print "\n";
    }

    if ($args{'copyright'}) {
	print ".SH COPYRIGHT\n";
	print "Copyright \\(co ". $args{'copyright'} . ".\n";
	if ($args{'verbatimcopying'}) {
	    print ".br\n";
	    print "Copying and distribution of this file, with or without modification,\n";
	    print "are permitted in any medium without royalty provided the copyright\n";
	    print "notice and this notice are preserved.\n";
	}
    }

    if ($args{'seeinfo'}) {
	print ".SH \"SEE ALSO\"\n";
	print "The full documentation for\n";
	print ".B " . $args{'module'} . "\n";
	print "is maintained as a Texinfo manual.  If the\n";
	print ".B info\n";
	print "and\n";
	print ".B " . $args{'module'} . "\n";
	print "programs are properly installed at your site, the command\n";
	print ".IP\n";
	print ".B info " . $args{'seeinfo'} . "\n";
	print ".PP\n";
	print "should give you access to the complete manual.\n";
	print "As an alternative you may obtain the manual from:\n";
	print ".IP\n";
	print ".B http://www.gnu.org/software/" . $args{'module'} . "/manual/\n";
	print ".PP\n";
    }
}

sub output_listfunc {
    my %args = %{$_[0]};
    print $args{'function'} . "\n";
}

##
# output in text
sub output_text {
    my %args = %{$_[0]};
    my ($parameter, $section);

    print "Function = ".$args{'function'}."\n";
    print "  return type: ".$args{'functiontype'}."\n\n";
    foreach $parameter (@{$args{'parameterlist'}}) {
	print " ".$args{'parametertypes'}{$parameter}." ".$parameter."\n";
	print "    -> ".$args{'parameters'}{$parameter}."\n";
    }
    foreach $section (@{$args{'sectionlist'}}) {
	print " $section:\n";
	print "    -> ";
	output_highlight($args{'sections'}{$section});
    }
}

##
# generic output function - calls the right one based
# on current output mode.
sub output_function {
#    output_html(@_);
    eval "output_".$output_mode."(\@_);";
}

sub output_enum {
    eval "output_enum_".$output_mode."(\@_);";
}


##
# takes a function prototype and spits out all the details
# stored in the global arrays/hsahes.
sub dump_function {
    my $prototype = shift @_;

    if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
	$prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
	$prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
	$prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
	$prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/)  {
	$return_type = $1;
	$function_name = $2;
	$args = $3;

#	print STDERR "ARGS = '$args'\n";

	foreach $arg (split ',', $args) {
	    # strip leading/trailing spaces
	    $arg =~ s/^\s*//;
	    $arg =~ s/\s*$//;
#	    print STDERR "SCAN ARG: '$arg'\n";
	    @args = split('\s', $arg);

#	    print STDERR " -> @args\n";
	    $param = pop @args;
#	    print STDERR " -> @args\n";
	    if ($param =~ m/^(\*+)(.*)/) {
		$param = $2;
		push @args, $1;
	    }
	    if ($param =~ m/^(.*)(\[\])$/) {
		$param = $1;
		push @args, $2;
	    }
#	    print STDERR " :> @args\n";
	    $type = join " ", @args;

	    if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") {
		$parameters{$param} = "-- undescribed --";
		print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n";
	    }

	    push @parameterlist, $param;
	    $parametertypes{$param} = $type;

#	    print STDERR "param = '$param', type = '$type'\n";
	}
    } else {
	print STDERR "warning: $lineno: Cannot understand prototype: '$prototype'\n";
	return;
    }

    if ($function_only==0 || defined($function_table{$function_name})) {
	output_function({'function' => $function_name,
			 'module' => $modulename,
			 'sourceversion' => $sourceversion,
			 'include' => $include,
			 'includefuncprefix' => $includefuncprefix,
			 'bugsto' => $bugsto,
			 'pkgname' => $pkgname,
			 'copyright' => $copyright,
			 'verbatimcopying' => $verbatimcopying,
			 'seeinfo' => $seeinfo,
			 'functiontype' => $return_type,
			 'parameterlist' => \@parameterlist,
			 'parameters' => \%parameters,
			 'parametertypes' => \%parametertypes,
			 'sectionlist' => \@sectionlist,
			 'sections' => \%sections,
			 'purpose' => $function_purpose
			 });
    }
}

sub dump_enum {
    my $prototype = shift @_;

    if (($prototype =~ m/^\s*typedef\s+enum\s*[a-zA-Z0-9_~:]*\s*\{([\-a-zA-Z0-9_~=,:\s\(\)\<]+)\s*\}\s*([a-zA-Z0-9_]+);.*/)) {
#        || $prototype =~ m/^\s*enum\s+([a-zA-Z0-9_~:]+).*/) {
        $args = $1;
	$name = $2;

	foreach $arg (split ',', $args) {
	    # strip leading/trailing spaces
	    $arg =~ s/^\s*//;
	    $arg =~ s/\s*$//;
	    $arg =~ s/([A-Za-z0-9_]+)\s*=.*/$1/g;
#	    print STDERR "SCAN ARG: '$arg'\n";

            next if $arg eq '';
	    if ((!defined($parameters{$arg}) || $parameters{$arg} eq "")) {
		$parameters{$arg} = "-- undescribed --";
		print STDERR "warning: $lineno: Enumeration parameter '$arg' not described in '$name'\n";
	    }

	    push @parameterlist, $arg;

#	    print STDERR "param = '$arg'\n";
	}
    } else {
#	print STDERR "warning: $lineno: Cannot understand enumeration: '$prototype'\n";
	return;
    }

    output_enum({'enum' => $name,
			 'module' => $modulename,
			 'sourceversion' => $sourceversion,
			 'include' => $include,
			 'includefuncprefix' => $includefuncprefix,
			 'bugsto' => $bugsto,
			 'pkgname' => $pkgname,
			 'copyright' => $copyright,
			 'verbatimcopying' => $verbatimcopying,
			 'seeinfo' => $seeinfo,
			 'functiontype' => $return_type,
			 'parameterlist' => \@parameterlist,
			 'parameters' => \%parameters,
			 'parametertypes' => \%parametertypes,
			 'sectionlist' => \@sectionlist,
			 'sections' => \%sections,
			 'purpose' => $function_purpose
			 });
}

######################################################################
# main
# states
# 0 - normal code
# 1 - looking for function name
# 2 - scanning field start.
# 3 - scanning prototype.
$state = 0;
$section = "";

$doc_special = "\@\%\$\#";

$doc_start = "^/\\*\\*\$";
$doc_end = "\\*/";
$doc_com = "\\s*\\*\\s*";
$doc_func = $doc_com."(\\w+):?";
$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w]+):\\s*(.*)";
$doc_content = $doc_com."(.*)";

%constants = ();
%parameters = ();
@parameterlist = ();
%sections = ();
@sectionlist = ();

$contents = "";
$section_default = "Description";	# default section
$section = $section_default;
$enum = 0;

$lineno = 0;

foreach $file (@ARGV) {
    if (!open(IN,"<$file")) {
	print STDERR "Error: Cannot open file $file\n";
	next;
    }
    while ($line = <IN>) {
	$lineno++;

	if ($state == 0) {
	    if ($line =~ /$doc_start/o) {
		$state = 1;		# next line is always the function name
#	    print STDERR "XXX: start of doc comment\n";
	    }
	} elsif ($state == 1) {	# this line is the function name (always)
	    if ($line =~ /$doc_func/o) {
		$function = $1;
		$state = 2;
#	    print STDERR "XXX: start of doc comment, looking for prototype\n";

		if ($line =~ /-\s*(.*)/) {
		    $function_purpose = $1;
		} else {
		    $function_purpose = "";
		}
		if ($verbose) {
		    print STDERR "Info($lineno): Scanning doc for $function\n";
		}
	    } else {
		print STDERR "warning: $lineno: Cannot understand $_ on line $lineno",
		" - I thought it was a doc line\n";
		$state = 0;
	    }
	} elsif ($state == 2) {	# look for head: lines, and include content
	    if ($line =~ /$doc_sect/o) {
		$newsection = $1;
		$newcontents = $2;

		if ($contents ne '') {
		    dump_section($section, $contents);
		    $section = $section_default;
		}

		$contents = $newcontents;
		if ($contents ne "") {
		    $contents .= "\n";
		}
		$section = $newsection;
	    } elsif ($line =~ /$doc_end/) {

		if ($contents ne "") {
		    dump_section($section, $contents);
		    $section = $section_default;
		    $contents = "";
		}

		$prototype = '';
		$state = 3;
	    } elsif ($line =~ /$doc_content/) {
		# miguel-style comment kludge, look for blank lines after
		# @parameter line to signify start of description
		if ($1 eq '' && $section =~ m/^@/) {
		    dump_section($section, $contents);
		    $section = $section_default;
		    $contents = "";
		} else {
		    $contents .= $1."\n";
		}
	    } else {
		# i dont know - bad line?  ignore.
		print STDERR "warning: $lineno: Bad line: $_";
	    }
	} elsif ($state == 3) {	# scanning for function { (end of prototype)
	    if ($line =~ /([a-zA-Z\s]+)enum(.*)$/) {
	        $enum = 1;
	    }

	    if ($line =~ m#\s*/\*\s+MACDOC\s*#io) {
	      # do nothing
	    }
	    elsif ($enum == 1 && $line =~ /(\s*\{).*/) {
		$prototype = "typedef enum {";
	    }
	    elsif ($line =~ /([^\{]*)/) {
		$prototype .= $1;
	    }

	    if ($enum == 0 && $line =~ /;/) {
		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
		$prototype =~ s@^ +@@gos; # strip leading spaces

		dump_function($prototype);

		$function = "";
		%constants = ();
		%parameters = ();
		%parametertypes = ();
		@parameterlist = ();
		%sections = ();
		@sectionlist = ();
		$prototype = "";
		$enum = 0;

		$state = 0;
	    }
	    elsif ($enum == 1 && $line =~ /\}/) {
		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
		$prototype =~ s@^ +@@gos; # strip leading spaces

		dump_enum($prototype);

		$function = "";
		%constants = ();
		%parameters = ();
		%parametertypes = ();
		@parameterlist = ();
		%sections = ();
		@sectionlist = ();
		$prototype = "";
		$enum = 0;

		$state = 0;
	    }

	}
    }

}
