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