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