Add function prototypes to tools/c2man.pl
Francois Gouget
fgouget at free.fr
Wed Sep 29 18:58:39 CDT 2004
I'm not very familiar with this tool so all I can say is that it does
not have compilation errors at startup and seems to behave rationally.
Note: output_api_footer() does not take any parameter... but it might
one day and we pass it one anyway. So for symetry with
output_api_header() I declared it with a single parameter which is just
not used so far.
Changelog:
* tools/c2man.pl
Add prototypes to all functions.
Move 'main' to the end so we don't have to pre-declare all the
functions.
--
Francois Gouget fgouget at free.fr http://fgouget.free.fr/
1 + e ^ ( i * pi ) = 0
-------------- next part --------------
Index: tools/c2man.pl
===================================================================
RCS file: /var/cvs/wine/tools/c2man.pl,v
retrieving revision 1.17
diff -u -r1.17 c2man.pl
--- tools/c2man.pl 29 Jul 2004 02:35:04 -0000 1.17
+++ tools/c2man.pl 29 Sep 2004 23:38:40 -0000
@@ -65,129 +65,11 @@
my $year = $datetime[5] + 1900;
my $date = "$months[$datetime[4]] $year";
-sub usage
-{
- print "\nCreate API Documentation from Wine source code.\n\n",
- "Usage: c2man.pl [options] {-w <spec>} {-I <include>} {<source>}\n",
- "Where: <spec> is a .spec file giving a DLL's exports.\n",
- " <include> is an include directory used by the DLL.\n",
- " <source> is a source file of the DLL.\n",
- " The above can be given multiple times on the command line, as appropriate.\n",
- "Options:\n",
- " -Th : Output HTML instead of a man page\n",
- " -Ts : Output SGML (Docbook source) instead of a man page\n",
- " -o <dir> : Create output in <dir>, default is \"",$opt_output_directory,"\"\n",
- " -s <sect>: Set manual section to <sect>, default is ",$opt_manual_section,"\n",
- " -e : Output \"FIXME\" documentation from empty comments.\n",
- " -v : Verbosity. Can be given more than once for more detail.\n";
-}
-
-# Print usage if we're called with no args
-if( @ARGV == 0)
-{
- usage();
-}
-
-# Process command line options
-while(defined($_ = shift @ARGV))
-{
- if( s/^-// )
- {
- # An option.
- for ($_)
- {
- /^o$/ && do { $opt_output_directory = shift @ARGV; last; };
- s/^S// && do { $opt_manual_section = $_; last; };
- /^Th$/ && do { $opt_output_format = "h"; last; };
- /^Ts$/ && do { $opt_output_format = "s"; last; };
- /^v$/ && do { $opt_verbose++; last; };
- /^e$/ && do { $opt_output_empty = 1; last; };
- /^L$/ && do { last; };
- /^w$/ && do { @opt_spec_file_list = (@opt_spec_file_list, shift @ARGV); last; };
- s/^I// && do { if ($_ ne ".") {
- my $include = $_."/*.h";
- $include =~ s/\/\//\//g;
- my $have_headers = `ls $include >/dev/null 2>&1`;
- if ($? >> 8 == 0) { @opt_header_file_list = (@opt_header_file_list, $include); }
- }
- last;
- };
- s/^R// && do { if ($_ =~ /^\//) { $opt_wine_root_dir = $_; }
- else { $opt_wine_root_dir = `cd $pwd/$_ && pwd`; }
- $opt_wine_root_dir =~ s/\n//;
- $opt_wine_root_dir =~ s/\/\//\//g;
- if (! $opt_wine_root_dir =~ /\/$/ ) { $opt_wine_root_dir = $opt_wine_root_dir."/"; };
- last;
- };
- die "Unrecognised option $_\n";
- }
- }
- else
- {
- # A source file.
- push (@opt_source_file_list, $_);
- }
-}
-
-# Remove duplicate include directories
-my %htmp;
- at opt_header_file_list = grep(!$htmp{$_}++, @opt_header_file_list);
-
-if ($opt_verbose > 3)
-{
- print "Output dir:'".$opt_output_directory."'\n";
- print "Section :'".$opt_manual_section."'\n";
- print "Format :'".$opt_output_format."'\n";
- print "Root :'".$opt_wine_root_dir."'\n";
- print "Spec files:'@opt_spec_file_list'\n";
- print "Includes :'@opt_header_file_list'\n";
- print "Sources :'@opt_source_file_list'\n";
-}
-
-if (@opt_spec_file_list == 0)
-{
- exit 0; # Don't bother processing non-dll files
-}
-
-# Read in each .spec files exports and other details
-while(my $spec_file = shift @opt_spec_file_list)
-{
- process_spec_file($spec_file);
-}
-
-if ($opt_verbose > 3)
-{
- foreach my $spec_file ( keys %spec_files )
- {
- print "in '$spec_file':\n";
- my $spec_details = $spec_files{$spec_file}[0];
- my $exports = $spec_details->{EXPORTS};
- for (@$exports)
- {
- print @$_[0].",".@$_[1].",".@$_[2].",".@$_[3]."\n";
- }
- }
-}
-
-# Extract and output the comments from each source file
-while(defined($_ = shift @opt_source_file_list))
-{
- process_source_file($_);
-}
-
-# Write the index files for each spec
-process_index_files();
-
-# Write the master index file
-output_master_index_files();
-
-exit 0;
-
# Generate the list of exported entries for the dll
-sub process_spec_file
+sub process_spec_file($)
{
- my $spec_name = shift(@_);
+ my $spec_name = shift;
my $dll_name = $spec_name;
$dll_name =~ s/\..*//; # Strip the file extension
my $uc_dll_name = uc $dll_name;
@@ -308,9 +190,9 @@
}
# Read each source file, extract comments, and generate API documentation if appropriate
-sub process_source_file
+sub process_source_file($)
{
- my $source_file = shift(@_);
+ my $source_file = shift;
my $source_details =
{
CONTRIBUTORS => [ ],
@@ -546,9 +428,9 @@
}
# Standardise a comments text for consistency
-sub process_comment_text
+sub process_comment_text($)
{
- my $comment = shift(@_);
+ my $comment = shift;
my $i = 0;
for (@{$comment->{TEXT}})
@@ -619,9 +501,9 @@
}
# Standardise our comment and output it if it is suitable.
-sub process_comment
+sub process_comment($)
{
- my $comment = shift(@_);
+ my $comment = shift;
# Don't process this comment if the function isn't exported
my $spec_details = $spec_files{$comment->{DLL_NAME}}[0];
@@ -979,9 +861,9 @@
}
# process our extra comment and output it if it is suitable.
-sub process_extra_comment
+sub process_extra_comment($)
{
- my $comment = shift(@_);
+ my $comment = shift;
my $spec_details = $spec_files{$comment->{DLL_NAME}}[0];
@@ -1080,9 +962,9 @@
}
# Write a standardised comment out in the appropriate format
-sub output_comment
+sub output_comment($)
{
- my $comment = shift(@_);
+ my $comment = shift;
if ($opt_verbose > 0)
{
@@ -1114,7 +996,7 @@
}
# Write out an index file for each .spec processed
-sub process_index_files
+sub process_index_files()
{
foreach my $spec_file (keys %spec_files)
{
@@ -1134,9 +1016,9 @@
}
# Write a spec files documentation out in the appropriate format
-sub output_spec
+sub output_spec($)
{
- my $spec_details = shift(@_);
+ my $spec_details = shift;
if ($opt_verbose > 2)
{
@@ -1359,9 +1241,9 @@
# This is to allow new types of output to be added easily.
# Open the api file
-sub output_open_api_file
+sub output_open_api_file($)
{
- my $output_name = shift(@_);
+ my $output_name = shift;
$output_name = $opt_output_directory."/".$output_name;
if ($opt_output_format eq "h")
@@ -1380,15 +1262,15 @@
}
# Close the api file
-sub output_close_api_file
+sub output_close_api_file()
{
close (OUTPUT);
}
# Output the api file header
-sub output_api_header
+sub output_api_header($)
{
- my $comment = shift(@_);
+ my $comment = shift;
if ($opt_output_format eq "h")
{
@@ -1414,7 +1296,7 @@
}
}
-sub output_api_footer
+sub output_api_footer($)
{
if ($opt_output_format eq "h")
{
@@ -1433,10 +1315,10 @@
}
}
-sub output_api_section_start
+sub output_api_section_start($$)
{
- my $comment = shift(@_);
- my $section_name = shift(@_);
+ my $comment = shift;
+ my $section_name = shift;
if ($opt_output_format eq "h")
{
@@ -1452,14 +1334,14 @@
}
}
-sub output_api_section_end
+sub output_api_section_end()
{
# Not currently required by any output formats
}
-sub output_api_name
+sub output_api_name($)
{
- my $comment = shift(@_);
+ my $comment = shift;
output_api_section_start($comment,"NAME");
@@ -1487,9 +1369,9 @@
output_api_section_end();
}
-sub output_api_synopsis
+sub output_api_synopsis($)
{
- my $comment = shift(@_);
+ my $comment = shift;
my @fmt;
output_api_section_start($comment,"SYNOPSIS");
@@ -1565,9 +1447,9 @@
output_api_section_end();
}
-sub output_api_comment
+sub output_api_comment($)
{
- my $comment = shift(@_);
+ my $comment = shift;
my $open_paragraph = 0;
my $open_raw = 0;
my $param_docs = 0;
@@ -1799,7 +1681,7 @@
}
# Create the master index file
-sub output_master_index_files
+sub output_master_index_files()
{
if ($opt_output_format eq "")
{
@@ -1920,9 +1802,9 @@
}
# Write the master wine-api.sgml, linking it to each dll.
-sub output_sgml_master_file
+sub output_sgml_master_file($)
{
- my $dlls = shift(@_);
+ my $dlls = shift;
output_open_api_file("wine-api");
print OUTPUT "<!-- Generated file - DO NOT EDIT! -->\n";
@@ -1949,9 +1831,9 @@
}
# Produce the sgml for the dll chapter from the generated files
-sub output_sgml_dll_file
+sub output_sgml_dll_file($)
{
- my $spec_details = shift(@_);
+ my $spec_details = shift;
# Make a list of all the documentation files to include
my $exports = $spec_details->{EXPORTS};
@@ -1993,7 +1875,7 @@
}
# Write the html index files containing the function names
-sub output_html_index_files
+sub output_html_index_files()
{
if ($opt_output_format ne "h")
{
@@ -2056,7 +1938,7 @@
}
# Output the stylesheet for HTML output
-sub output_html_stylesheet
+sub output_html_stylesheet()
{
if ($opt_output_format ne "h")
{
@@ -2151,3 +2033,127 @@
print CSS $css;
close(CSS);
}
+
+
+sub usage()
+{
+ print "\nCreate API Documentation from Wine source code.\n\n",
+ "Usage: c2man.pl [options] {-w <spec>} {-I <include>} {<source>}\n",
+ "Where: <spec> is a .spec file giving a DLL's exports.\n",
+ " <include> is an include directory used by the DLL.\n",
+ " <source> is a source file of the DLL.\n",
+ " The above can be given multiple times on the command line, as appropriate.\n",
+ "Options:\n",
+ " -Th : Output HTML instead of a man page\n",
+ " -Ts : Output SGML (Docbook source) instead of a man page\n",
+ " -o <dir> : Create output in <dir>, default is \"",$opt_output_directory,"\"\n",
+ " -s <sect>: Set manual section to <sect>, default is ",$opt_manual_section,"\n",
+ " -e : Output \"FIXME\" documentation from empty comments.\n",
+ " -v : Verbosity. Can be given more than once for more detail.\n";
+}
+
+
+#
+# Main
+#
+
+# Print usage if we're called with no args
+if( @ARGV == 0)
+{
+ usage();
+}
+
+# Process command line options
+while(defined($_ = shift @ARGV))
+{
+ if( s/^-// )
+ {
+ # An option.
+ for ($_)
+ {
+ /^o$/ && do { $opt_output_directory = shift @ARGV; last; };
+ s/^S// && do { $opt_manual_section = $_; last; };
+ /^Th$/ && do { $opt_output_format = "h"; last; };
+ /^Ts$/ && do { $opt_output_format = "s"; last; };
+ /^v$/ && do { $opt_verbose++; last; };
+ /^e$/ && do { $opt_output_empty = 1; last; };
+ /^L$/ && do { last; };
+ /^w$/ && do { @opt_spec_file_list = (@opt_spec_file_list, shift @ARGV); last; };
+ s/^I// && do { if ($_ ne ".") {
+ my $include = $_."/*.h";
+ $include =~ s/\/\//\//g;
+ my $have_headers = `ls $include >/dev/null 2>&1`;
+ if ($? >> 8 == 0) { @opt_header_file_list = (@opt_header_file_list, $include); }
+ }
+ last;
+ };
+ s/^R// && do { if ($_ =~ /^\//) { $opt_wine_root_dir = $_; }
+ else { $opt_wine_root_dir = `cd $pwd/$_ && pwd`; }
+ $opt_wine_root_dir =~ s/\n//;
+ $opt_wine_root_dir =~ s/\/\//\//g;
+ if (! $opt_wine_root_dir =~ /\/$/ ) { $opt_wine_root_dir = $opt_wine_root_dir."/"; };
+ last;
+ };
+ die "Unrecognised option $_\n";
+ }
+ }
+ else
+ {
+ # A source file.
+ push (@opt_source_file_list, $_);
+ }
+}
+
+# Remove duplicate include directories
+my %htmp;
+ at opt_header_file_list = grep(!$htmp{$_}++, @opt_header_file_list);
+
+if ($opt_verbose > 3)
+{
+ print "Output dir:'".$opt_output_directory."'\n";
+ print "Section :'".$opt_manual_section."'\n";
+ print "Format :'".$opt_output_format."'\n";
+ print "Root :'".$opt_wine_root_dir."'\n";
+ print "Spec files:'@opt_spec_file_list'\n";
+ print "Includes :'@opt_header_file_list'\n";
+ print "Sources :'@opt_source_file_list'\n";
+}
+
+if (@opt_spec_file_list == 0)
+{
+ exit 0; # Don't bother processing non-dll files
+}
+
+# Read in each .spec files exports and other details
+while(my $spec_file = shift @opt_spec_file_list)
+{
+ process_spec_file($spec_file);
+}
+
+if ($opt_verbose > 3)
+{
+ foreach my $spec_file ( keys %spec_files )
+ {
+ print "in '$spec_file':\n";
+ my $spec_details = $spec_files{$spec_file}[0];
+ my $exports = $spec_details->{EXPORTS};
+ for (@$exports)
+ {
+ print @$_[0].",".@$_[1].",".@$_[2].",".@$_[3]."\n";
+ }
+ }
+}
+
+# Extract and output the comments from each source file
+while(defined($_ = shift @opt_source_file_list))
+{
+ process_source_file($_);
+}
+
+# Write the index files for each spec
+process_index_files();
+
+# Write the master index file
+output_master_index_files();
+
+exit 0;
More information about the wine-patches
mailing list