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