Back to index

tetex-bin  3.0
getopt_.h
Go to the documentation of this file.
00001 /* Declarations for getopt.
00002    Copyright (C) 1989-1994,1996-1999,2001,2003,2004
00003    Free Software Foundation, Inc.
00004    This file is part of the GNU C Library.
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2, or (at your option)
00009    any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License along
00017    with this program; if not, write to the Free Software Foundation,
00018    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
00019 
00020 #ifndef _GETOPT_H
00021 
00022 #ifndef __need_getopt
00023 # define _GETOPT_H 1
00024 #endif
00025 
00026 /* If __GNU_LIBRARY__ is not already defined, either we are being used
00027    standalone, or this is the first header included in the source file.
00028    If we are being used with glibc, we need to include <features.h>, but
00029    that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
00030    not defined, include <ctype.h>, which will pull in <features.h> for us
00031    if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
00032    doesn't flood the namespace with stuff the way some other headers do.)  */
00033 #if !defined __GNU_LIBRARY__
00034 # include <ctype.h>
00035 #endif
00036 
00037 #ifndef __THROW
00038 # ifndef __GNUC_PREREQ
00039 #  define __GNUC_PREREQ(maj, min) (0)
00040 # endif
00041 # if defined __cplusplus && __GNUC_PREREQ (2,8)
00042 #  define __THROW    throw ()
00043 # else
00044 #  define __THROW
00045 # endif
00046 #endif
00047 
00048 #ifdef __cplusplus
00049 extern "C" {
00050 #endif
00051 
00052 /* For communication from `getopt' to the caller.
00053    When `getopt' finds an option that takes an argument,
00054    the argument value is returned here.
00055    Also, when `ordering' is RETURN_IN_ORDER,
00056    each non-option ARGV-element is returned here.  */
00057 
00058 extern char *optarg;
00059 
00060 /* Index in ARGV of the next element to be scanned.
00061    This is used for communication to and from the caller
00062    and for communication between successive calls to `getopt'.
00063 
00064    On entry to `getopt', zero means this is the first call; initialize.
00065 
00066    When `getopt' returns -1, this is the index of the first of the
00067    non-option elements that the caller should itself scan.
00068 
00069    Otherwise, `optind' communicates from one call to the next
00070    how much of ARGV has been scanned so far.  */
00071 
00072 extern int optind;
00073 
00074 /* Callers store zero here to inhibit the error message `getopt' prints
00075    for unrecognized options.  */
00076 
00077 extern int opterr;
00078 
00079 /* Set to an option character which was unrecognized.  */
00080 
00081 extern int optopt;
00082 
00083 #ifndef __need_getopt
00084 /* Describe the long-named options requested by the application.
00085    The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
00086    of `struct option' terminated by an element containing a name which is
00087    zero.
00088 
00089    The field `has_arg' is:
00090    no_argument              (or 0) if the option does not take an argument,
00091    required_argument (or 1) if the option requires an argument,
00092    optional_argument        (or 2) if the option takes an optional argument.
00093 
00094    If the field `flag' is not NULL, it points to a variable that is set
00095    to the value given in the field `val' when the option is found, but
00096    left unchanged if the option is not found.
00097 
00098    To have a long-named option do something other than set an `int' to
00099    a compiled-in constant, such as set a value from `optarg', set the
00100    option's `flag' field to zero and its `val' field to a nonzero
00101    value (the equivalent single-letter option character, if there is
00102    one).  For long options that have a zero `flag' field, `getopt'
00103    returns the contents of the `val' field.  */
00104 
00105 struct option
00106 {
00107   const char *name;
00108   /* has_arg can't be an enum because some compilers complain about
00109      type mismatches in all the code that assumes it is an int.  */
00110   int has_arg;
00111   int *flag;
00112   int val;
00113 };
00114 
00115 /* Names for the values of the `has_arg' field of `struct option'.  */
00116 
00117 # define no_argument        0
00118 # define required_argument  1
00119 # define optional_argument  2
00120 #endif /* need getopt */
00121 
00122 
00123 /* Get definitions and prototypes for functions to process the
00124    arguments in ARGV (ARGC of them, minus the program name) for
00125    options given in OPTS.
00126 
00127    Return the option character from OPTS just read.  Return -1 when
00128    there are no more options.  For unrecognized options, or options
00129    missing arguments, `optopt' is set to the option letter, and '?' is
00130    returned.
00131 
00132    The OPTS string is a list of characters which are recognized option
00133    letters, optionally followed by colons, specifying that that letter
00134    takes an argument, to be placed in `optarg'.
00135 
00136    If a letter in OPTS is followed by two colons, its argument is
00137    optional.  This behavior is specific to the GNU `getopt'.
00138 
00139    The argument `--' causes premature termination of argument
00140    scanning, explicitly telling `getopt' that there are no more
00141    options.
00142 
00143    If OPTS begins with `--', then non-option arguments are treated as
00144    arguments to the option '\0'.  This behavior is specific to the GNU
00145    `getopt'.  */
00146 
00147 #ifdef __GNU_LIBRARY__
00148 /* Many other libraries have conflicting prototypes for getopt, with
00149    differences in the consts, in stdlib.h.  To avoid compilation
00150    errors, only prototype getopt for the GNU C library.  */
00151 extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
00152        __THROW;
00153 #else /* not __GNU_LIBRARY__ */
00154 extern int getopt ();
00155 #endif /* __GNU_LIBRARY__ */
00156 
00157 #ifndef __need_getopt
00158 extern int getopt_long (int ___argc, char *const *___argv,
00159                      const char *__shortopts,
00160                       const struct option *__longopts, int *__longind)
00161        __THROW;
00162 extern int getopt_long_only (int ___argc, char *const *___argv,
00163                           const char *__shortopts,
00164                            const struct option *__longopts, int *__longind)
00165        __THROW;
00166 
00167 #endif
00168 
00169 #ifdef __cplusplus
00170 }
00171 #endif
00172 
00173 /* Make sure we later can get all the definitions and declarations.  */
00174 #undef __need_getopt
00175 
00176 #endif /* getopt.h */