Change to the linux kernel coding style
[wmaker-crm.git] / plugins / libwmfun / getopt1.c
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.
4
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.
9
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. */
14 \f
15 #include "getopt.h"
16
17 #ifndef __STDC__
18 /* This is a separate conditional since some stdc systems
19 reject `defined (const)'. */
20 #ifndef const
21 #define const
22 #endif
23 #endif
24
25 #include <stdio.h>
26
27 /* Comment out all this code if we are using the GNU C Library, and are not
28 actually compiling the library itself. This code is part of the GNU C
29 Library, but also included in many other GNU distributions. Compiling
30 and linking in this code is a waste when using the GNU C library
31 (especially if it is a shared library). Rather than having every GNU
32 program understand `configure --with-gnu-libc' and omit the object files,
33 it is simpler to just do this in the source for each such file. */
34
35 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
36
37 /* This needs to come after some library #include
38 to get __GNU_LIBRARY__ defined. */
39 #ifdef __GNU_LIBRARY__
40 #include <stdlib.h>
41 #else
42 char *getenv();
43 #endif
44
45 #ifndef NULL
46 #define NULL 0
47 #endif
48
49 int getopt_long(argc, argv, options, long_options, opt_index)
50 int argc;
51 char *const *argv;
52 const char *options;
53 const struct option *long_options;
54 int *opt_index;
55 {
56 return _getopt_internal(argc, argv, options, long_options, opt_index, 0);
57 }
58
59 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
60 If an option that starts with '-' (not '--') doesn't match a long option,
61 but does match a short option, it is parsed as a short option
62 instead. */
63
64 int getopt_long_only(argc, argv, options, long_options, opt_index)
65 int argc;
66 char *const *argv;
67 const char *options;
68 const struct option *long_options;
69 int *opt_index;
70 {
71 return _getopt_internal(argc, argv, options, long_options, opt_index, 1);
72 }
73
74 #endif /* _LIBC or not __GNU_LIBRARY__. */
75 \f
76 #ifdef TEST
77
78 #include <stdio.h>
79
80 int main(argc, argv)
81 int argc;
82 char **argv;
83 {
84 int c;
85 int digit_optind = 0;
86
87 while (1) {
88 int this_option_optind = optind ? optind : 1;
89 int option_index = 0;
90 static struct option long_options[] = {
91 {"add", 1, 0, 0},
92 {"append", 0, 0, 0},
93 {"delete", 1, 0, 0},
94 {"verbose", 0, 0, 0},
95 {"create", 0, 0, 0},
96 {"file", 1, 0, 0},
97 {0, 0, 0, 0}
98 };
99
100 c = getopt_long(argc, argv, "abc:d:0123456789", long_options, &option_index);
101 if (c == EOF)
102 break;
103
104 switch (c) {
105 case 0:
106 printf("option %s", long_options[option_index].name);
107 if (optarg)
108 printf(" with arg %s", optarg);
109 printf("\n");
110 break;
111
112 case '0':
113 case '1':
114 case '2':
115 case '3':
116 case '4':
117 case '5':
118 case '6':
119 case '7':
120 case '8':
121 case '9':
122 if (digit_optind != 0 && digit_optind != this_option_optind)
123 printf("digits occur in two different argv-elements.\n");
124 digit_optind = this_option_optind;
125 printf("option %c\n", c);
126 break;
127
128 case 'a':
129 printf("option a\n");
130 break;
131
132 case 'b':
133 printf("option b\n");
134 break;
135
136 case 'c':
137 printf("option c with value `%s'\n", optarg);
138 break;
139
140 case 'd':
141 printf("option d with value `%s'\n", optarg);
142 break;
143
144 case '?':
145 break;
146
147 default:
148 printf("?? getopt returned character code 0%o ??\n", c);
149 }
150 }
151
152 if (optind < argc) {
153 printf("non-option ARGV-elements: ");
154 while (optind < argc)
155 printf("%s ", argv[optind++]);
156 printf("\n");
157 }
158
159 exit(0);
160 }
161
162 #endif /* TEST */