ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/lsys/getopt1.c
Revision: 1.1
Committed: Thu Nov 6 14:31:24 2008 UTC (15 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

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