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

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