00001 /* Declarations for getopt. 00002 Copyright (C) 1989,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc. 00003 This file is part of the GNU C Library. 00004 00005 The GNU C Library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public License as 00007 published by the Free Software Foundation; either version 2 of the 00008 License, or (at your option) any later version. 00009 00010 The GNU C Library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with the GNU C Library; see the file COPYING.LIB. If not, 00017 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 Boston, MA 02111-1307, USA. */ 00019 00020 #ifndef _GETOPT_H 00021 00022 #ifndef __need_getopt 00023 # define _GETOPT_H 1 00024 #endif 00025 00026 /* If __GNU_LIBRARY__ is not already defined, either we are being used 00027 standalone, or this is the first header included in the source file. 00028 If we are being used with glibc, we need to include <features.h>, but 00029 that does not exist if we are standalone. So: if __GNU_LIBRARY__ is 00030 not defined, include <ctype.h>, which will pull in <features.h> for us 00031 if it's from glibc. (Why ctype.h? It's guaranteed to exist and it 00032 doesn't flood the namespace with stuff the way some other headers do.) */ 00033 #if !defined __GNU_LIBRARY__ 00034 # include <ctype.h> 00035 #endif 00036 00037 #ifdef __cplusplus 00038 extern "C" { 00039 #endif 00040 00041 /* For communication from `getopt' to the caller. 00042 When `getopt' finds an option that takes an argument, 00043 the argument value is returned here. 00044 Also, when `ordering' is RETURN_IN_ORDER, 00045 each non-option ARGV-element is returned here. */ 00046 00047 extern char *optarg; 00048 00049 /* Index in ARGV of the next element to be scanned. 00050 This is used for communication to and from the caller 00051 and for communication between successive calls to `getopt'. 00052 00053 On entry to `getopt', zero means this is the first call; initialize. 00054 00055 When `getopt' returns -1, this is the index of the first of the 00056 non-option elements that the caller should itself scan. 00057 00058 Otherwise, `optind' communicates from one call to the next 00059 how much of ARGV has been scanned so far. */ 00060 00061 extern int optind; 00062 00063 /* Callers store zero here to inhibit the error message `getopt' prints 00064 for unrecognized options. */ 00065 00066 extern int opterr; 00067 00068 /* Set to an option character which was unrecognized. */ 00069 00070 extern int optopt; 00071 00072 #ifndef __need_getopt 00073 /* Describe the long-named options requested by the application. 00074 The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector 00075 of `struct option' terminated by an element containing a name which is 00076 zero. 00077 00078 The field `has_arg' is: 00079 no_argument (or 0) if the option does not take an argument, 00080 required_argument (or 1) if the option requires an argument, 00081 optional_argument (or 2) if the option takes an optional argument. 00082 00083 If the field `flag' is not NULL, it points to a variable that is set 00084 to the value given in the field `val' when the option is found, but 00085 left unchanged if the option is not found. 00086 00087 To have a long-named option do something other than set an `int' to 00088 a compiled-in constant, such as set a value from `optarg', set the 00089 option's `flag' field to zero and its `val' field to a nonzero 00090 value (the equivalent single-letter option character, if there is 00091 one). For long options that have a zero `flag' field, `getopt' 00092 returns the contents of the `val' field. */ 00093 00094 struct option 00095 { 00096 # if defined __STDC__ && __STDC__ 00097 const char *name; 00098 # else 00099 char *name; 00100 # endif 00101 /* has_arg can't be an enum because some compilers complain about 00102 type mismatches in all the code that assumes it is an int. */ 00103 int has_arg; 00104 int *flag; 00105 int val; 00106 }; 00107 00108 /* Names for the values of the `has_arg' field of `struct option'. */ 00109 00110 # define no_argument 0 00111 # define required_argument 1 00112 # define optional_argument 2 00113 #endif /* need getopt */ 00114 00115 00116 /* Get definitions and prototypes for functions to process the 00117 arguments in ARGV (ARGC of them, minus the program name) for 00118 options given in OPTS. 00119 00120 Return the option character from OPTS just read. Return -1 when 00121 there are no more options. For unrecognized options, or options 00122 missing arguments, `optopt' is set to the option letter, and '?' is 00123 returned. 00124 00125 The OPTS string is a list of characters which are recognized option 00126 letters, optionally followed by colons, specifying that that letter 00127 takes an argument, to be placed in `optarg'. 00128 00129 If a letter in OPTS is followed by two colons, its argument is 00130 optional. This behavior is specific to the GNU `getopt'. 00131 00132 The argument `--' causes premature termination of argument 00133 scanning, explicitly telling `getopt' that there are no more 00134 options. 00135 00136 If OPTS begins with `--', then non-option arguments are treated as 00137 arguments to the option '\0'. This behavior is specific to the GNU 00138 `getopt'. */ 00139 00140 #if defined __STDC__ && __STDC__ 00141 # ifdef __GNU_LIBRARY__ 00142 /* Many other libraries have conflicting prototypes for getopt, with 00143 differences in the consts, in stdlib.h. To avoid compilation 00144 errors, only prototype getopt for the GNU C library. */ 00145 extern int getopt (int __argc, char *const *__argv, const char *__shortopts); 00146 # else /* not __GNU_LIBRARY__ */ 00147 extern int getopt (); 00148 # endif /* __GNU_LIBRARY__ */ 00149 00150 # ifndef __need_getopt 00151 extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts, 00152 const struct option *__longopts, int *__longind); 00153 extern int getopt_long_only (int __argc, char *const *__argv, 00154 const char *__shortopts, 00155 const struct option *__longopts, int *__longind); 00156 00157 /* Internal only. Users should not call this directly. */ 00158 extern int _getopt_internal (int __argc, char *const *__argv, 00159 const char *__shortopts, 00160 const struct option *__longopts, int *__longind, 00161 int __long_only); 00162 # endif 00163 #else /* not __STDC__ */ 00164 extern int getopt (); 00165 # ifndef __need_getopt 00166 extern int getopt_long (); 00167 extern int getopt_long_only (); 00168 00169 extern int _getopt_internal (); 00170 # endif 00171 #endif /* __STDC__ */ 00172 00173 #ifdef __cplusplus 00174 } 00175 #endif 00176 00177 /* Make sure we later can get all the definitions and declarations. */ 00178 #undef __need_getopt 00179 00180 #endif /* getopt.h */