| 1 | extern char *argv0; |
| 2 | #define USED(x) ((void)x) |
| 3 | #define SET(x) ((x)=0) |
| 4 | |
| 5 | #define ARGBEGIN for((argv0||(argv0=*argv)),argv++,argc--;\ |
| 6 | argv[0] && argv[0][0]=='-' && argv[0][1];\ |
| 7 | argc--, argv++) {\ |
| 8 | char *_args, *_argt;\ |
| 9 | char _argc;\ |
| 10 | _args = &argv[0][1];\ |
| 11 | if(_args[0]=='-' && _args[1]==0){\ |
| 12 | argc--; argv++; break;\ |
| 13 | }\ |
| 14 | _argc = 0;\ |
| 15 | while(*_args && (_argc = *_args++))\ |
| 16 | switch(_argc) |
| 17 | #define ARGEND SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc); |
| 18 | #define ARGF() (_argt=_args, _args=(char*)"",\ |
| 19 | (*_argt? _argt: argv[1]? (argc--, *++argv): 0)) |
| 20 | #define EARGF(x) (_argt=_args, _args=(char*)"",\ |
| 21 | (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0))) |
| 22 | |
| 23 | #define ARGC() _argc |
| 24 | |