2 #include <inc/string.h>
5 argstart(int *argc
, char **argv
, struct Argstate
*args
)
8 args
->argv
= (const char **) argv
;
9 args
->curarg
= (*argc
> 1 && argv
? "" : 0);
14 argnext(struct Argstate
*args
)
20 // Done processing arguments if args->curarg == 0
21 if (args
->curarg
== 0)
25 // Need to process the next argument
26 // Check for end of argument list
28 || args
->argv
[1][0] != '-'
29 || args
->argv
[1][1] == '\0')
31 // Shift arguments down one
32 args
->curarg
= args
->argv
[1] + 1;
33 memmove(args
->argv
+ 1, args
->argv
+ 2, sizeof(const char *) * (*args
->argc
- 1));
35 // Check for "--": end of argument list
36 if (args
->curarg
[0] == '-' && args
->curarg
[1] == '\0')
40 arg
= (unsigned char) *args
->curarg
;
50 argvalue(struct Argstate
*args
)
52 return (char*) (args
->argvalue
? args
->argvalue
: argnextvalue(args
));
56 argnextvalue(struct Argstate
*args
)
61 args
->argvalue
= args
->curarg
;
63 } else if (*args
->argc
> 1) {
64 args
->argvalue
= args
->argv
[1];
65 memmove(args
->argv
+ 1, args
->argv
+ 2, sizeof(const char *) * (*args
->argc
- 1));
71 return (char*) args
->argvalue
;