Mercurial > pidgin
comparison src/getopt1.c @ 991:3dbc2cd326e2
[gaim-migrate @ 1001]
check for getopt, and --disable-multi (which doesn't actually disable it, it just makes it inaccessible from the GUI)
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 13 Oct 2000 21:05:50 +0000 |
parents | |
children | fa6395637e2c |
comparison
equal
deleted
inserted
replaced
990:d2d6be9c85fe | 991:3dbc2cd326e2 |
---|---|
1 /* getopt_long and getopt_long_only entry points for GNU getopt. | |
2 Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 | |
3 Free Software Foundation, Inc. | |
4 | |
5 This program is free software; you can redistribute it and/or modify it | |
6 under the terms of the GNU General Public License as published by the | |
7 Free Software Foundation; either version 2, or (at your option) any | |
8 later version. | |
9 | |
10 This program 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 | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
16 along with this program; if not, write to the Free Software | |
17 Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
18 | |
19 #ifdef HAVE_CONFIG_H | |
20 #include "config.h" | |
21 #endif | |
22 | |
23 #include "getopt.h" | |
24 | |
25 #if !__STDC__ && !defined(const) && IN_GCC | |
26 #define const | |
27 #endif | |
28 | |
29 #include <stdio.h> | |
30 | |
31 /* Comment out all this code if we are using the GNU C Library, and are not | |
32 actually compiling the library itself. This code is part of the GNU C | |
33 Library, but also included in many other GNU distributions. Compiling | |
34 and linking in this code is a waste when using the GNU C library | |
35 (especially if it is a shared library). Rather than having every GNU | |
36 program understand `configure --with-gnu-libc' and omit the object files, | |
37 it is simpler to just do this in the source for each such file. */ | |
38 | |
39 #if defined (_LIBC) || !defined (__GNU_LIBRARY__) | |
40 | |
41 | |
42 /* This needs to come after some library #include | |
43 to get __GNU_LIBRARY__ defined. */ | |
44 #ifdef __GNU_LIBRARY__ | |
45 #include <stdlib.h> | |
46 #else | |
47 char *getenv (); | |
48 #endif | |
49 | |
50 #ifndef NULL | |
51 #define NULL 0 | |
52 #endif | |
53 | |
54 int | |
55 getopt_long (argc, argv, options, long_options, opt_index) | |
56 int argc; | |
57 char *const *argv; | |
58 const char *options; | |
59 const struct option *long_options; | |
60 int *opt_index; | |
61 { | |
62 return _getopt_internal (argc, argv, options, long_options, opt_index, 0); | |
63 } | |
64 | |
65 /* Like getopt_long, but '-' as well as '--' can indicate a long option. | |
66 If an option that starts with '-' (not '--') doesn't match a long option, | |
67 but does match a short option, it is parsed as a short option | |
68 instead. */ | |
69 | |
70 int | |
71 getopt_long_only (argc, argv, options, long_options, opt_index) | |
72 int argc; | |
73 char *const *argv; | |
74 const char *options; | |
75 const struct option *long_options; | |
76 int *opt_index; | |
77 { | |
78 return _getopt_internal (argc, argv, options, long_options, opt_index, 1); | |
79 } | |
80 | |
81 | |
82 #endif /* _LIBC or not __GNU_LIBRARY__. */ | |
83 | |
84 #ifdef TEST | |
85 | |
86 #include <stdio.h> | |
87 | |
88 int | |
89 main (argc, argv) | |
90 int argc; | |
91 char **argv; | |
92 { | |
93 int c; | |
94 int digit_optind = 0; | |
95 | |
96 while (1) | |
97 { | |
98 int this_option_optind = optind ? optind : 1; | |
99 int option_index = 0; | |
100 static struct option long_options[] = | |
101 { | |
102 {"add", 1, 0, 0}, | |
103 {"append", 0, 0, 0}, | |
104 {"delete", 1, 0, 0}, | |
105 {"verbose", 0, 0, 0}, | |
106 {"create", 0, 0, 0}, | |
107 {"file", 1, 0, 0}, | |
108 {0, 0, 0, 0} | |
109 }; | |
110 | |
111 c = getopt_long (argc, argv, "abc:d:0123456789", | |
112 long_options, &option_index); | |
113 if (c == EOF) | |
114 break; | |
115 | |
116 switch (c) | |
117 { | |
118 case 0: | |
119 printf ("option %s", long_options[option_index].name); | |
120 if (optarg) | |
121 printf (" with arg %s", optarg); | |
122 printf ("\n"); | |
123 break; | |
124 | |
125 case '0': | |
126 case '1': | |
127 case '2': | |
128 case '3': | |
129 case '4': | |
130 case '5': | |
131 case '6': | |
132 case '7': | |
133 case '8': | |
134 case '9': | |
135 if (digit_optind != 0 && digit_optind != this_option_optind) | |
136 printf ("digits occur in two different argv-elements.\n"); | |
137 digit_optind = this_option_optind; | |
138 printf ("option %c\n", c); | |
139 break; | |
140 | |
141 case 'a': | |
142 printf ("option a\n"); | |
143 break; | |
144 | |
145 case 'b': | |
146 printf ("option b\n"); | |
147 break; | |
148 | |
149 case 'c': | |
150 printf ("option c with value `%s'\n", optarg); | |
151 break; | |
152 | |
153 case 'd': | |
154 printf ("option d with value `%s'\n", optarg); | |
155 break; | |
156 | |
157 case '?': | |
158 break; | |
159 | |
160 default: | |
161 printf ("?? getopt returned character code 0%o ??\n", c); | |
162 } | |
163 } | |
164 | |
165 if (optind < argc) | |
166 { | |
167 printf ("non-option ARGV-elements: "); | |
168 while (optind < argc) | |
169 printf ("%s ", argv[optind++]); | |
170 printf ("\n"); | |
171 } | |
172 | |
173 exit (0); | |
174 } | |
175 | |
176 #endif /* TEST */ |