|
|
1.1 root 1: /* Getopt for GNU.
2: Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
3:
1.1.1.2 ! root 4: This program is free software; you can redistribute it and/or modify it
! 5: under the terms of the GNU Library General Public License as published
! 6: by the Free Software Foundation; either version 2, or (at your option)
1.1 root 7: any later version.
8:
9: This program is distributed in the hope that it will be useful,
10: but WITHOUT ANY WARRANTY; without even the implied warranty of
11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: GNU General Public License for more details.
13:
1.1.1.2 ! root 14: You should have received a copy of the GNU Library General Public
! 15: License along with this program; if not, write to the Free Software
1.1 root 16: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
17:
18: #ifdef LIBC
19: /* For when compiled as part of the GNU C library. */
20: #include <ansidecl.h>
21: #endif
22:
23: #include "getopt.h"
24:
25: #ifndef __STDC__
26: #define const
27: #endif
28:
29: #if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) || defined (LIBC)
30: #include <stdlib.h>
31: #else /* STDC_HEADERS or __GNU_LIBRARY__ */
32: char *getenv ();
33: #endif /* STDC_HEADERS or __GNU_LIBRARY__ */
34:
35: #if !defined (NULL)
36: #define NULL 0
37: #endif
38:
39: int
40: getopt_long (argc, argv, options, long_options, opt_index)
41: int argc;
42: char *const *argv;
43: const char *options;
44: const struct option *long_options;
45: int *opt_index;
46: {
47: return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
48: }
49:
50: /* Like getopt_long, but '-' as well as '--' can indicate a long option.
51: If an option that starts with '-' (not '--') doesn't match a long option,
52: but does match a short option, it is parsed as a short option
53: instead. */
54:
55: int
56: getopt_long_only (argc, argv, options, long_options, opt_index)
57: int argc;
58: char *const *argv;
59: const char *options;
60: const struct option *long_options;
61: int *opt_index;
62: {
63: return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
64: }
65:
66: #ifdef TEST
67:
68: #include <stdio.h>
69:
70: int
71: main (argc, argv)
72: int argc;
73: char **argv;
74: {
75: int c;
76: int digit_optind = 0;
77:
78: while (1)
79: {
80: int this_option_optind = optind ? optind : 1;
81: int option_index = 0;
82: static struct option long_options[] =
83: {
84: {"add", 1, 0, 0},
85: {"append", 0, 0, 0},
86: {"delete", 1, 0, 0},
87: {"verbose", 0, 0, 0},
88: {"create", 0, 0, 0},
89: {"file", 1, 0, 0},
90: {0, 0, 0, 0}
91: };
92:
93: c = getopt_long (argc, argv, "abc:d:0123456789",
94: long_options, &option_index);
95: if (c == EOF)
96: break;
97:
98: switch (c)
99: {
100: case 0:
101: printf ("option %s", long_options[option_index].name);
102: if (optarg)
103: printf (" with arg %s", optarg);
104: printf ("\n");
105: break;
106:
107: case '0':
108: case '1':
109: case '2':
110: case '3':
111: case '4':
112: case '5':
113: case '6':
114: case '7':
115: case '8':
116: case '9':
117: if (digit_optind != 0 && digit_optind != this_option_optind)
118: printf ("digits occur in two different argv-elements.\n");
119: digit_optind = this_option_optind;
120: printf ("option %c\n", c);
121: break;
122:
123: case 'a':
124: printf ("option a\n");
125: break;
126:
127: case 'b':
128: printf ("option b\n");
129: break;
130:
131: case 'c':
132: printf ("option c with value `%s'\n", optarg);
133: break;
134:
135: case 'd':
136: printf ("option d with value `%s'\n", optarg);
137: break;
138:
139: case '?':
140: break;
141:
142: default:
143: printf ("?? getopt returned character code 0%o ??\n", c);
144: }
145: }
146:
147: if (optind < argc)
148: {
149: printf ("non-option ARGV-elements: ");
150: while (optind < argc)
151: printf ("%s ", argv[optind++]);
152: printf ("\n");
153: }
154:
155: exit (0);
156: }
157:
158: #endif /* TEST */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.