Annotation of embedaddon/lrzsz/lib/getopt1.c, revision 1.1.1.1
1.1 misho 1: /* getopt_long and getopt_long_only entry points for GNU getopt.
2: Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
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 !defined (__STDC__) || !__STDC__
26: /* This is a separate conditional since some stdc systems
27: reject `defined (const)'. */
28: #ifndef const
29: #define const
30: #endif
31: #endif
32:
33: #include <stdio.h>
34:
35: /* Comment out all this code if we are using the GNU C Library, and are not
36: actually compiling the library itself. This code is part of the GNU C
37: Library, but also included in many other GNU distributions. Compiling
38: and linking in this code is a waste when using the GNU C library
39: (especially if it is a shared library). Rather than having every GNU
40: program understand `configure --with-gnu-libc' and omit the object files,
41: it is simpler to just do this in the source for each such file. */
42:
43: #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
44:
45:
46: /* This needs to come after some library #include
47: to get __GNU_LIBRARY__ defined. */
48: #ifdef __GNU_LIBRARY__
49: #include <stdlib.h>
50: #else
51: char *getenv ();
52: #endif
53:
54: #ifndef NULL
55: #define NULL 0
56: #endif
57:
58: int
59: getopt_long (argc, argv, options, long_options, opt_index)
60: int argc;
61: char *const *argv;
62: const char *options;
63: const struct option *long_options;
64: int *opt_index;
65: {
66: return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
67: }
68:
69: /* Like getopt_long, but '-' as well as '--' can indicate a long option.
70: If an option that starts with '-' (not '--') doesn't match a long option,
71: but does match a short option, it is parsed as a short option
72: instead. */
73:
74: int
75: getopt_long_only (argc, argv, options, long_options, opt_index)
76: int argc;
77: char *const *argv;
78: const char *options;
79: const struct option *long_options;
80: int *opt_index;
81: {
82: return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
83: }
84:
85:
86: #endif /* _LIBC or not __GNU_LIBRARY__. */
87:
88: #ifdef TEST
89:
90: #include <stdio.h>
91:
92: int
93: main (argc, argv)
94: int argc;
95: char **argv;
96: {
97: int c;
98: int digit_optind = 0;
99:
100: while (1)
101: {
102: int this_option_optind = optind ? optind : 1;
103: int option_index = 0;
104: static struct option long_options[] =
105: {
106: {"add", 1, 0, 0},
107: {"append", 0, 0, 0},
108: {"delete", 1, 0, 0},
109: {"verbose", 0, 0, 0},
110: {"create", 0, 0, 0},
111: {"file", 1, 0, 0},
112: {0, 0, 0, 0}
113: };
114:
115: c = getopt_long (argc, argv, "abc:d:0123456789",
116: long_options, &option_index);
117: if (c == EOF)
118: break;
119:
120: switch (c)
121: {
122: case 0:
123: printf ("option %s", long_options[option_index].name);
124: if (optarg)
125: printf (" with arg %s", optarg);
126: printf ("\n");
127: break;
128:
129: case '0':
130: case '1':
131: case '2':
132: case '3':
133: case '4':
134: case '5':
135: case '6':
136: case '7':
137: case '8':
138: case '9':
139: if (digit_optind != 0 && digit_optind != this_option_optind)
140: printf ("digits occur in two different argv-elements.\n");
141: digit_optind = this_option_optind;
142: printf ("option %c\n", c);
143: break;
144:
145: case 'a':
146: printf ("option a\n");
147: break;
148:
149: case 'b':
150: printf ("option b\n");
151: break;
152:
153: case 'c':
154: printf ("option c with value `%s'\n", optarg);
155: break;
156:
157: case 'd':
158: printf ("option d with value `%s'\n", optarg);
159: break;
160:
161: case '?':
162: break;
163:
164: default:
165: printf ("?? getopt returned character code 0%o ??\n", c);
166: }
167: }
168:
169: if (optind < argc)
170: {
171: printf ("non-option ARGV-elements: ");
172: while (optind < argc)
173: printf ("%s ", argv[optind++]);
174: printf ("\n");
175: }
176:
177: exit (0);
178: }
179:
180: #endif /* TEST */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>