getopt1.c
Go to the documentation of this file.
1 #pragma ident "$Id$"
2 /* getopt_long and getopt_long_only entry points for GNU getopt.
3  Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
4  Free Software Foundation, Inc.
5  This file is part of the GNU C Library.
6 
7  The GNU C Library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Lesser General Public
9  License as published by the Free Software Foundation; either
10  version 2.1 of the License, or (at your option) any later version.
11 
12  The GNU C Library 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 GNU
15  Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public
18  License along with the GNU C Library; if not, write to the Free
19  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20  02111-1307 USA. */
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 */
getopt.h
_getopt_internal
int _getopt_internal(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only)
Definition: getopt.c:511
getopt_long
int getopt_long(int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
Definition: getopt1.c:68
main
int main(int argc, char *argv[])
Definition: BasicFrameworkHelp_T.cpp:144
option
Definition: getopt.h:94
optind
int optind
Definition: getopt.c:133
option::name
char * name
Definition: getopt.h:99
getopt_long_only
int getopt_long_only(int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
Definition: getopt1.c:84
optarg
char * optarg
Definition: getopt.c:118


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39