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 */