glibc (2.38)

(root)/
include/
argp.h
       1  /* Hierarchical argument parsing, layered over getopt.
       2     Copyright (C) 1995-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4     Written by Miles Bader <miles@gnu.ai.mit.edu>.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef _ARGP_H
      21  #define _ARGP_H
      22  
      23  #include <stdio.h>
      24  #include <ctype.h>
      25  #include <getopt.h>
      26  #include <limits.h>
      27  #include <errno.h>
      28  
      29  __BEGIN_DECLS
      30  
      31  /* error_t may or may not be available from errno.h, depending on the
      32     operating system.  */
      33  #ifndef __error_t_defined
      34  # define __error_t_defined 1
      35  typedef int error_t;
      36  #endif
      37  
      38  /* A description of a particular option.  A pointer to an array of
      39     these is passed in the OPTIONS field of an argp structure.  Each option
      40     entry can correspond to one long option and/or one short option; more
      41     names for the same option can be added by following an entry in an option
      42     array with options having the OPTION_ALIAS flag set.  */
      43  struct argp_option
      44  {
      45    /* The long option name.  For more than one name for the same option, you
      46       can use following options with the OPTION_ALIAS flag set.  */
      47    const char *name;
      48  
      49    /* What key is returned for this option.  If > 0 and printable, then it's
      50       also accepted as a short option.  */
      51    int key;
      52  
      53    /* If non-NULL, this is the name of the argument associated with this
      54       option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
      55    const char *arg;
      56  
      57    /* OPTION_ flags.  */
      58    int flags;
      59  
      60    /* The doc string for this option.  If both NAME and KEY are 0, This string
      61       will be printed outdented from the normal option column, making it
      62       useful as a group header (it will be the first thing printed in its
      63       group); in this usage, it's conventional to end the string with a `:'.  */
      64    const char *doc;
      65  
      66    /* The group this option is in.  In a long help message, options are sorted
      67       alphabetically within each group, and the groups presented in the order
      68       0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
      69       if this field 0 will inherit the group number of the previous entry, or
      70       zero if it's the first one, unless its a group header (NAME and KEY both
      71       0), in which case, the previous entry + 1 is the default.  Automagic
      72       options such as --help are put into group -1.  */
      73    int group;
      74  };
      75  
      76  /* The argument associated with this option is optional.  */
      77  #define OPTION_ARG_OPTIONAL	0x1
      78  
      79  /* This option isn't displayed in any help messages.  */
      80  #define OPTION_HIDDEN	       	0x2
      81  
      82  /* This option is an alias for the closest previous non-alias option.  This
      83     means that it will be displayed in the same help entry, and will inherit
      84     fields other than NAME and KEY from the aliased option.  */
      85  #define OPTION_ALIAS		0x4
      86  
      87  /* This option isn't actually an option (and so should be ignored by the
      88     actual option parser), but rather an arbitrary piece of documentation that
      89     should be displayed in much the same manner as the options.  If this flag
      90     is set, then the option NAME field is displayed unmodified (e.g., no `--'
      91     prefix is added) at the left-margin (where a *short* option would normally
      92     be displayed), and the documentation string in the normal place.  For
      93     purposes of sorting, any leading whitespace and punctuation is ignored,
      94     except that if the first non-whitespace character is not `-', this entry
      95     is displayed after all options (and OPTION_DOC entries with a leading `-')
      96     in the same group.  */
      97  #define OPTION_DOC		0x8
      98  
      99  /* This option shouldn't be included in `long' usage messages (but is still
     100     included in help messages).  This is mainly intended for options that are
     101     completely documented in an argp's ARGS_DOC field, in which case including
     102     the option in the generic usage list would be redundant.  For instance,
     103     if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
     104     distinguish these two cases, -x should probably be marked
     105     OPTION_NO_USAGE.  */
     106  #define OPTION_NO_USAGE		0x10
     107  
     108  struct argp;			/* fwd declare this type */
     109  struct argp_state;		/* " */
     110  struct argp_child;		/* " */
     111  
     112  /* The type of a pointer to an argp parsing function.  */
     113  typedef error_t (*argp_parser_t) (int __key, char *__arg,
     114  				  struct argp_state *__state);
     115  
     116  /* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
     117     returns will simply be ignored.  For user keys, this error will be turned
     118     into EINVAL (if the call to argp_parse is such that errors are propagated
     119     back to the user instead of exiting); returning EINVAL itself would result
     120     in an immediate stop to parsing in *all* cases.  */
     121  #define ARGP_ERR_UNKNOWN	E2BIG /* Hurd should never need E2BIG.  XXX */
     122  
     123  /* Special values for the KEY argument to an argument parsing function.
     124     ARGP_ERR_UNKNOWN should be returned if they aren't understood.
     125  
     126     The sequence of keys to a parsing function is either (where each
     127     uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
     128  
     129         INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
     130     or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
     131     or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
     132  
     133     The third case is where every parser returned ARGP_KEY_UNKNOWN for an
     134     argument, in which case parsing stops at that argument (returning the
     135     unparsed arguments to the caller of argp_parse if requested, or stopping
     136     with an error message if not).
     137  
     138     If an error occurs (either detected by argp, or because the parsing
     139     function returned an error value), then the parser is called with
     140     ARGP_KEY_ERROR, and no further calls are made.  */
     141  
     142  /* This is not an option at all, but rather a command line argument.  If a
     143     parser receiving this key returns success, the fact is recorded, and the
     144     ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
     145     argument, a parser function decrements the NEXT field of the state it's
     146     passed, the option won't be considered processed; this is to allow you to
     147     actually modify the argument (perhaps into an option), and have it
     148     processed again.  */
     149  #define ARGP_KEY_ARG		0
     150  /* There are remaining arguments not parsed by any parser, which may be found
     151     starting at (STATE->argv + STATE->next).  If success is returned, but
     152     STATE->next left untouched, it's assumed that all arguments were consume,
     153     otherwise, the parser should adjust STATE->next to reflect any arguments
     154     consumed.  */
     155  #define ARGP_KEY_ARGS		0x1000006
     156  /* There are no more command line arguments at all.  */
     157  #define ARGP_KEY_END		0x1000001
     158  /* Because it's common to want to do some special processing if there aren't
     159     any non-option args, user parsers are called with this key if they didn't
     160     successfully process any non-option arguments.  Called just before
     161     ARGP_KEY_END (where more general validity checks on previously parsed
     162     arguments can take place).  */
     163  #define ARGP_KEY_NO_ARGS	0x1000002
     164  /* Passed in before any parsing is done.  Afterwards, the values of each
     165     element of the CHILD_INPUT field, if any, in the state structure is
     166     copied to each child's state to be the initial value of the INPUT field.  */
     167  #define ARGP_KEY_INIT		0x1000003
     168  /* Use after all other keys, including SUCCESS & END.  */
     169  #define ARGP_KEY_FINI		0x1000007
     170  /* Passed in when parsing has successfully been completed (even if there are
     171     still arguments remaining).  */
     172  #define ARGP_KEY_SUCCESS	0x1000004
     173  /* Passed in if an error occurs.  */
     174  #define ARGP_KEY_ERROR		0x1000005
     175  
     176  /* An argp structure contains a set of options declarations, a function to
     177     deal with parsing one, documentation string, a possible vector of child
     178     argp's, and perhaps a function to filter help output.  When actually
     179     parsing options, getopt is called with the union of all the argp
     180     structures chained together through their CHILD pointers, with conflicts
     181     being resolved in favor of the first occurrence in the chain.  */
     182  struct argp
     183  {
     184    /* An array of argp_option structures, terminated by an entry with both
     185       NAME and KEY having a value of 0.  */
     186    const struct argp_option *options;
     187  
     188    /* What to do with an option from this structure.  KEY is the key
     189       associated with the option, and ARG is any associated argument (NULL if
     190       none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
     191       returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
     192       parsing is stopped immediately, and that value is returned from
     193       argp_parse().  For special (non-user-supplied) values of KEY, see the
     194       ARGP_KEY_ definitions below.  */
     195    argp_parser_t parser;
     196  
     197    /* A string describing what other arguments are wanted by this program.  It
     198       is only used by argp_usage to print the `Usage:' message.  If it
     199       contains newlines, the strings separated by them are considered
     200       alternative usage patterns, and printed on separate lines (lines after
     201       the first are prefix by `  or: ' instead of `Usage:').  */
     202    const char *args_doc;
     203  
     204    /* If non-NULL, a string containing extra text to be printed before and
     205       after the options in a long help message (separated by a vertical tab
     206       `\v' character).  */
     207    const char *doc;
     208  
     209    /* A vector of argp_children structures, terminated by a member with a 0
     210       argp field, pointing to child argps should be parsed with this one.  Any
     211       conflicts are resolved in favor of this argp, or early argps in the
     212       CHILDREN list.  This field is useful if you use libraries that supply
     213       their own argp structure, which you want to use in conjunction with your
     214       own.  */
     215    const struct argp_child *children;
     216  
     217    /* If non-zero, this should be a function to filter the output of help
     218       messages.  KEY is either a key from an option, in which case TEXT is
     219       that option's help text, or a special key from the ARGP_KEY_HELP_
     220       defines, below, describing which other help text TEXT is.  The function
     221       should return either TEXT, if it should be used as-is, a replacement
     222       string, which should be malloced, and will be freed by argp, or NULL,
     223       meaning `print nothing'.  The value for TEXT is *after* any translation
     224       has been done, so if any of the replacement text also needs translation,
     225       that should be done by the filter function.  INPUT is either the input
     226       supplied to argp_parse, or NULL, if argp_help was called directly.  */
     227    char *(*help_filter) (int __key, const char *__text, void *__input);
     228  
     229    /* If non-zero the strings used in the argp library are translated using
     230       the domain described by this string.  Otherwise the currently installed
     231       default domain is used.  */
     232    const char *argp_domain;
     233  };
     234  
     235  /* Possible KEY arguments to a help filter function.  */
     236  #define ARGP_KEY_HELP_PRE_DOC	0x2000001 /* Help text preceding options. */
     237  #define ARGP_KEY_HELP_POST_DOC	0x2000002 /* Help text following options. */
     238  #define ARGP_KEY_HELP_HEADER	0x2000003 /* Option header string. */
     239  #define ARGP_KEY_HELP_EXTRA	0x2000004 /* After all other documentation;
     240  					     TEXT is NULL for this key.  */
     241  /* Explanatory note emitted when duplicate option arguments have been
     242     suppressed.  */
     243  #define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
     244  #define ARGP_KEY_HELP_ARGS_DOC	0x2000006 /* Argument doc string.  */
     245  
     246  /* When an argp has a non-zero CHILDREN field, it should point to a vector of
     247     argp_child structures, each of which describes a subsidiary argp.  */
     248  struct argp_child
     249  {
     250    /* The child parser.  */
     251    const struct argp *argp;
     252  
     253    /* Flags for this child.  */
     254    int flags;
     255  
     256    /* If non-zero, an optional header to be printed in help output before the
     257       child options.  As a side-effect, a non-zero value forces the child
     258       options to be grouped together; to achieve this effect without actually
     259       printing a header string, use a value of "".  */
     260    const char *header;
     261  
     262    /* Where to group the child options relative to the other (`consolidated')
     263       options in the parent argp; the values are the same as the GROUP field
     264       in argp_option structs, but all child-groupings follow parent options at
     265       a particular group level.  If both this field and HEADER are zero, then
     266       they aren't grouped at all, but rather merged with the parent options
     267       (merging the child's grouping levels with the parents).  */
     268    int group;
     269  };
     270  
     271  /* Parsing state.  This is provided to parsing functions called by argp,
     272     which may examine and, as noted, modify fields.  */
     273  struct argp_state
     274  {
     275    /* The top level ARGP being parsed.  */
     276    const struct argp *root_argp;
     277  
     278    /* The argument vector being parsed.  May be modified.  */
     279    int argc;
     280    char **argv;
     281  
     282    /* The index in ARGV of the next arg that to be parsed.  May be modified. */
     283    int next;
     284  
     285    /* The flags supplied to argp_parse.  May be modified.  */
     286    unsigned flags;
     287  
     288    /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
     289       number of the current arg, starting at zero, and incremented after each
     290       such call returns.  At all other times, this is the number of such
     291       arguments that have been processed.  */
     292    unsigned arg_num;
     293  
     294    /* If non-zero, the index in ARGV of the first argument following a special
     295       `--' argument (which prevents anything following being interpreted as an
     296       option).  Only set once argument parsing has proceeded past this point. */
     297    int quoted;
     298  
     299    /* An arbitrary pointer passed in from the user.  */
     300    void *input;
     301    /* Values to pass to child parsers.  This vector will be the same length as
     302       the number of children for the current parser.  */
     303    void **child_inputs;
     304  
     305    /* For the parser's use.  Initialized to 0.  */
     306    void *hook;
     307  
     308    /* The name used when printing messages.  This is initialized to ARGV[0],
     309       or PROGRAM_INVOCATION_NAME if that is unavailable.  */
     310    char *name;
     311  
     312    /* Streams used when argp prints something.  */
     313    FILE *err_stream;		/* For errors; initialized to stderr. */
     314    FILE *out_stream;		/* For information; initialized to stdout. */
     315  
     316    void *pstate;			/* Private, for use by argp.  */
     317  };
     318  
     319  /* Flags for argp_parse (note that the defaults are those that are
     320     convenient for program command line parsing): */
     321  
     322  /* Don't ignore the first element of ARGV.  Normally (and always unless
     323     ARGP_NO_ERRS is set) the first element of the argument vector is
     324     skipped for option parsing purposes, as it corresponds to the program name
     325     in a command line.  */
     326  #define ARGP_PARSE_ARGV0  0x01
     327  
     328  /* Don't print error messages for unknown options to stderr; unless this flag
     329     is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
     330     name in the error messages.  This flag implies ARGP_NO_EXIT (on the
     331     assumption that silent exiting upon errors is bad behaviour).  */
     332  #define ARGP_NO_ERRS	0x02
     333  
     334  /* Don't parse any non-option args.  Normally non-option args are parsed by
     335     calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
     336     as the value.  Since it's impossible to know which parse function wants to
     337     handle it, each one is called in turn, until one returns 0 or an error
     338     other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
     339     argp_parse returns prematurely (but with a return value of 0).  If all
     340     args have been parsed without error, all parsing functions are called one
     341     last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
     342     as the normal behavior is to stop parsing as soon as some argument can't
     343     be handled.  */
     344  #define ARGP_NO_ARGS	0x04
     345  
     346  /* Parse options and arguments in the same order they occur on the command
     347     line -- normally they're rearranged so that all options come first. */
     348  #define ARGP_IN_ORDER	0x08
     349  
     350  /* Don't provide the standard long option --help, which causes usage and
     351        option help information to be output to stdout, and exit (0) called. */
     352  #define ARGP_NO_HELP	0x10
     353  
     354  /* Don't exit on errors (they may still result in error messages).  */
     355  #define ARGP_NO_EXIT	0x20
     356  
     357  /* Use the gnu getopt `long-only' rules for parsing arguments.  */
     358  #define ARGP_LONG_ONLY	0x40
     359  
     360  /* Turns off any message-printing/exiting options.  */
     361  #define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
     362  
     363  /* Parse the options strings in ARGC & ARGV according to the options in ARGP.
     364     FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
     365     index in ARGV of the first unparsed option is returned in it.  If an
     366     unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
     367     routine returned a non-zero value, it is returned; otherwise 0 is
     368     returned.  This function may also call exit unless the ARGP_NO_HELP flag
     369     is set.  INPUT is a pointer to a value to be passed in to the parser.  */
     370  extern error_t argp_parse (const struct argp *__restrict __argp,
     371  			   int __argc, char **__restrict __argv,
     372  			   unsigned __flags, int *__restrict __arg_index,
     373  			   void *__restrict __input);
     374  extern error_t __argp_parse (const struct argp *__restrict __argp,
     375  			     int __argc, char **__restrict __argv,
     376  			     unsigned __flags, int *__restrict __arg_index,
     377  			     void *__restrict __input);
     378  
     379  /* Global variables.  */
     380  
     381  /* If defined or set by the user program to a non-zero value, then a default
     382     option --version is added (unless the ARGP_NO_HELP flag is used), which
     383     will print this string followed by a newline and exit (unless the
     384     ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
     385  extern const char *argp_program_version;
     386  
     387  /* If defined or set by the user program to a non-zero value, then a default
     388     option --version is added (unless the ARGP_NO_HELP flag is used), which
     389     calls this function with a stream to print the version to and a pointer to
     390     the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
     391     used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
     392  extern void (*argp_program_version_hook) (FILE *__restrict __stream,
     393  					  struct argp_state *__restrict
     394  					  __state);
     395  
     396  /* If defined or set by the user program, it should point to string that is
     397     the bug-reporting address for the program.  It will be printed by
     398     argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
     399     standard help messages), embedded in a sentence that says something like
     400     `Report bugs to ADDR.'.  */
     401  extern const char *argp_program_bug_address;
     402  
     403  /* The exit status that argp will use when exiting due to a parsing error.
     404     If not defined or set by the user program, this defaults to EX_USAGE from
     405     <sysexits.h>.  */
     406  extern error_t argp_err_exit_status;
     407  
     408  /* Flags for argp_help.  */
     409  #define ARGP_HELP_USAGE		0x01 /* a Usage: message. */
     410  #define ARGP_HELP_SHORT_USAGE	0x02 /*  " but don't actually print options. */
     411  #define ARGP_HELP_SEE		0x04 /* a `Try ... for more help' message. */
     412  #define ARGP_HELP_LONG		0x08 /* a long help message. */
     413  #define ARGP_HELP_PRE_DOC	0x10 /* doc string preceding long help.  */
     414  #define ARGP_HELP_POST_DOC	0x20 /* doc string following long help.  */
     415  #define ARGP_HELP_DOC		(ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
     416  #define ARGP_HELP_BUG_ADDR	0x40 /* bug report address */
     417  #define ARGP_HELP_LONG_ONLY	0x80 /* modify output appropriately to
     418  					reflect ARGP_LONG_ONLY mode.  */
     419  
     420  /* These ARGP_HELP flags are only understood by argp_state_help.  */
     421  #define ARGP_HELP_EXIT_ERR	0x100 /* Call exit(1) instead of returning.  */
     422  #define ARGP_HELP_EXIT_OK	0x200 /* Call exit(0) instead of returning.  */
     423  
     424  /* The standard thing to do after a program command line parsing error, if an
     425     error message has already been printed.  */
     426  #define ARGP_HELP_STD_ERR \
     427    (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
     428  /* The standard thing to do after a program command line parsing error, if no
     429     more specific error message has been printed.  */
     430  #define ARGP_HELP_STD_USAGE \
     431    (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
     432  /* The standard thing to do in response to a --help option.  */
     433  #define ARGP_HELP_STD_HELP \
     434    (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
     435     | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
     436  
     437  /* Output a usage message for ARGP to STREAM.  FLAGS are from the set
     438     ARGP_HELP_*.  */
     439  extern void argp_help (const struct argp *__restrict __argp,
     440  		       FILE *__restrict __stream,
     441  		       unsigned __flags, char *__restrict __name);
     442  extern void __argp_help (const struct argp *__restrict __argp,
     443  			 FILE *__restrict __stream, unsigned __flags,
     444  			 char *__name);
     445  
     446  /* The following routines are intended to be called from within an argp
     447     parsing routine (thus taking an argp_state structure as the first
     448     argument).  They may or may not print an error message and exit, depending
     449     on the flags in STATE -- in any case, the caller should be prepared for
     450     them *not* to exit, and should return an appropriate error after calling
     451     them.  [argp_usage & argp_error should probably be called argp_state_...,
     452     but they're used often enough that they should be short]  */
     453  
     454  /* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
     455     from the set ARGP_HELP_*.  */
     456  extern void argp_state_help (const struct argp_state *__restrict __state,
     457  			     FILE *__restrict __stream,
     458  			     unsigned int __flags);
     459  extern void __argp_state_help (const struct argp_state *__restrict __state,
     460  			       FILE *__restrict __stream,
     461  			       unsigned int __flags);
     462  
     463  /* Possibly output the standard usage message for ARGP to stderr and exit.  */
     464  extern void argp_usage (const struct argp_state *__state);
     465  extern void __argp_usage (const struct argp_state *__state);
     466  
     467  /* If appropriate, print the printf string FMT and following args, preceded
     468     by the program name and `:', to stderr, and followed by a `Try ... --help'
     469     message, then exit (1).  */
     470  extern void argp_error (const struct argp_state *__restrict __state,
     471  			const char *__restrict __fmt, ...)
     472       __attribute__ ((__format__ (__printf__, 2, 3)));
     473  extern void __argp_error (const struct argp_state *__restrict __state,
     474  			  const char *__restrict __fmt, ...)
     475       __attribute__ ((__format__ (__printf__, 2, 3)));
     476  
     477  /* Similar to the standard gnu error-reporting function error(), but will
     478     respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
     479     to STATE->err_stream.  This is useful for argument parsing code that is
     480     shared between program startup (when exiting is desired) and runtime
     481     option parsing (when typically an error code is returned instead).  The
     482     difference between this function and argp_error is that the latter is for
     483     *parsing errors*, and the former is for other problems that occur during
     484     parsing but don't reflect a (syntactic) problem with the input.  */
     485  extern void argp_failure (const struct argp_state *__restrict __state,
     486  			  int __status, int __errnum,
     487  			  const char *__restrict __fmt, ...)
     488       __attribute__ ((__format__ (__printf__, 4, 5)));
     489  extern void __argp_failure (const struct argp_state *__restrict __state,
     490  			    int __status, int __errnum,
     491  			    const char *__restrict __fmt, ...)
     492       __attribute__ ((__format__ (__printf__, 4, 5)));
     493  
     494  /* Returns true if the option OPT is a valid short option.  */
     495  extern int _option_is_short (const struct argp_option *__opt) __THROW;
     496  extern int __option_is_short (const struct argp_option *__opt) __THROW;
     497  
     498  /* Returns true if the option OPT is in fact the last (unused) entry in an
     499     options array.  */
     500  extern int _option_is_end (const struct argp_option *__opt) __THROW;
     501  extern int __option_is_end (const struct argp_option *__opt) __THROW;
     502  
     503  /* Return the input field for ARGP in the parser corresponding to STATE; used
     504     by the help routines.  */
     505  extern void *_argp_input (const struct argp *__restrict __argp,
     506  			  const struct argp_state *__restrict __state)
     507       __THROW;
     508  extern void *__argp_input (const struct argp *__restrict __argp,
     509  			   const struct argp_state *__restrict __state)
     510       __THROW;
     511  
     512  #ifdef __USE_EXTERN_INLINES
     513  
     514  # if !(defined _LIBC && _LIBC)
     515  #  define __argp_usage argp_usage
     516  #  define __argp_state_help argp_state_help
     517  #  define __option_is_short _option_is_short
     518  #  define __option_is_end _option_is_end
     519  # endif
     520  
     521  # ifndef ARGP_EI
     522  #  define ARGP_EI __extern_inline
     523  # endif
     524  
     525  ARGP_EI void
     526  __argp_usage (const struct argp_state *__state)
     527  {
     528    __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
     529  }
     530  
     531  ARGP_EI int
     532  __NTH (__option_is_short (const struct argp_option *__opt))
     533  {
     534    if (__opt->flags & OPTION_DOC)
     535      return 0;
     536    else
     537      {
     538        int __key = __opt->key;
     539        return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
     540      }
     541  }
     542  
     543  ARGP_EI int
     544  __NTH (__option_is_end (const struct argp_option *__opt))
     545  {
     546    return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
     547  }
     548  
     549  # if !(defined _LIBC && _LIBC)
     550  #  undef __argp_usage
     551  #  undef __argp_state_help
     552  #  undef __option_is_short
     553  #  undef __option_is_end
     554  # endif
     555  #endif /* Use extern inlines.  */
     556  
     557  #include <bits/floatn.h>
     558  #if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
     559  # include <bits/argp-ldbl.h>
     560  #endif
     561  
     562  __END_DECLS
     563  
     564  #endif /* argp.h */