turns printfs back on
[freebsd-src/fkvm-freebsd.git] / contrib / cvs / lib / getopt1.c
bloba4f19762e380bc56107018af6c22ddcda8a5325e
1 /* getopt_long and getopt_long_only entry points for GNU getopt.
2 Copyright (C) 1987, 88, 89, 90, 91, 92, 1993
3 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
8 later version.
10 This program 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
13 GNU General Public License for more details. */
15 #ifdef HAVE_CONFIG_H
16 #if defined (emacs) || defined (CONFIG_BROKETS)
17 /* We use <config.h> instead of "config.h" so that a compilation
18 using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
19 (which it would do because it found this file in $srcdir). */
20 #include <config.h>
21 #else
22 #include "config.h"
23 #endif
24 #endif
26 #include "getopt.h"
28 #ifndef __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
36 #include <stdio.h>
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. */
46 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
49 /* This needs to come after some library #include
50 to get __GNU_LIBRARY__ defined. */
51 #ifdef __GNU_LIBRARY__
52 #include <stdlib.h>
53 #else
54 char *getenv ();
55 #endif
57 #ifndef NULL
58 #define NULL 0
59 #endif
61 int
62 getopt_long (argc, argv, options, long_options, opt_index)
63 int argc;
64 char *const *argv;
65 const char *options;
66 const struct option *long_options;
67 int *opt_index;
69 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
72 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
73 If an option that starts with '-' (not '--') doesn't match a long option,
74 but does match a short option, it is parsed as a short option
75 instead. */
77 int
78 getopt_long_only (argc, argv, options, long_options, opt_index)
79 int argc;
80 char *const *argv;
81 const char *options;
82 const struct option *long_options;
83 int *opt_index;
85 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
89 #endif /* _LIBC or not __GNU_LIBRARY__. */
91 #ifdef TEST
93 #include <stdio.h>
95 int
96 main (argc, argv)
97 int argc;
98 char **argv;
100 int c;
101 int digit_optind = 0;
103 while (1)
105 int this_option_optind = optind ? optind : 1;
106 int option_index = 0;
107 static struct option long_options[] =
109 {"add", 1, 0, 0},
110 {"append", 0, 0, 0},
111 {"delete", 1, 0, 0},
112 {"verbose", 0, 0, 0},
113 {"create", 0, 0, 0},
114 {"file", 1, 0, 0},
115 {0, 0, 0, 0}
118 c = getopt_long (argc, argv, "abc:d:0123456789",
119 long_options, &option_index);
120 if (c == EOF)
121 break;
123 switch (c)
125 case 0:
126 printf ("option %s", long_options[option_index].name);
127 if (optarg)
128 printf (" with arg %s", optarg);
129 printf ("\n");
130 break;
132 case '0':
133 case '1':
134 case '2':
135 case '3':
136 case '4':
137 case '5':
138 case '6':
139 case '7':
140 case '8':
141 case '9':
142 if (digit_optind != 0 && digit_optind != this_option_optind)
143 printf ("digits occur in two different argv-elements.\n");
144 digit_optind = this_option_optind;
145 printf ("option %c\n", c);
146 break;
148 case 'a':
149 printf ("option a\n");
150 break;
152 case 'b':
153 printf ("option b\n");
154 break;
156 case 'c':
157 printf ("option c with value `%s'\n", optarg);
158 break;
160 case 'd':
161 printf ("option d with value `%s'\n", optarg);
162 break;
164 case '?':
165 break;
167 default:
168 printf ("?? getopt returned character code 0%o ??\n", c);
172 if (optind < argc)
174 printf ("non-option ARGV-elements: ");
175 while (optind < argc)
176 printf ("%s ", argv[optind++]);
177 printf ("\n");
180 exit (0);
183 #endif /* TEST */