Annotation of embedaddon/mtr/portability/getopt.h, revision 1.1
1.1 ! misho 1: /* Declarations for getopt.
! 2: Copyright (C) 1989-1994,1996-1999,2001,2003,2004
! 3: Free Software Foundation, Inc.
! 4: This file is part of the GNU C Library.
! 5:
! 6: The GNU C Library is free software; you can redistribute it and/or
! 7: modify it under the terms of the GNU Lesser General Public
! 8: License as published by the Free Software Foundation version 2.
! 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: #ifndef __THROW
! 38: # ifndef __GNUC_PREREQ
! 39: # define __GNUC_PREREQ(maj, min) (0)
! 40: # endif
! 41: # if defined __cplusplus && __GNUC_PREREQ (2,8)
! 42: # define __THROW throw ()
! 43: # else
! 44: # define __THROW
! 45: # endif
! 46: #endif
! 47:
! 48: #ifdef __cplusplus
! 49: extern "C" {
! 50: #endif
! 51:
! 52: /* For communication from `getopt' to the caller.
! 53: When `getopt' finds an option that takes an argument,
! 54: the argument value is returned here.
! 55: Also, when `ordering' is RETURN_IN_ORDER,
! 56: each non-option ARGV-element is returned here. */
! 57:
! 58: extern char *optarg;
! 59:
! 60: /* Index in ARGV of the next element to be scanned.
! 61: This is used for communication to and from the caller
! 62: and for communication between successive calls to `getopt'.
! 63:
! 64: On entry to `getopt', zero means this is the first call; initialize.
! 65:
! 66: When `getopt' returns -1, this is the index of the first of the
! 67: non-option elements that the caller should itself scan.
! 68:
! 69: Otherwise, `optind' communicates from one call to the next
! 70: how much of ARGV has been scanned so far. */
! 71:
! 72: extern int optind;
! 73:
! 74: /* Callers store zero here to inhibit the error message `getopt' prints
! 75: for unrecognized options. */
! 76:
! 77: extern int opterr;
! 78:
! 79: /* Set to an option character which was unrecognized. */
! 80:
! 81: extern int optopt;
! 82:
! 83: #ifndef __need_getopt
! 84: /* Describe the long-named options requested by the application.
! 85: The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
! 86: of `struct option' terminated by an element containing a name which is
! 87: zero.
! 88:
! 89: The field `has_arg' is:
! 90: no_argument (or 0) if the option does not take an argument,
! 91: required_argument (or 1) if the option requires an argument,
! 92: optional_argument (or 2) if the option takes an optional argument.
! 93:
! 94: If the field `flag' is not NULL, it points to a variable that is set
! 95: to the value given in the field `val' when the option is found, but
! 96: left unchanged if the option is not found.
! 97:
! 98: To have a long-named option do something other than set an `int' to
! 99: a compiled-in constant, such as set a value from `optarg', set the
! 100: option's `flag' field to zero and its `val' field to a nonzero
! 101: value (the equivalent single-letter option character, if there is
! 102: one). For long options that have a zero `flag' field, `getopt'
! 103: returns the contents of the `val' field. */
! 104:
! 105: struct option
! 106: {
! 107: const char *name;
! 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:
! 123: /* Get definitions and prototypes for functions to process the
! 124: arguments in ARGV (ARGC of them, minus the program name) for
! 125: options given in OPTS.
! 126:
! 127: Return the option character from OPTS just read. Return -1 when
! 128: there are no more options. For unrecognized options, or options
! 129: missing arguments, `optopt' is set to the option letter, and '?' is
! 130: returned.
! 131:
! 132: The OPTS string is a list of characters which are recognized option
! 133: letters, optionally followed by colons, specifying that that letter
! 134: takes an argument, to be placed in `optarg'.
! 135:
! 136: If a letter in OPTS is followed by two colons, its argument is
! 137: optional. This behavior is specific to the GNU `getopt'.
! 138:
! 139: The argument `--' causes premature termination of argument
! 140: scanning, explicitly telling `getopt' that there are no more
! 141: options.
! 142:
! 143: If OPTS begins with `--', then non-option arguments are treated as
! 144: arguments to the option '\0'. This behavior is specific to the GNU
! 145: `getopt'. */
! 146:
! 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: __THROW;
! 153: #else /* not __GNU_LIBRARY__ */
! 154: extern int getopt ();
! 155: #endif /* __GNU_LIBRARY__ */
! 156:
! 157: #ifndef __need_getopt
! 158: extern int getopt_long (int ___argc, char *const *___argv,
! 159: const char *__shortopts,
! 160: const struct option *__longopts, int *__longind)
! 161: __THROW;
! 162: extern int getopt_long_only (int ___argc, char *const *___argv,
! 163: const char *__shortopts,
! 164: const struct option *__longopts, int *__longind)
! 165: __THROW;
! 166:
! 167: #endif
! 168:
! 169: #ifdef __cplusplus
! 170: }
! 171: #endif
! 172:
! 173: /* Make sure we later can get all the definitions and declarations. */
! 174: #undef __need_getopt
! 175:
! 176: #endif /* getopt.h */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>