getopt.h revision 53f17a9db278d33517d9888dd77848f554522a38
1/* Declarations for getopt.
2   Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
3
4This file is part of the GNU C Library.
5
6The GNU C Library is free software; you can redistribute it and/or
7modify it under the terms of the GNU Library General Public License as
8published by the Free Software Foundation; either version 2 of the
9License, or (at your option) any later version.
10
11The GNU C Library is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14Library General Public License for more details.
15
16You should have received a copy of the GNU Library General Public
17License along with the GNU C Library; see the file COPYING.LIB.  If
18not, write to the Free Software Foundation, Inc., 675 Mass Ave,
19Cambridge, MA 02139, USA.  */
20
21#ifndef _GETOPT_H
22#define _GETOPT_H 1
23
24#ifdef	__cplusplus
25extern "C" {
26#endif
27
28/* For communication from `getopt' to the caller.
29   When `getopt' finds an option that takes an argument,
30   the argument value is returned here.
31   Also, when `ordering' is RETURN_IN_ORDER,
32   each non-option ARGV-element is returned here.  */
33
34#ifndef WIN32
35extern char *optarg;
36#endif
37
38/* Index in ARGV of the next element to be scanned.
39   This is used for communication to and from the caller
40   and for communication between successive calls to `getopt'.
41
42   On entry to `getopt', zero means this is the first call; initialize.
43
44   When `getopt' returns EOF, this is the index of the first of the
45   non-option elements that the caller should itself scan.
46
47   Otherwise, `optind' communicates from one call to the next
48   how much of ARGV has been scanned so far.  */
49
50#ifndef WIN32
51extern int optind;
52#endif
53
54/* Callers store zero here to inhibit the error message `getopt' prints
55   for unrecognized options.  */
56
57#ifndef WIN32
58extern int opterr;
59#endif
60
61/* Set to an option character which was unrecognized.  */
62
63extern int optopt;
64
65/* Describe the long-named options requested by the application.
66   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
67   of `struct option' terminated by an element containing a name which is
68   zero.
69
70   The field `has_arg' is:
71   no_argument		(or 0) if the option does not take an argument,
72   required_argument	(or 1) if the option requires an argument,
73   optional_argument 	(or 2) if the option takes an optional argument.
74
75   If the field `flag' is not NULL, it points to a variable that is set
76   to the value given in the field `val' when the option is found, but
77   left unchanged if the option is not found.
78
79   To have a long-named option do something other than set an `int' to
80   a compiled-in constant, such as set a value from `optarg', set the
81   option's `flag' field to zero and its `val' field to a nonzero
82   value (the equivalent single-letter option character, if there is
83   one).  For long options that have a zero `flag' field, `getopt'
84   returns the contents of the `val' field.  */
85
86struct option
87{
88#if	__STDC__
89  const char *name;
90#else
91  char *name;
92#endif
93  /* has_arg can't be an enum because some compilers complain about
94     type mismatches in all the code that assumes it is an int.  */
95  int has_arg;
96  int *flag;
97  int val;
98};
99
100/* Names for the values of the `has_arg' field of `struct option'.  */
101
102#define	no_argument		0
103#define required_argument	1
104#define optional_argument	2
105
106#if __STDC__
107#if defined(__GNU_LIBRARY__)
108/* Many other libraries have conflicting prototypes for getopt, with
109   differences in the consts, in stdlib.h.  To avoid compilation
110   errors, only prototype getopt for the GNU C library.  */
111extern int getopt (int argc, char *const *argv, const char *shortopts);
112#else /* not __GNU_LIBRARY__ */
113extern int getopt ();
114#endif /* not __GNU_LIBRARY__ */
115extern int getopt_long (int argc, char *const *argv, const char *shortopts,
116		        const struct option *longopts, int *longind);
117extern int getopt_long_only (int argc, char *const *argv,
118			     const char *shortopts,
119		             const struct option *longopts, int *longind);
120
121/* Internal only.  Users should not call this directly.  */
122extern int _getopt_internal (int argc, char *const *argv,
123			     const char *shortopts,
124		             const struct option *longopts, int *longind,
125			     int long_only);
126#else /* not __STDC__ */
127extern int getopt ();
128extern int getopt_long ();
129extern int getopt_long_only ();
130
131extern int _getopt_internal ();
132#endif /* not __STDC__ */
133
134#ifdef	__cplusplus
135}
136#endif
137
138#endif /* _GETOPT_H */
139