]>
git.ipfire.org Git - thirdparty/cups.git/blob - pdftops/parseargs.c
4 * Command line argument parser.
6 * Copyright 1996-2003 Glyph & Cog, LLC
14 #include "parseargs.h"
16 static ArgDesc
*findArg(ArgDesc
*args
, char *arg
);
17 static GBool
grabArg(ArgDesc
*arg
, int i
, int *argc
, char *argv
[]);
19 GBool
parseArgs(ArgDesc
*args
, int *argc
, char *argv
[]) {
27 if (!strcmp(argv
[i
], "--")) {
29 for (j
= i
; j
< *argc
; ++j
)
32 } else if ((arg
= findArg(args
, argv
[i
]))) {
33 if (!grabArg(arg
, i
, argc
, argv
))
42 void printUsage(char *program
, char *otherArgs
, ArgDesc
*args
) {
48 for (arg
= args
; arg
->arg
; ++arg
) {
49 if ((w1
= strlen(arg
->arg
)) > w
)
53 fprintf(stderr
, "Usage: %s [options]", program
);
55 fprintf(stderr
, " %s", otherArgs
);
56 fprintf(stderr
, "\n");
58 for (arg
= args
; arg
->arg
; ++arg
) {
59 fprintf(stderr
, " %s", arg
->arg
);
60 w1
= 9 + w
- strlen(arg
->arg
);
80 fprintf(stderr
, "%-*s", w1
, typ
);
82 fprintf(stderr
, ": %s", arg
->usage
);
83 fprintf(stderr
, "\n");
87 static ArgDesc
*findArg(ArgDesc
*args
, char *arg
) {
90 for (p
= args
; p
->arg
; ++p
) {
91 if (p
->kind
< argFlagDummy
&& !strcmp(p
->arg
, arg
))
97 static GBool
grabArg(ArgDesc
*arg
, int i
, int *argc
, char *argv
[]) {
106 *(GBool
*)arg
->val
= gTrue
;
110 if (i
+ 1 < *argc
&& isInt(argv
[i
+1])) {
111 *(int *)arg
->val
= atoi(argv
[i
+1]);
119 if (i
+ 1 < *argc
&& isFP(argv
[i
+1])) {
120 *(double *)arg
->val
= atof(argv
[i
+1]);
129 strncpy((char *)arg
->val
, argv
[i
+1], arg
->size
- 1);
130 ((char *)arg
->val
)[arg
->size
- 1] = '\0';
138 fprintf(stderr
, "Internal error in arg table\n");
144 for (j
= i
; j
< *argc
; ++j
)
150 GBool
isInt(char *s
) {
151 if (*s
== '-' || *s
== '+')
153 while (isdigit(*s
& 0xff))
160 GBool
isFP(char *s
) {
163 if (*s
== '-' || *s
== '+')
166 while (isdigit(*s
& 0xff)) {
172 while (isdigit(*s
& 0xff)) {
176 if (n
> 0 && (*s
== 'e' || *s
== 'E')) {
178 if (*s
== '-' || *s
== '+')
181 if (!isdigit(*s
& 0xff))
185 } while (isdigit(*s
& 0xff));