ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/lib/getopt1.c
Revision: 1.1
Committed: Sat Mar 1 15:53:02 2003 UTC (21 years, 3 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: poll-based-iom, VPE_0_9, VPE_1_2, VPE_1_4, VPE_1_6, rel-1_7, VPE-1_6_1, VPE_1_0
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 /* getopt_long and getopt_long_only entry points for GNU getopt.
2     Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
3    
4     NOTE: The canonical source of this file is maintained with the GNU C Library.
5     Bugs can be reported to bug-glibc@prep.ai.mit.edu.
6    
7     This program is free software; you can redistribute it and/or modify it
8     under the terms of the GNU General Public License as published by the
9     Free Software Foundation; either version 2, or (at your option) any
10     later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     */
21    
22     #ifdef HAVE_CONFIG_H
23     #include <config.h>
24     #endif
25    
26     #include "getopt.h"
27    
28     #if !defined (__STDC__) || !__STDC__
29     /* This is a separate conditional since some stdc systems
30     reject `defined (const)'. */
31     #ifndef const
32     #define const
33     #endif
34     #endif
35    
36     #include <stdio.h>
37    
38     /* Comment out all this code if we are using the GNU C Library, and are not
39     actually compiling the library itself. This code is part of the GNU C
40     Library, but also included in many other GNU distributions. Compiling
41     and linking in this code is a waste when using the GNU C library
42     (especially if it is a shared library). Rather than having every GNU
43     program understand `configure --with-gnu-libc' and omit the object files,
44     it is simpler to just do this in the source for each such file. */
45    
46     #define GETOPT_INTERFACE_VERSION 2
47     #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
48     #include <gnu-versions.h>
49     #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
50     #define ELIDE_CODE
51     #endif
52     #endif
53    
54     #ifndef ELIDE_CODE
55    
56    
57     /* This needs to come after some library #include
58     to get __GNU_LIBRARY__ defined. */
59     #ifdef __GNU_LIBRARY__
60     #include <stdlib.h>
61     #endif
62    
63     #ifndef NULL
64     #define NULL 0
65     #endif
66    
67     int
68     getopt_long (argc, argv, options, long_options, opt_index)
69     int argc;
70     char *const *argv;
71     const char *options;
72     const struct option *long_options;
73     int *opt_index;
74     {
75     return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
76     }
77    
78     /* Like getopt_long, but '-' as well as '--' can indicate a long option.
79     If an option that starts with '-' (not '--') doesn't match a long option,
80     but does match a short option, it is parsed as a short option
81     instead. */
82    
83     int
84     getopt_long_only (argc, argv, options, long_options, opt_index)
85     int argc;
86     char *const *argv;
87     const char *options;
88     const struct option *long_options;
89     int *opt_index;
90     {
91     return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
92     }
93    
94    
95     #endif /* Not ELIDE_CODE. */
96    
97     #ifdef TEST
98    
99     #include <stdio.h>
100    
101     int
102     main (argc, argv)
103     int argc;
104     char **argv;
105     {
106     int c;
107     int digit_optind = 0;
108    
109     while (1)
110     {
111     int this_option_optind = optind ? optind : 1;
112     int option_index = 0;
113     static struct option long_options[] =
114     {
115     {"add", 1, 0, 0},
116     {"append", 0, 0, 0},
117     {"delete", 1, 0, 0},
118     {"verbose", 0, 0, 0},
119     {"create", 0, 0, 0},
120     {"file", 1, 0, 0},
121     {0, 0, 0, 0}
122     };
123    
124     c = getopt_long (argc, argv, "abc:d:0123456789",
125     long_options, &option_index);
126     if (c == -1)
127     break;
128    
129     switch (c)
130     {
131     case 0:
132     printf ("option %s", long_options[option_index].name);
133     if (optarg)
134     printf (" with arg %s", optarg);
135     printf ("\n");
136     break;
137    
138     case '0':
139     case '1':
140     case '2':
141     case '3':
142     case '4':
143     case '5':
144     case '6':
145     case '7':
146     case '8':
147     case '9':
148     if (digit_optind != 0 && digit_optind != this_option_optind)
149     printf ("digits occur in two different argv-elements.\n");
150     digit_optind = this_option_optind;
151     printf ("option %c\n", c);
152     break;
153    
154     case 'a':
155     printf ("option a\n");
156     break;
157    
158     case 'b':
159     printf ("option b\n");
160     break;
161    
162     case 'c':
163     printf ("option c with value `%s'\n", optarg);
164     break;
165    
166     case 'd':
167     printf ("option d with value `%s'\n", optarg);
168     break;
169    
170     case '?':
171     break;
172    
173     default:
174     printf ("?? getopt returned character code 0%o ??\n", c);
175     }
176     }
177    
178     if (optind < argc)
179     {
180     printf ("non-option ARGV-elements: ");
181     while (optind < argc)
182     printf ("%s ", argv[optind++]);
183     printf ("\n");
184     }
185    
186     exit (0);
187     }
188    
189     #endif /* TEST */