1
1
#include <stdio.h>
2
2
#include <stdlib.h>
3
- #include <stddef.h>
4
3
#include <string.h>
5
4
6
- #if defined(__STDC__ ) && defined(__STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
7
-
8
- #include <stdbool.h>
9
-
10
- #else
11
-
12
- #include "stdbool.h"
13
-
14
- #endif
15
-
16
5
#include "$header_name"
17
6
18
7
struct Command {
@@ -35,9 +24,9 @@ struct Option {
35
24
};
36
25
37
26
struct Elements {
38
- size_t n_commands ;
39
- size_t n_arguments ;
40
- size_t n_options ;
27
+ int n_commands ;
28
+ int n_arguments ;
29
+ int n_options ;
41
30
struct Command * commands ;
42
31
struct Argument * arguments ;
43
32
struct Option * options ;
@@ -49,16 +38,16 @@ struct Elements {
49
38
*/
50
39
51
40
struct Tokens {
52
- size_t argc ;
41
+ int argc ;
53
42
char * * argv ;
54
- size_t i ;
43
+ int i ;
55
44
char * current ;
56
45
};
57
46
58
47
const char usage_pattern [] =
59
48
$usage_pattern ;
60
49
61
- struct Tokens tokens_new (size_t argc , char * * argv ) {
50
+ struct Tokens tokens_new (int argc , char * * argv ) {
62
51
struct Tokens ts ;
63
52
ts .argc = argc ;
64
53
ts .argv = argv ;
@@ -82,10 +71,10 @@ struct Tokens *tokens_move(struct Tokens *ts) {
82
71
* ARGV parsing functions
83
72
*/
84
73
85
- size_t parse_doubledash (struct Tokens * ts , struct Elements * elements ) {
74
+ int parse_doubledash (struct Tokens * ts , struct Elements * elements ) {
86
75
/*
87
- size_t n_commands = elements->n_commands;
88
- size_t n_arguments = elements->n_arguments;
76
+ int n_commands = elements->n_commands;
77
+ int n_arguments = elements->n_arguments;
89
78
Command *commands = elements->commands;
90
79
Argument *arguments = elements->arguments;
91
80
@@ -95,10 +84,10 @@ size_t parse_doubledash(struct Tokens *ts, struct Elements *elements) {
95
84
return 0 ;
96
85
}
97
86
98
- size_t parse_long (struct Tokens * ts , struct Elements * elements ) {
99
- size_t i ;
100
- size_t len_prefix ;
101
- size_t n_options = elements -> n_options ;
87
+ int parse_long (struct Tokens * ts , struct Elements * elements ) {
88
+ int i ;
89
+ int len_prefix ;
90
+ int n_options = elements -> n_options ;
102
91
char * eq = strchr (ts -> current , '=' );
103
92
struct Option * option ;
104
93
struct Option * options = elements -> options ;
@@ -136,10 +125,10 @@ size_t parse_long(struct Tokens *ts, struct Elements *elements) {
136
125
return 0 ;
137
126
}
138
127
139
- size_t parse_shorts (struct Tokens * ts , struct Elements * elements ) {
128
+ int parse_shorts (struct Tokens * ts , struct Elements * elements ) {
140
129
char * raw ;
141
- size_t i ;
142
- size_t n_options = elements -> n_options ;
130
+ int i ;
131
+ int n_options = elements -> n_options ;
143
132
struct Option * option ;
144
133
struct Option * options = elements -> options ;
145
134
@@ -154,7 +143,7 @@ size_t parse_shorts(struct Tokens *ts, struct Elements *elements) {
154
143
if (i == n_options ) {
155
144
/* TODO -%s is specified ambiguously %d times */
156
145
fprintf (stderr , "-%c is not recognized\n" , raw [0 ]);
157
- return 1 ;
146
+ return EXIT_FAILURE ;
158
147
}
159
148
raw ++ ;
160
149
if (!option -> argcount ) {
@@ -163,7 +152,7 @@ size_t parse_shorts(struct Tokens *ts, struct Elements *elements) {
163
152
if (raw [0 ] == '\0' ) {
164
153
if (ts -> current == NULL ) {
165
154
fprintf (stderr , "%s requires argument\n" , option -> oshort );
166
- return 1 ;
155
+ return EXIT_FAILURE ;
167
156
}
168
157
raw = ts -> current ;
169
158
tokens_move (ts );
@@ -172,13 +161,13 @@ size_t parse_shorts(struct Tokens *ts, struct Elements *elements) {
172
161
break ;
173
162
}
174
163
}
175
- return 0 ;
164
+ return EXIT_SUCCESS ;
176
165
}
177
166
178
- size_t parse_argcmd (struct Tokens * ts , struct Elements * elements ) {
179
- size_t i ;
180
- size_t n_commands = elements -> n_commands ;
181
- /* size_t n_arguments = elements->n_arguments; */
167
+ int parse_argcmd (struct Tokens * ts , struct Elements * elements ) {
168
+ int i ;
169
+ int n_commands = elements -> n_commands ;
170
+ /* int n_arguments = elements->n_arguments; */
182
171
struct Command * command ;
183
172
struct Command * commands = elements -> commands ;
184
173
/* Argument *arguments = elements->arguments; */
@@ -188,7 +177,7 @@ size_t parse_argcmd(struct Tokens *ts, struct Elements *elements) {
188
177
if (strcmp (command -> name , ts -> current ) == 0 ) {
189
178
command -> value = true;
190
179
tokens_move (ts );
191
- return 0 ;
180
+ return EXIT_SUCCESS ;
192
181
}
193
182
}
194
183
/* not implemented yet, just skip for now
@@ -201,16 +190,16 @@ size_t parse_argcmd(struct Tokens *ts, struct Elements *elements) {
201
190
fprintf(stderr, "'\n");
202
191
*/
203
192
tokens_move (ts );
204
- return 0 ;
193
+ return EXIT_SUCCESS ;
205
194
}
206
195
207
- size_t parse_args (struct Tokens * ts , struct Elements * elements ) {
208
- size_t ret ;
196
+ int parse_args (struct Tokens * ts , struct Elements * elements ) {
197
+ int ret = EXIT_FAILURE ;
209
198
210
199
while (ts -> current != NULL ) {
211
200
if (strcmp (ts -> current , "--" ) == 0 ) {
212
201
ret = parse_doubledash (ts , elements );
213
- if (! ret ) break ;
202
+ if (ret == EXIT_FAILURE ) break ;
214
203
} else if (ts -> current [0 ] == '-' && ts -> current [1 ] == '-' ) {
215
204
ret = parse_long (ts , elements );
216
205
} else if (ts -> current [0 ] == '-' && ts -> current [1 ] != '\0' ) {
@@ -219,15 +208,15 @@ size_t parse_args(struct Tokens *ts, struct Elements *elements) {
219
208
ret = parse_argcmd (ts , elements );
220
209
if (ret ) return ret ;
221
210
}
222
- return 0 ;
211
+ return ret ;
223
212
}
224
213
225
- size_t elems_to_args (struct Elements * elements , struct DocoptArgs * args ,
214
+ int elems_to_args (struct Elements * elements , struct DocoptArgs * args ,
226
215
const bool help , const char * version ) {
227
216
struct Command * command ;
228
217
struct Argument * argument ;
229
218
struct Option * option ;
230
- size_t i , j ;
219
+ int i , j ;
231
220
232
221
/* fix gcc-related compiler warnings (unused) */
233
222
(void ) command ;
@@ -239,11 +228,11 @@ size_t elems_to_args(struct Elements *elements, struct DocoptArgs *args,
239
228
if (help && option -> value && strcmp (option -> olong , "--help" ) == 0 ) {
240
229
for (j = 0 ; j < $help_message_n ; j ++ )
241
230
puts (args -> help_message [j ]);
242
- return 1 ;
231
+ return EXIT_FAILURE ;
243
232
} else if (version && option -> value &&
244
233
strcmp (option -> olong , "--version" ) == 0 ) {
245
234
puts (version );
246
- return 1 ;
235
+ return EXIT_FAILURE ;
247
236
}$if_flag$if_option
248
237
}
249
238
/* commands */
@@ -256,15 +245,15 @@ size_t elems_to_args(struct Elements *elements, struct DocoptArgs *args,
256
245
argument = & elements -> arguments [i ];
257
246
$if_argument
258
247
}
259
- return 0 ;
248
+ return EXIT_SUCCESS ;
260
249
}
261
250
262
251
263
252
/*
264
253
* Main docopt function
265
254
*/
266
255
267
- struct DocoptArgs docopt (size_t argc , char * argv [], const bool help , const char * version ) {
256
+ struct DocoptArgs docopt (int argc , char * argv [], const bool help , const char * version ) {
268
257
struct DocoptArgs args = {$defaults
269
258
usage_pattern ,
270
259
$help_message
0 commit comments