Hi Justin, If you would like to get this pushed upstream, the following would help:
1. Follow man-pages formatting conventions would help. In particular, the use of lines containing just a "." (to force a blank line) should be avoided. Just remove all of those lines. (Most man-pages do not have the more than one blank line to separate sections.) 2. It would be helpful to know where you have gained the information from. 3. Can you find anyone to review this page for technical accuracy. I am pressed for time. 4. A couple of demonstration programs might help this man page. Once simple, the other more complex and general. Initially, you forward the programs separately. Cheers, Michael Justin Pryzby wrote: > Included is a 0th order implementation for argp documentation. > > > .\" Copyright (C) 2006 Justin Pryzby <[EMAIL PROTECTED]> > .\" > .\" Permission is hereby granted, free of charge, to any person obtaining > .\" a copy of this software and associated documentation files (the > .\" "Software"), to deal in the Software without restriction, including > .\" without limitation the rights to use, copy, modify, merge, publish, > .\" distribute, sublicense, and/or sell copies of the Software, and to > .\" permit persons to whom the Software is furnished to do so, subject to > .\" the following conditions: > .\" > .\" The above copyright notice and this permission notice shall be > .\" included in all copies or substantial portions of the Software. > .\" > .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. > .\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY > .\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, > .\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE > .\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > .\" > .\" References: > .\" glibc manual and source > .TH ARGP 3 "30 May 2006" GNU > .SH NAME > argp_parse, \ > argp_state_help, \ > argp_help, \ > argp_usage, \ > argp_error, \ > argp_failure, \ > _option_is_end, \ > _option_is_short, \ > _argp_input, \ > argp_program_version, \ > argp_program_version_hook, \ > argp_err_exit_status, \ > argp_program_bug_address, \ > argp_parser_t \ > \- parsing and handling of command-line arguments > . > . > . > .SH SYNOPSIS > .B #include <argp.h> > . > . > .HP > .PD 0 > .BI "error_t argp_parse(const struct argp *" argp , > .B int > .IB argc , > .BI "char **" argv , > .B unsigned > .IB flags , > .BI "int *" arg_index , > .BI "void *" input ); > . > . > .HP > .BI "void argp_state_help(const struct argp_state *" state , > .BI "FILE *" stream , > .B unsigned > .IB flags ); > . > .HP > .BI "void argp_help(const struct argp *" argp , > .BI "FILE *" stream , > .BI unsigned > .IB flags , > .BI "char *" name ); > .LP > . > . > .BI "void argp_usage(const struct argp_state *" state ); > . > .br > .BI "void argp_error(const struct argp_state *" state , > .BI "const char *" fmt , > .B ...); > . > . > .HP > .BI "void argp_failure(const struct argp_state *" state , > .BI int > .IB status , > .B int > .IB errnum , > .BI "const char *" fmt , > .B ...); > .LP > . > . > .br > .BI "int _option_is_end(const struct argp_option *" opt ); > . > .br > .BI "int _option_is_short(const struct argp_option *" opt ); > . > .HP > .BI "void *_argp_input(const struct argp *" argp , > .BI "const struct argp_state *" state ); > .LP > . > . > .\" Variables: > .br > .BI "const char *" argp_program_version ; > . > .HP > .BI "void (*" argp_program_version_hook ")(FILE *" stream , > .BI "struct argp_state *" state ); > .LP > . > . > .B error_t > .IB argp_err_exit_status ; > .br > .BI "const char *" argp_program_bug_address ; > .br > . > . > .HP > .B "typedef error_t (*argp_parser_t)(int" > .IR key , > .BI "char *" arg , > .BI "struct argp_state *" state ); > .PD > . > . > . > .SH DESCRIPTION > .BR argp (3) > provides functionality for argument parsing and includes handling for > .B \-\-help > and > .B \-\-version > messages; it also allows the use of option and parser sets from > other application components. > . > . > .P > .BR argp_parse () > parses the command-line argument vector > .I argv > of length > .IR argc ; > note that, by default, calling > .BR argp_parse () > may cause the program to terminate if a problem with the arguments is > detected, an internal error occurs, or one of the automatically > generated options such as > .B \-\-help > are given. > . > .P > .IR argp > should be a pointer to a structure defining the options to be handled > as well as the information for the > .B \-\-help > text; a NULL value is equivalent to having all elements set to zero. > . > . > .P > .I argp > includes references to other structures, and a callback function. > .B struct argp_option > defines a single accepted option; > .B struct argp_child > may be used to include parsing abilities implemented by other modules; > The > .I parser > callback is expected to handle the accepted options; it is passed a > .BR "struct argp_state *" . > . > .P > If > .I arg_index > is not NULL, > it is set to the index into > .I argv > of the first unhandled argument. > .\" non option? > .I input > points to arbitrary data to be passed to the parser callback function; > it may be used to communicate the results of argument parsing. > .I flags > is a bitwise combination of the following values: > .\" Test interaction between the first 3: > .TP > .B ARGP_PARSE_ARGV0 > Inhibits the normal behavior of skipping > .IR argv[0] ; > typically, this doesn't contain an argument, but rather the name of > the program. > . > .TP > .B ARGP_NO_ERRS > Inhibits the diagnostic output of messages regarding unrecognized > arguments to > .BR stderr . > Also prevents exiting on error, as with > .BR ARGP_NO_EXIT . > . > .TP > .B ARGP_NO_ARGS > Inhibits passing non-option arguments to the parser function. > Normally, all command-line arguments are passed. Note that the parser > function need not handle non-option arguments, and > .BR argp_parse () > will only fail when an option argument is unhandled (or other error > occurs). > . > .TP > .B ARGP_IN_ORDER > Inhibits the manipulation of > .IR argv ; > otherwise, all option arguments are shifted to precede the non-option > arguments. The same effect is achieved with > .BR getopt () > by setting the environment variable > .BR POSIXLY_CORRECT . > . > .TP > .B ARGP_NO_HELP > Inhibits automatic processing of the > .B \-\-help > and > .B \-\-version > arguments. > . > .TP > .B ARGP_NO_EXIT > Inhibits any call to > .BR exit () >>from within > .BR argp_parse (). > .\" ... > Otherwise, unhandled option arguments and errors cause the program to > terminate. > . > .TP > .B ARGP_LONG_ONLY > Allows long options to be prefixed with a single hyphen, instead of > requiring a double-hyphen. The effect is the same as using > .BR getopt_long () > instead of > .BR getopt (). > . > .TP > .B ARGP_SILENT > Inhibits any behavior besides argument parsing. > Equivalent to > .BR ARGP_NO_EXIT|ARGP_NO_ERRS|ARGP_NO_HELP . > . > . > . > .SH "STRUCT ARGP" > .P > The > .B argp > structure is defined to have the following fields: > .TP 1.1i > .BI "const struct argp_option *" options ; > Null-terminated array of accepted options; NULL is equivalent to a > single element with all elements set to zero. > . > .TP > .BI "argp_parser_t " parser ; > Handler for the accepted options; NULL is equivalent to a handler > which handles no options. > . > .TP > .BI "const char *" args_doc ; > Description of the required, non-option arguments. Alternate accepted > syntaxes may be given, separated by newlines. > . > .TP > .BI "const char *" doc ; > Description of the program. The first part appears following the > .B Usage: > line in help output; the second part, following a vertical tab > character (if any), appears after the options but before any bug > reporting address. > . > .TP > .BI "const struct argp_child *" children ; > Null-terminated array specifying indirectly-implemented parsing > capabilities. This is intended to allow library components to expose > parameters as > .B argp > structures, which can be trivially used by applications. > > This field will often be left as NULL. > . > .TP > .BI "char *(*" help_filter ")(int " key, " const char *" text, " void *" > input ); > . > Filter function allowing a layer of indirection before the output of > .IR text . > This is intended to allow, for example, output of translated > .B \-\-help > information. > > This field will often be left as NULL. > .TP > .BI "const char *" argp_domain ; > .BR textdomain ()-style > description of the translation to use for internally-generated > messages. > > This field will often be left as NULL. > .LP > . > . > . > .SH "STRUCT ARGP_OPTION" > .P > An allowed option is defined by a > .BR "struct argp_option" , > which has the following fields: > . > .TP 1.1i > .BI "const char *" name ; > Long option name; may be NULL. > . > .TP > .BI "int " key ; > Value provided to the parser callback function to distinguish between > options; it is also accepted as the short option character if > .I key > is positive and > .BI isprint( key ) > is true. > . > .TP > .BI "const char *" arg ; > Description of the option associated with the argument. If > .I arg > is not NULL, the option will be required, unless > .B OPTION_ARG_OPTIONAL > is set in > .IR flags . > . > .TP > .BI "int " flags ; > .br > Bitwise combination of the following values: > .RS > .TP > .B OPTION_ARG_OPTIONAL > No value is required to follow this argument. > . > .TP > .B OPTION_HIDDEN > This option is not to be included in help output. > . > .TP > .B OPTION_ALIAS > .\" First option > This option is an alias for the most recent option which did not have > this flag set. > .IR arg , > .IR flags , > .IR doc , > and > .I group > are inherited from that option. > . > .TP > .B OPTION_DOC > This option is actually an informative text. > . > .TP > .B OPTION_NO_USAGE > The option is a special case documented by the > .I args_doc > member of the > .B argp > structure, and should not appear in the text of > .B \-\-usage > messages (but will still appear in the > .B \-\-help > messages). > .RE > . > .TP > .BI "const char *" doc ; > Description of the effect this option has on the behavior of the > program. If > .I name > and > .I key > are both set to zero, then > .I doc > is displayed as a "separator" between sets of options, and appears in > the > .B \-\-help > message before the other options with the same group. It is suggested > to end such separators with a colon. > . > .TP > .BI "int " group ; > Used for sorting the options displayed in the > .B \-\-help > message. Option groups are displayed in increasing order, but with > negative groups following nonnegative ones. > .LP > . > . > . > .SH "PARSER CALLBACK FUNCTION" > For each command-line argument, > .BR argp_parse () > calls the parser callback functions, defined to have type > .BR argp_parser_t . > > .I key > is the value given by the > .BR "struct argp_option" . > .I arg > points to the option following the argument, if any; otherwise, it is > NULL. > .P > Parser functions should return 0 if they handle the given argument, > and > .B ARGP_ERR_UNKNOWN > if not, in which case, the remainder of the parsers will be > tried. If an internal error occurs, a negative error code (as used by > .BR errno ) > should be returned. > .P > The > .I parser > functions are also called with special > .I key > values; if > .I key > is > .BR ARGP_KEY_ARG , > then > .I arg > is a non-option command-line argument. All other special values will > have > .I arg > set to NULL. > .P > .I key > may be any of the following special values: > . > .TP > .B ARGP_KEY_ARG > .I arg > is a non-option command-line argument (such as those documented in > .IR args_doc ). > . > .TP > .B ARGP_KEY_ARGS > This parser was just called with > .B ARGP_KEY_ARG > set. This is intended to allow the positions of an arbitrary number > of non-option arguments to be stored. > . > .TP > .B ARGP_KEY_END > All argument have been handled successfully, including non-option > arguments. Child parsers are called first. > .B ARGP_KEY_SUCCESS > will be set at the next callback, unless an error occurs. > . > .TP > .B ARGP_KEY_NO_ARGS > All option arguments have been handled successfully, and no non-option > command-line arguments were processed. > .B ARGP_KEY_END > will be set at the next callback, unless an error occurs. > . > .TP > .B ARGP_KEY_INIT > This is the first call of the parser function; the parent parser is > initialized before the child parsers. Memory allocation and > initialization of > .I child_input > might happen at this point. > . > .TP > .B ARGP_KEY_FINI > This is the last call of the parser function. Memory might be freed > at this point. > . > .TP > .B ARGP_KEY_SUCCESS > All option arguments have been handled successfully, and > .BR argp_parse () > will return 0. Any number of non-option arguments may or may not have > been handled. > .B ARGP_KEY_FINI > will be set at the next callback, unless an error occurs. > . > .TP > .B ARGP_KEY_ERROR > .\" What kind? > An error occurred, and either the program will terminate, or > .BR argp_parse () > will return nonzero, depending on whether > .B ARGP_NO_EXIT > is set. > .B ARGP_KEY_FINI > will be set at the next callback, (unless the error occured during a > callback with > .B ARGP_KEY_INIT > set. > .LP > . > . > . > .SH "STRUCT ARGP_STATE" > The parser functions are passed a pointer to > .BR "struct argp_state" , > which is defined to have the following fields: > .TP > .BI "const struct argp *" root_argp ; > The > .B argp > structure created to include automatically generated options, such as > .BR \-\-help . > . > .TP > .BI "int " argc ; > The count of arguments, as passed to > .BR argp_parse (); > this field may be manipulated by the callback function. > . > .TP > .BI "char **" argv ; > The command-line arguments, as passed to > .BR argp_parse (); > this field may be manipulated by the callback function. > . > .TP > .BI "int " next ; > The index into > .I argv > of the argument to be processed after the current argument; > this field may be manipulated by the callback function. > . > .TP > .BI "unsigned " flags ; > The > .I flags > argument, as passed to > .BR argp_parse (); > this field may be manipulated by the callback function (but the > change may not necessarily effect the behavior of calling > .BR argp_parse () > with the new flags). > . > .TP > .BI "unsigned " arg_num ; > If a parser callback function is called with > .I key > set to > .BR ARGP_KEY_ARG , > this is the index into > .\" next-1; really?? > .I argv > of the current argument. Otherwise, it is the number of non-option > arguments that have been handled. > . > .TP > .BI "int " quoted ; > If an "\-\-" argument (used to end option parsing) was processed, the > index into > .I argv > of the following argument; otherwise zero. > . > .TP > .BI "void *" input ; > The > .I input > argument, as passed to > .BR argp_parse (); > this field may be manipulated by the callback function. > . > .TP > .BI "void **" child_inputs ; > A vector of arbitrary input pointers to be passed to each of the > child parsers. > . > .TP > .BI "void *" hook ; > .\" TODO > .\" I'm going to take a stab in the dark and guess that this is a > .\" per-parser object, to be interpreted by the parser > . > .TP > .BI "char *" name ; > The program name used to prefix messages from > .BR argp_usage (), > .BR argp_error (), > and > .BR argp_failure (). > . > .TP > .BI "FILE *" err_stream ; > Stream to which errors and diagnostic messages are printed. > . > .TP > .BI "FILE *" err_stream ; > Stream to which expected output is printed. > . > .TP > .BI "void *" pstate ; > Opaque data for internal use. > .LP > . > . > . > .SH "HELP FILTER" > If this callback returns NULL, nothing is output; otherwise, the > returned string is output, then freed. It is allowed to return > .I text > unmodified. > .P > .\" text is the opt_doc if key is ... > .I key > is the value from an element of the > .B argp_option > structure, or one of the following special values: > .TP > .B ARGP_KEY_HELP_PRE_DOC > First part of > .IR args_doc ; > preceding any vertical tab. > . > .TP > .B ARGP_KEY_HELP_POST_DOC > Remainder of > .IR args_doc ; > following a vertical tab. > . > .TP > .B ARGP_KEY_HELP_HEADER > .\" TODO > . > .TP > .B ARGP_KEY_HELP_EXTRA > .\" TODO > .LP > .P > .I input > is the value from the > .BR argp_parse () > call. > . > . > . > .SH "STRUCT ARGP_CHILD" > The > .B argp_child > structure is defined to have the following fields: > .TP > .BI "struct argp *" argp ; > Defines the auxiliary options and parsers to handle them. > . > .TP > .BI "int " flags ; > A bitwise combination of any of the values allowed for the > .I flag > argument to > .BR argp_parse (). > . > .TP > .BI "cont char *" header ; > A "separator" heading used to prefix the group of arguments exposed by > this child. May be NULL, in which case this child's arguments are > merged with its parents'. To inhibit merging without printing any > heading, use the null string. > . > .TP > .BI "int " group ; > Determines the order in which this child's argument's appear relative > to the parent's arguments. > .LP > . > . > . > .SH "VARIABLES" > If > .I argp_program_version > is not NULL, it is printed by > .BR argp_parse () > to handle a > .B \-\-version > argument (unless > .I argp_program_version_hook > is nonzero). > Setting > .B ARGP_NO_HELP > inhibits processing of > .B \-\-version > arguments. > . > . > .P > If > .I argp_program_version_hook > is not NULL, it is used by > .BR argp_parse () > as a callback function to output the > .B \-\-version > information, instead of printing > .IR argp_program_version > (if nonzero). > Setting > .B ARGP_NO_HELP > inhibits processing of > .B \-\-version > arguments. > . > . > .P > If > .I argp_err_exit_status > is defined and set to a nonzero value, it is used > as the exit status of the program when > .BR argp_parse () > discovers a problem with the command-line arguments. > . > . > .P > If > .I argp_program_bug_address > is not NULL, it is printed by > .BR argp_parse () > in the > .B \-\-help > output. > .P > . > . > . > .SH "HELP FUNCTIONS" > The following functions > (with the exception of > .BR argp_help ()) > are intended to be called from the > .I parser > callback functions, and accept as their first argument an > .BR "struct argp_state *" , > as passed to the callback. > . > .P > They respect > .BR ARGP_NO_EXIT , > .BR ARGP_NO_ERRS , > and > (with the exception of > .BR argp_failure ()), > .I argp_err_exit_status > and so are safe to use in library code, because the application can > control whether the program may terminate through the > .IR flags > argument to > .BR argp_parse (). > . > .P > The > .I parser > function calling these routines should return a nonzero value > afterwards, to prevent > .BR argp_parse () >>from returning successfully in the case that > .B ARGP_NO_EXIT > is set. > . > . > .P > .BR argp_state_help () > prints to > .I stream > a help message of the style requested by > .IR flags , > which may have any of the same values as for > .BR argp_help , > or one of the following additional values: > .TP > .B ARGP_HELP_EXIT_ERR > . > .TP > .B ARGP_HELP_EXIT_OK > .\" TODO: Are the following allowed/effective in argp_help? > . > .TP > .B ARGP_HELP_STD_ERR > Displays a helpful hint about how to get > .B \-\-help > output, and exits indicating failure. > . > .TP > .B ARGP_HELP_STD_USAGE > The same as > .BR ARGP_HELP_STD_USAGE , > but also preceded by the short usage message. > . > .TP > .B ARGP_HELP_STD_HELP > Displays the same output as the automatically generated > .B \-\-help > option. > .LP > . > . > .BR argp_usage () > displays to > .B stderr > the usage message specified by > .B ARGP_HELP_STD_USAGE > and terminates the program. > . > .P > .BR argp_error () > displays a formatted message followed by a hint about how to get the > help message > and terminates the program. > . > .P > .BR argp_failure () > accepts the same arguments as > .BR error (); > it displays a > .BR printf ()-style > message followed by the string given by > .BI perror( errnum ). > This is intended for the case of internal errors, such as failure to > allocate memory. > If > .I status > has a non-zero value, then > .BR exit () > is called, terminating the program with the given value as the exit > status. > . > . > . > .P > .BR argp_help () > prints a > .B \-\-help > message to > .IR stream . > .I name > is the program name to be used in the > .B Usage: > message. The style of the message is determined by > .IR flags , > which is a bitwise combination of the following values: > .TP > .B ARGP_HELP_USAGE > Display a full > .B \-\-usage > message, which explicitly lists > each accepted option. > . > .TP > .B ARGP_HELP_SHORT_USAGE > Display a short > .B \-\-usage > message, which only shows > .BR [OPTION]... . > . > .TP > .B ARGP_HELP_SEE > Display a hint about how to find the > .B \-\-help > message (should not be used with > .BR ARGP_HELP_USAGE ). > . > .TP > .B ARGP_HELP_LONG > Display a full > .B \-\-help > message, with descriptions for > each accepted option. > . > .TP > .B ARGP_HELP_PRE_DOC > Display a short description of the program; the first part > of > .IR doc , > appearing before the vertical tab (if any). > . > .TP > .B ARGP_HELP_POST_DOC > Display a longer description of the program; the second part > of > .IR doc , > appearing after the vertical tab (if any). > . > .TP > .B ARGP_HELP_DOC > Display both the first and second parts of > .IR doc , > separated by 2 newlines. > . > .TP > .B ARGP_HELP_BUG_ADDR > Display a message specifying where to send bug reports, if > .I argp_program_bug_address > is set. > . > .TP > .B ARGP_HELP_LONG_ONLY > Used internally when > .B ARGP_LONG_ONLY > is set. > .LP > . > . > .BR argp_help () > should be avoided; it doesn't include automatically generated options > like > .BR \-\-help ; > use > .BR argp_state_help () > instead. > . > . > . > .SH "RETURN VALUE" > .BR argp_parse () > returns 0 on success. If an internal error occurs, or an error with > the arguments is detected, or if none of the parser callback functions > handle an option argument, or if any of the callback functions returns > another error, > .BR argp_parse () > will cause the program to terminate, unless > .B ARGP_NO_EXIT > is set. If it is set, and an error occurs, a nonzero value is > returned. > . > .P > .\" are these intended to be exposed? > .BR _option_is_short () > returns nonzero if > .I opt > is will be displayed as a short option in > .B \-\-help > output. > .P > .BR _argp_input () > returns the > .I input > data specified in the call to > .BR argp_parse (). > .\" TODO: argp, state > .P > .BR _option_is_end () > returns nonzero if > .I opt > is the null-terminating element ending the option list. > . > . > . > .SH ERRORS > If > .B ARGP_NO_EXIT > is set, and all parser callback functions return > .B ARGP_ERR_UNKNOWN > for any user-specified argument, > .BR argp_parse () > returns > .BR EINVAL ; > if any parser returns a nonzero value other than > .BR ARGP_ERR_UNKNOWN , > .BR argp_parse () > returns immediately with that same return value, which should be one > of the system error codes in the style of > .BR errno() . > . > . > . > .SH EXAMPLE > .nf > .\" TODO > .fi > . > . > . > .SH ENVIRONMENT > .\" TODO: If > .\" .B POSIXLY_CORRECT > .\" is set, the behavior is as if > .\" .B ARGP_IN_ORDER > .\" were set. > > The > .B \-\-help > output is configurable at runtime through the environment variable > .BR ARGP_HELP_FMT , > which can be set to a comma-separated list of following strings: > .TP > .B [no\-]dup\-args > If > .B dup\-args > is set, the > .B \-\-help > text for each description of an argument which has an optional or > required option will mention the option. Otherwise, only the long > argument mentions the option, and an explanatory note is printed > immediately preceding the second part of the > .I doc > text (if any). Default: > .BR no\-dup\-args . > . > .TP > .BI short\-opt\-col= n > The column in which the short options are printed is set to > .IR n ; > default: 2. > . > .TP > .BI long\-opt\-col= n > The column in which the long options are printed is set to > .IR n ; > default: 6. > . > .TP > .BI doc\-opt\-col= n > The column in which the documentation options are printed is set to > .IR n ; > default: 2. > . > .TP > .BI opt\-doc\-col= n > The column in which options' documentation is printed is set to > .IR n ; > default: 29. > . > .TP > .BI header\-col= n > The column in which "group headers" are printed is set to > .IR n ; > default: 1. > . > .TP > .BI usage\-indent= n > The amount by which continued lines in the > .B Usage: > statement are indented is set to > .I n > spaces; > default: 12. > . > .TP > .BI rmargin= n > The maximum width of the output generated by > .B argp > is set to > .IR n ; > default: 79. > .LP > . > . > . > .SH "CONFORMING TO" > These functions and variables are GNU extensions, and should not be > used in programs intended to be portable. > . > .SH NOTES > It is a somewhat common error to fail to check if extra non\-option > arguments are given. > . > .SH BUGS > Inconsistent values for the environment variables can cause the > program to crash. > .\" Debian bug # ; fixed-upstream? > .P > If > .B \-h > is unused for automatic options, it should be recognized as a short > option synonymous with > .BR \-\-help . > . > .SH SEE ALSO > .BR getopt (3), > .BR error (3), > .BR errno (3), > .BR exit (3), > .BR program_invocation_name (3) > > -- Michael Kerrisk maintainer of Linux man pages Sections 2, 3, 4, 5, and 7 Want to help with man page maintenance? Grab the latest tarball at http://www.kernel.org/pub/linux/docs/manpages/ read the HOWTOHELP file and grep the source files for 'FIXME'. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

