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