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