153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Declarations for getopt.
253f17a9db278d33517d9888dd77848f554522a38JP Abgrall   Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
453f17a9db278d33517d9888dd77848f554522a38JP AbgrallThis file is part of the GNU C Library.
553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
653f17a9db278d33517d9888dd77848f554522a38JP AbgrallThe GNU C Library is free software; you can redistribute it and/or
753f17a9db278d33517d9888dd77848f554522a38JP Abgrallmodify it under the terms of the GNU Library General Public License as
853f17a9db278d33517d9888dd77848f554522a38JP Abgrallpublished by the Free Software Foundation; either version 2 of the
953f17a9db278d33517d9888dd77848f554522a38JP AbgrallLicense, or (at your option) any later version.
1053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
1153f17a9db278d33517d9888dd77848f554522a38JP AbgrallThe GNU C Library is distributed in the hope that it will be useful,
1253f17a9db278d33517d9888dd77848f554522a38JP Abgrallbut WITHOUT ANY WARRANTY; without even the implied warranty of
1353f17a9db278d33517d9888dd77848f554522a38JP AbgrallMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1453f17a9db278d33517d9888dd77848f554522a38JP AbgrallLibrary General Public License for more details.
1553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
1653f17a9db278d33517d9888dd77848f554522a38JP AbgrallYou should have received a copy of the GNU Library General Public
1753f17a9db278d33517d9888dd77848f554522a38JP AbgrallLicense along with the GNU C Library; see the file COPYING.LIB.  If
1853f17a9db278d33517d9888dd77848f554522a38JP Abgrallnot, write to the Free Software Foundation, Inc., 675 Mass Ave,
1953f17a9db278d33517d9888dd77848f554522a38JP AbgrallCambridge, MA 02139, USA.  */
2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
2153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef _GETOPT_H
2253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define _GETOPT_H 1
2353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef	__cplusplus
2553f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern "C" {
2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* For communication from `getopt' to the caller.
2953f17a9db278d33517d9888dd77848f554522a38JP Abgrall   When `getopt' finds an option that takes an argument,
3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall   the argument value is returned here.
3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall   Also, when `ordering' is RETURN_IN_ORDER,
3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall   each non-option ARGV-element is returned here.  */
3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef WIN32
3553f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern char *optarg;
3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Index in ARGV of the next element to be scanned.
3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall   This is used for communication to and from the caller
4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall   and for communication between successive calls to `getopt'.
4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall   On entry to `getopt', zero means this is the first call; initialize.
4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall   When `getopt' returns EOF, this is the index of the first of the
4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall   non-option elements that the caller should itself scan.
4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall   Otherwise, `optind' communicates from one call to the next
4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall   how much of ARGV has been scanned so far.  */
4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef WIN32
5153f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int optind;
5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Callers store zero here to inhibit the error message `getopt' prints
5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall   for unrecognized options.  */
5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef WIN32
5853f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int opterr;
5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Set to an option character which was unrecognized.  */
6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
6353f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int optopt;
6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Describe the long-named options requested by the application.
6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall   of `struct option' terminated by an element containing a name which is
6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall   zero.
6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall   The field `has_arg' is:
7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall   no_argument		(or 0) if the option does not take an argument,
7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall   required_argument	(or 1) if the option requires an argument,
7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall   optional_argument 	(or 2) if the option takes an optional argument.
7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall   If the field `flag' is not NULL, it points to a variable that is set
7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall   to the value given in the field `val' when the option is found, but
7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall   left unchanged if the option is not found.
7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
7953f17a9db278d33517d9888dd77848f554522a38JP Abgrall   To have a long-named option do something other than set an `int' to
8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall   a compiled-in constant, such as set a value from `optarg', set the
8153f17a9db278d33517d9888dd77848f554522a38JP Abgrall   option's `flag' field to zero and its `val' field to a nonzero
8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall   value (the equivalent single-letter option character, if there is
8353f17a9db278d33517d9888dd77848f554522a38JP Abgrall   one).  For long options that have a zero `flag' field, `getopt'
8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall   returns the contents of the `val' field.  */
8553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
8653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct option
8753f17a9db278d33517d9888dd77848f554522a38JP Abgrall{
8853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if	__STDC__
8953f17a9db278d33517d9888dd77848f554522a38JP Abgrall  const char *name;
9053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else
9153f17a9db278d33517d9888dd77848f554522a38JP Abgrall  char *name;
9253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
9353f17a9db278d33517d9888dd77848f554522a38JP Abgrall  /* has_arg can't be an enum because some compilers complain about
9453f17a9db278d33517d9888dd77848f554522a38JP Abgrall     type mismatches in all the code that assumes it is an int.  */
9553f17a9db278d33517d9888dd77848f554522a38JP Abgrall  int has_arg;
9653f17a9db278d33517d9888dd77848f554522a38JP Abgrall  int *flag;
9753f17a9db278d33517d9888dd77848f554522a38JP Abgrall  int val;
9853f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
9953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
10053f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Names for the values of the `has_arg' field of `struct option'.  */
10153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
10253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	no_argument		0
10353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define required_argument	1
10453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define optional_argument	2
10553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
10653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if __STDC__
10753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if defined(__GNU_LIBRARY__)
10853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Many other libraries have conflicting prototypes for getopt, with
10953f17a9db278d33517d9888dd77848f554522a38JP Abgrall   differences in the consts, in stdlib.h.  To avoid compilation
11053f17a9db278d33517d9888dd77848f554522a38JP Abgrall   errors, only prototype getopt for the GNU C library.  */
11153f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt (int argc, char *const *argv, const char *shortopts);
11253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else /* not __GNU_LIBRARY__ */
11353f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt ();
11453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif /* not __GNU_LIBRARY__ */
11553f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt_long (int argc, char *const *argv, const char *shortopts,
11653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		        const struct option *longopts, int *longind);
11753f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt_long_only (int argc, char *const *argv,
11853f17a9db278d33517d9888dd77848f554522a38JP Abgrall			     const char *shortopts,
11953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		             const struct option *longopts, int *longind);
12053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
12153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* Internal only.  Users should not call this directly.  */
12253f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int _getopt_internal (int argc, char *const *argv,
12353f17a9db278d33517d9888dd77848f554522a38JP Abgrall			     const char *shortopts,
12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		             const struct option *longopts, int *longind,
12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall			     int long_only);
12653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else /* not __STDC__ */
12753f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt ();
12853f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt_long ();
12953f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int getopt_long_only ();
13053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
13153f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int _getopt_internal ();
13253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif /* not __STDC__ */
13353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
13453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef	__cplusplus
13553f17a9db278d33517d9888dd77848f554522a38JP Abgrall}
13653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
13753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
13853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif /* _GETOPT_H */
139