CVS Repository/ src/ gnu/ usr.bin/ binutils/ include/ getopt.h

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