LibOFX
build/libofx-0.10.0/lib/getopt1.c
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,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 Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the 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  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with the GNU C Library; if not, write to the Free
18  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19  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 */
int main(int argc, char *argv[])
Definition: ofxdump.cpp:1146