diff options
Diffstat (limited to 'argp/argp.h')
-rw-r--r-- | argp/argp.h | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/argp/argp.h b/argp/argp.h index be727561a1..2e20ea67f3 100644 --- a/argp/argp.h +++ b/argp/argp.h @@ -22,14 +22,20 @@ #define __ARGP_H__ #include <stdio.h> -#include <errno.h> #include <ctype.h> #include <getopt.h> +#define __need_error_t +#include <errno.h> + #ifndef __const #define __const const #endif +#ifndef __error_t_defined +typedef int error_t; +#endif + #ifndef __P # if (defined (__STDC__) && __STDC__) || defined (__cplusplus) # define __P(args) args @@ -194,7 +200,26 @@ struct argp their own argp structure, which you want to use in conjunction with your own. */ __const struct argp_child *children; + + /* If non-zero, this should be a function to filter the output of help + messages. KEY is either a key from an option, in which case TEXT is + that option's help text, or a special key from the ARGP_KEY_HELP_ + defines, below, describing which other help text TEXT is. The function + should return either TEXT, if it should be used as-is, a replacement + string, which should be malloced, and will be freed by argp, or NULL, + meaning `print nothing'. The value for TEXT is *after* any translation + has been done, so if any of the replacement text also needs translation, + that should be done by the filter function. INPUT is either the input + supplied to argp_parse, or NULL, if argp_help was called directly. */ + char *(*help_filter)(int __key, __const char *__text, void *__input); }; + +/* Possible KEY arguments to a help filter function. */ +#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceeding options. */ +#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ +#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ +#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; + TEXT is NULL for this key. */ /* When an argp has a non-zero CHILDREN field, it should point to a vector of argp_child structures, each of which describes a subsidiary argp. */ @@ -265,6 +290,8 @@ struct argp_state /* Streams used when argp prints something. */ FILE *err_stream; /* For errors; initialized to stderr. */ FILE *out_stream; /* For information; initialized to stdout. */ + + void *pstate; /* Private, for use by argp. */ }; /* Flags for argp_parse (note that the defaults are those that are @@ -318,20 +345,20 @@ struct argp_state routine returned a non-zero value, it is returned; otherwise 0 is returned. This function may also call exit unless the ARGP_NO_HELP flag is set. INPUT is a pointer to a value to be passed in to the parser. */ -error_t argp_parse __P ((__const struct argp *__argp, - int __argc, char **__argv, unsigned __flags, - int *__arg_index, void *__input)); -error_t __argp_parse __P ((__const struct argp *__argp, - int __argc, char **__argv, unsigned __flags, - int *__arg_index, void *__input)); +extern error_t argp_parse __P ((__const struct argp *__argp, + int __argc, char **__argv, unsigned __flags, + int *__arg_index, void *__input)); +extern error_t __argp_parse __P ((__const struct argp *__argp, + int __argc, char **__argv, unsigned __flags, + int *__arg_index, void *__input)); /* Global variables. */ /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which - will print this this string followed by a newline and exit (unless the + will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ -extern char *argp_program_version; +extern const char *argp_program_version; /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which @@ -406,9 +433,11 @@ extern void __argp_usage __P ((struct argp_state *__state)); /* If appropriate, print the printf string FMT and following args, preceded by the program name and `:', to stderr, and followed by a `Try ... --help' message, then exit (1). */ -void argp_error __P ((struct argp_state *__state, __const char *__fmt, ...)) +extern void argp_error __P ((struct argp_state *__state, __const char *__fmt, + ...)) __attribute__ ((__format__ (__printf__, 2, 3))); -void __argp_error __P ((struct argp_state *__state, __const char *__fmt, ...)) +extern void __argp_error __P ((struct argp_state *__state, + __const char *__fmt, ...)) __attribute__ ((__format__ (__printf__, 2, 3))); /* Similar to the standard gnu error-reporting function error(), but will @@ -419,11 +448,11 @@ void __argp_error __P ((struct argp_state *__state, __const char *__fmt, ...)) difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ -void argp_failure __P ((struct argp_state *__state, - int __status, int __errnum, __const char *__fmt, ...)) +extern void argp_failure __P ((struct argp_state *__state, int __status, + int __errnum, __const char *__fmt, ...)) __attribute__ ((__format__ (__printf__, 4, 5))); -void __argp_failure __P ((struct argp_state *__state, - int __status, int __errnum, __const char *__fmt, ...)) +extern void __argp_failure __P ((struct argp_state *__state, int __status, + int __errnum, __const char *__fmt, ...)) __attribute__ ((__format__ (__printf__, 4, 5))); /* Returns true if the option OPT is a valid short option. */ @@ -434,6 +463,13 @@ extern int __option_is_short __P ((__const struct argp_option *__opt)); options array. */ extern int _option_is_end __P ((__const struct argp_option *__opt)); extern int __option_is_end __P ((__const struct argp_option *__opt)); + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +extern void *_argp_input __P ((__const struct argp *argp, + __const struct argp_state *state)); +extern void *__argp_input __P ((__const struct argp *argp, + __const struct argp_state *state)); #ifdef __OPTIMIZE__ |