/[public]/getopt/trunk/gnu/getopt1.c
ViewVC logotype

Annotation of /getopt/trunk/gnu/getopt1.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 259 - (hide annotations)
Mon Nov 7 22:09:10 2005 UTC (14 years, 11 months ago) by frodo
File MIME type: text/plain
File size: 4548 byte(s)
Imported sources

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

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26