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