/[public]/psiconv/trunk/compat/getopt1.c
ViewVC logotype

Annotation of /psiconv/trunk/compat/getopt1.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 30 - (hide annotations)
Tue Nov 30 00:20:57 1999 UTC (24 years, 4 months ago) by frodo
File MIME type: text/plain
File size: 4550 byte(s)
(Frodo) Added several files that were forgotten in the compat section...

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

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