diff options
| -rw-r--r-- | arg.h | 48 |
1 files changed, 28 insertions, 20 deletions
| @@ -3,53 +3,61 @@ | |||
| 3 | * by 20h | 3 | * by 20h |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | #ifndef __ARG_H__ | 6 | #ifndef ARG_H__ |
| 7 | #define __ARG_H__ | 7 | #define ARG_H__ |
| 8 | 8 | ||
| 9 | extern char *argv0; | 9 | extern char *argv0; |
| 10 | 10 | ||
| 11 | #define USED(x) ((void)(x)) | ||
| 12 | |||
| 13 | /* use main(int argc, char *argv[]) */ | 11 | /* use main(int argc, char *argv[]) */ |
| 14 | #define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ | 12 | #define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ |
| 15 | argv[0] && argv[0][1]\ | 13 | argv[0] && argv[0][1]\ |
| 16 | && argv[0][0] == '-';\ | 14 | && argv[0][0] == '-';\ |
| 17 | argc--, argv++) {\ | 15 | argc--, argv++) {\ |
| 18 | char _argc;\ | 16 | char argc_;\ |
| 19 | char **_argv;\ | 17 | char **argv_;\ |
| 20 | int brk;\ | 18 | int brk_;\ |
| 21 | if (argv[0][1] == '-' && argv[0][2] == '\0') {\ | 19 | if (argv[0][1] == '-' && argv[0][2] == '\0') {\ |
| 22 | argv++;\ | 20 | argv++;\ |
| 23 | argc--;\ | 21 | argc--;\ |
| 24 | break;\ | 22 | break;\ |
| 25 | }\ | 23 | }\ |
| 26 | for (brk = 0, argv[0]++, _argv = argv;\ | 24 | for (brk_ = 0, argv[0]++, argv_ = argv;\ |
| 27 | argv[0][0] && !brk;\ | 25 | argv[0][0] && !brk_;\ |
| 28 | argv[0]++) {\ | 26 | argv[0]++) {\ |
| 29 | if (_argv != argv)\ | 27 | if (argv_ != argv)\ |
| 30 | break;\ | 28 | break;\ |
| 31 | _argc = argv[0][0];\ | 29 | argc_ = argv[0][0];\ |
| 32 | switch (_argc) | 30 | switch (argc_) |
| 31 | |||
| 32 | /* Handles obsolete -NUM syntax */ | ||
| 33 | #define ARGNUM case '0':\ | ||
| 34 | case '1':\ | ||
| 35 | case '2':\ | ||
| 36 | case '3':\ | ||
| 37 | case '4':\ | ||
| 38 | case '5':\ | ||
| 39 | case '6':\ | ||
| 40 | case '7':\ | ||
| 41 | case '8':\ | ||
| 42 | case '9' | ||
| 33 | 43 | ||
| 34 | #define ARGEND }\ | 44 | #define ARGEND }\ |
| 35 | USED(_argc);\ | 45 | } |
| 36 | }\ | 46 | |
| 37 | USED(argv);\ | 47 | #define ARGC() argc_ |
| 38 | USED(argc); | ||
| 39 | 48 | ||
| 40 | #define ARGC() _argc | 49 | #define ARGNUMF(base) (brk_ = 1, estrtol(argv[0], (base))) |
| 41 | 50 | ||
| 42 | #define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ | 51 | #define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ |
| 43 | ((x), abort(), (char *)0) :\ | 52 | ((x), abort(), (char *)0) :\ |
| 44 | (brk = 1, (argv[0][1] != '\0')?\ | 53 | (brk_ = 1, (argv[0][1] != '\0')?\ |
| 45 | (&argv[0][1]) :\ | 54 | (&argv[0][1]) :\ |
| 46 | (argc--, argv++, argv[0]))) | 55 | (argc--, argv++, argv[0]))) |
| 47 | 56 | ||
| 48 | #define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ | 57 | #define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ |
| 49 | (char *)0 :\ | 58 | (char *)0 :\ |
| 50 | (brk = 1, (argv[0][1] != '\0')?\ | 59 | (brk_ = 1, (argv[0][1] != '\0')?\ |
| 51 | (&argv[0][1]) :\ | 60 | (&argv[0][1]) :\ |
| 52 | (argc--, argv++, argv[0]))) | 61 | (argc--, argv++, argv[0]))) |
| 53 | 62 | ||
| 54 | #endif | 63 | #endif |
| 55 | |||
