STIR  6.2.0
getopt.h
1 /* Declarations for getopt.
2  Copyright (C) 1989-1994, 1996-1999, 2001 Free Software
3  Foundation, Inc. This file is part of the GNU C Library.
4 
5  The GNU C Library is free software; you can redistribute
6  it and/or modify it under the terms of the GNU Lesser
7  General Public License as published by the Free Software
8  Foundation; either version 2.1 of the License, or
9  (at your option) any later version.
10 
11  The GNU C Library is distributed in the hope that it will
12  be useful, but WITHOUT ANY WARRANTY; without even the
13  implied warranty of MERCHANTABILITY or FITNESS FOR A
14  PARTICULAR PURPOSE. See the GNU Lesser General Public
15  License for more details.
16 
17  You should have received a copy of the GNU Lesser General
18  Public License along with the GNU C Library; if not, write
19  to the Free Software Foundation, Inc., 59 Temple Place,
20  Suite 330, Boston, MA 02111-1307 USA. */
21 
22 #ifndef _stir_GETOPT_H
23 #define _stir_GETOPT_H
24 
25 #ifdef HAVE_SYSTEM_GETOPT
26 
27 /* use system getopt */
28 # include <getopt.h>
29 
30 #else
31 
32 /* If __GNU_LIBRARY__ is not already defined, either we are being used
33  standalone, or this is the first header included in the source file.
34  If we are being used with glibc, we need to include <features.h>, but
35  that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
36  not defined, include <ctype.h>, which will pull in <features.h> for us
37  if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
38  doesn't flood the namespace with stuff the way some other headers do.) */
39 # if !defined __GNU_LIBRARY__
40 # include <ctype.h>
41 # endif
42 
43 # ifdef __cplusplus
44 extern "C"
45 {
46 # endif
47 
48  /* For communication from `getopt' to the caller.
49  When `getopt' finds an option that takes an argument,
50  the argument value is returned here.
51  Also, when `ordering' is RETURN_IN_ORDER,
52  each non-option ARGV-element is returned here. */
53 
54  extern char* optarg;
55 
56  /* Index in ARGV of the next element to be scanned.
57  This is used for communication to and from the caller
58  and for communication between successive calls to `getopt'.
59 
60  On entry to `getopt', zero means this is the first call; initialize.
61 
62  When `getopt' returns -1, this is the index of the first of the
63  non-option elements that the caller should itself scan.
64 
65  Otherwise, `optind' communicates from one call to the next
66  how much of ARGV has been scanned so far. */
67 
68  extern int optind;
69 
70  /* Callers store zero here to inhibit the error message `getopt' prints
71  for unrecognized options. */
72 
73  extern int opterr;
74 
75  /* Set to an option character which was unrecognized. */
76 
77  extern int optopt;
78 
79 # ifndef __need_getopt
80  /* Describe the long-named options requested by the application.
81  The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
82  of `struct option' terminated by an element containing a name which is
83  zero.
84 
85  The field `has_arg' is:
86  no_argument (or 0) if the option does not take an argument,
87  required_argument (or 1) if the option requires an argument,
88  optional_argument (or 2) if the option takes an optional argument.
89 
90  If the field `flag' is not NULL, it points to a variable that is set
91  to the value given in the field `val' when the option is found, but
92  left unchanged if the option is not found.
93 
94  To have a long-named option do something other than set an `int' to
95  a compiled-in constant, such as set a value from `optarg', set the
96  option's `flag' field to zero and its `val' field to a nonzero
97  value (the equivalent single-letter option character, if there is
98  one). For long options that have a zero `flag' field, `getopt'
99  returns the contents of the `val' field. */
100 
101  struct option
102  {
103 # if (defined __STDC__ && __STDC__) || defined __cplusplus
104  const char* name;
105 # else
106  char* name;
107 # endif
108  /* has_arg can't be an enum because some compilers complain about
109  type mismatches in all the code that assumes it is an int. */
110  int has_arg;
111  int* flag;
112  int val;
113  };
114 
115  /* Names for the values of the `has_arg' field of `struct option'. */
116 
117 # define no_argument 0
118 # define required_argument 1
119 # define optional_argument 2
120 # endif /* need getopt */
121 
122  /* Get definitions and prototypes for functions to process the
123  arguments in ARGV (ARGC of them, minus the program name) for
124  options given in OPTS.
125 
126  Return the option character from OPTS just read. Return -1 when
127  there are no more options. For unrecognized options, or options
128  missing arguments, `optopt' is set to the option letter, and '?' is
129  returned.
130 
131  The OPTS string is a list of characters which are recognized option
132  letters, optionally followed by colons, specifying that that letter
133  takes an argument, to be placed in `optarg'.
134 
135  If a letter in OPTS is followed by two colons, its argument is
136  optional. This behavior is specific to the GNU `getopt'.
137 
138  The argument `--' causes premature termination of argument
139  scanning, explicitly telling `getopt' that there are no more
140  options.
141 
142  If OPTS begins with `--', then non-option arguments are treated as
143  arguments to the option '\0'. This behavior is specific to the GNU
144  `getopt'. */
145 
146 # if (defined __STDC__ && __STDC__) || defined __cplusplus
147  //# ifdef __GNU_LIBRARY__
148  /* Many other libraries have conflicting prototypes for getopt, with
149  differences in the consts, in stdlib.h. To avoid compilation
150  errors, only prototype getopt for the GNU C library. */
151  extern int getopt(int ___argc, char* const* ___argv, const char* __shortopts);
152  //# else /* not __GNU_LIBRARY__ */
153  // extern int getopt ();
154  //# endif /* __GNU_LIBRARY__ */
155 
156 # ifndef __need_getopt
157  extern int
158  getopt_long(int ___argc, char* const* ___argv, const char* __shortopts, const struct option* __longopts, int* __longind);
159  extern int
160  getopt_long_only(int ___argc, char* const* ___argv, const char* __shortopts, const struct option* __longopts, int* __longind);
161 
162  /* Internal only. Users should not call this directly. */
163  extern int _getopt_internal(int ___argc,
164  char* const* ___argv,
165  const char* __shortopts,
166  const struct option* __longopts,
167  int* __longind,
168  int __long_only);
169 # endif
170 # else /* not __STDC__ */
171 extern int getopt();
172 # ifndef __need_getopt
173 extern int getopt_long();
174 extern int getopt_long_only();
175 
176 extern int _getopt_internal();
177 # endif
178 # endif /* __STDC__ */
179 
180 # ifdef __cplusplus
181 }
182 # endif
183 
184 /* Make sure we later can get all the definitions and declarations. */
185 # undef __need_getopt
186 
187 #endif /* HAVE_SYSTEM_GETOPT */
188 
189 #endif /* getopt.h */