00001 /* Internal 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 The GNU C Library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Lesser General Public 00008 License as published by the Free Software Foundation; either 00009 version 2.1 of the License, or (at your option) any later version. 00010 00011 The GNU C Library 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 GNU 00014 Lesser General Public License for more details. 00015 00016 You should have received a copy of the GNU Lesser General Public 00017 License along with the GNU C Library; if not, write to the Free 00018 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 00019 02111-1307 USA. */ 00020 00021 #ifndef _GETOPT_INT_H 00022 #define _GETOPT_INT_H 1 00023 00024 #ifdef __cplusplus 00025 extern "C" { 00026 #endif 00027 00028 extern int _getopt_internal (int ___argc, char *const *___argv, 00029 const char *__shortopts, 00030 const struct option *__longopts, int *__longind, 00031 int __long_only); 00032 00033 /* Reentrant versions which can handle parsing multiple argument 00034 vectors at the same time. */ 00035 00036 /* Data type for reentrant functions. */ 00037 struct _getopt_data 00038 { 00039 /* These have exactly the same meaning as the corresponding global 00040 variables, except that they are used for the reentrant 00041 versions of getopt. */ 00042 int optind; 00043 int opterr; 00044 int optopt; 00045 char *optarg; 00046 00047 /* Internal members. */ 00048 00049 /* True if the internal members have been initialized. */ 00050 int __initialized; 00051 00052 /* The next char to be scanned in the option-element 00053 in which the last option character we returned was found. 00054 This allows us to pick up the scan where we left off. 00055 00056 If this is zero, or a null string, it means resume the scan 00057 by advancing to the next ARGV-element. */ 00058 char *__nextchar; 00059 00060 /* Describe how to deal with options that follow non-option ARGV-elements. 00061 00062 If the caller did not specify anything, 00063 the default is REQUIRE_ORDER if the environment variable 00064 POSIXLY_CORRECT is defined, PERMUTE otherwise. 00065 00066 REQUIRE_ORDER means don't recognize them as options; 00067 stop option processing when the first non-option is seen. 00068 This is what Unix does. 00069 This mode of operation is selected by either setting the environment 00070 variable POSIXLY_CORRECT, or using `+' as the first character 00071 of the list of option characters. 00072 00073 PERMUTE is the default. We permute the contents of ARGV as we 00074 scan, so that eventually all the non-options are at the end. 00075 This allows options to be given in any order, even with programs 00076 that were not written to expect this. 00077 00078 RETURN_IN_ORDER is an option available to programs that were 00079 written to expect options and other ARGV-elements in any order 00080 and that care about the ordering of the two. We describe each 00081 non-option ARGV-element as if it were the argument of an option 00082 with character code 1. Using `-' as the first character of the 00083 list of option characters selects this mode of operation. 00084 00085 The special argument `--' forces an end of option-scanning regardless 00086 of the value of `ordering'. In the case of RETURN_IN_ORDER, only 00087 `--' can cause `getopt' to return -1 with `optind' != ARGC. */ 00088 00089 enum 00090 { 00091 REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER 00092 } __ordering; 00093 00094 /* If the POSIXLY_CORRECT environment variable is set. */ 00095 int __posixly_correct; 00096 00097 00098 /* Handle permutation of arguments. */ 00099 00100 /* Describe the part of ARGV that contains non-options that have 00101 been skipped. `first_nonopt' is the index in ARGV of the first 00102 of them; `last_nonopt' is the index after the last of them. */ 00103 00104 int __first_nonopt; 00105 int __last_nonopt; 00106 00107 #if defined _LIBC && defined USE_NONOPTION_FLAGS 00108 int __nonoption_flags_max_len; 00109 int __nonoption_flags_len; 00110 # endif 00111 }; 00112 00113 /* The initializer is necessary to set OPTIND and OPTERR to their 00114 default values and to clear the initialization flag. */ 00115 #define _GETOPT_DATA_INITIALIZER { 1, 1 } 00116 00117 extern int _getopt_internal_r (int ___argc, char *const *___argv, 00118 const char *__shortopts, 00119 const struct option *__longopts, int *__longind, 00120 int __long_only, struct _getopt_data *__data); 00121 00122 extern int _getopt_long_r (int ___argc, char *const *___argv, 00123 const char *__shortopts, 00124 const struct option *__longopts, int *__longind, 00125 struct _getopt_data *__data); 00126 00127 extern int _getopt_long_only_r (int ___argc, char *const *___argv, 00128 const char *__shortopts, 00129 const struct option *__longopts, 00130 int *__longind, 00131 struct _getopt_data *__data); 00132 00133 #ifdef __cplusplus 00134 } 00135 #endif 00136 #endif /* getopt_int.h */