pidgin/getopt.h

00001 /* Declarations for getopt.
00002 
00003    NOTE: getopt is now part of the C library, so if you don't know what
00004    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
00005    before changing it!
00006 
00007    Pidgin is the legal property of its developers, whose names are too numerous
00008    to list here.  Please refer to the COPYRIGHT file distributed with this
00009    source distribution.
00010 
00011    This program is free software; you can redistribute it and/or modify it
00012    under the terms of the GNU General Public License as published by the
00013    Free Software Foundation; either version 2, or (at your option) any
00014    later version.
00015 
00016    This program is distributed in the hope that it will be useful,
00017    but WITHOUT ANY WARRANTY; without even the implied warranty of
00018    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019    GNU General Public License for more details.
00020 
00021    You should have received a copy of the GNU General Public License
00022    along with this program; if not, write to the Free Software
00023    Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
00024 
00025 #ifndef _GETOPT_H
00026 #define _GETOPT_H 1
00027 
00028 #ifdef  __cplusplus
00029 extern "C" {
00030 #endif
00031 
00032 /* For communication from `getopt' to the caller.
00033    When `getopt' finds an option that takes an argument,
00034    the argument value is returned here.
00035    Also, when `ordering' is RETURN_IN_ORDER,
00036    each non-option ARGV-element is returned here.  */
00037 
00038 extern char *optarg;
00039 
00040 /* Index in ARGV of the next element to be scanned.
00041    This is used for communication to and from the caller
00042    and for communication between successive calls to `getopt'.
00043 
00044    On entry to `getopt', zero means this is the first call; initialize.
00045 
00046    When `getopt' returns EOF, this is the index of the first of the
00047    non-option elements that the caller should itself scan.
00048 
00049    Otherwise, `optind' communicates from one call to the next
00050    how much of ARGV has been scanned so far.  */
00051 
00052 extern int optind;
00053 
00054 /* Callers store zero here to inhibit the error message `getopt' prints
00055    for unrecognized options.  */
00056 
00057 extern int opterr;
00058 
00059 /* Set to an option character which was unrecognized.  */
00060 
00061 extern int optopt;
00062 
00063 /* Describe the long-named options requested by the application.
00064    The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
00065    of `struct option' terminated by an element containing a name which is
00066    zero.
00067 
00068    The field `has_arg' is:
00069    no_argument      (or 0) if the option does not take an argument,
00070    required_argument    (or 1) if the option requires an argument,
00071    optional_argument    (or 2) if the option takes an optional argument.
00072 
00073    If the field `flag' is not NULL, it points to a variable that is set
00074    to the value given in the field `val' when the option is found, but
00075    left unchanged if the option is not found.
00076 
00077    To have a long-named option do something other than set an `int' to
00078    a compiled-in constant, such as set a value from `optarg', set the
00079    option's `flag' field to zero and its `val' field to a nonzero
00080    value (the equivalent single-letter option character, if there is
00081    one).  For long options that have a zero `flag' field, `getopt'
00082    returns the contents of the `val' field.  */
00083 
00084 struct option
00085 {
00086 #if __STDC__
00087   const char *name;
00088 #else
00089   char *name;
00090 #endif
00091   /* has_arg can't be an enum because some compilers complain about
00092      type mismatches in all the code that assumes it is an int.  */
00093   int has_arg;
00094   int *flag;
00095   int val;
00096 };
00097 
00098 /* Names for the values of the `has_arg' field of `struct option'.  */
00099 
00100 #define no_argument     0
00101 #define required_argument   1
00102 #define optional_argument   2
00103 
00104 #if __STDC__
00105 #if defined(__GNU_LIBRARY__)
00106 /* Many other libraries have conflicting prototypes for getopt, with
00107    differences in the consts, in stdlib.h.  To avoid compilation
00108    errors, only prototype getopt for the GNU C library.  */
00109 extern int getopt (int argc, char *const *argv, const char *shortopts);
00110 #else /* not __GNU_LIBRARY__ */
00111 extern int getopt ();
00112 #endif /* not __GNU_LIBRARY__ */
00113 extern int getopt_long (int argc, char *const *argv, const char *shortopts,
00114                 const struct option *longopts, int *longind);
00115 extern int getopt_long_only (int argc, char *const *argv,
00116                  const char *shortopts,
00117                      const struct option *longopts, int *longind);
00118 
00119 /* Internal only.  Users should not call this directly.  */
00120 extern int _getopt_internal (int argc, char *const *argv,
00121                  const char *shortopts,
00122                      const struct option *longopts, int *longind,
00123                  int long_only);
00124 #else /* not __STDC__ */
00125 extern int getopt ();
00126 extern int getopt_long ();
00127 extern int getopt_long_only ();
00128 
00129 extern int _getopt_internal ();
00130 #endif /* not __STDC__ */
00131 
00132 #ifdef  __cplusplus
00133 }
00134 #endif
00135 
00136 #endif /* _GETOPT_H */