diff options
author | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2013-12-18 08:29:28 +0100 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2013-12-18 08:29:28 +0100 |
commit | 33da67dac035b0d592f984bce90aec8d815b38a8 (patch) | |
tree | debc84c9dee1a03e96bc00c9c8dfd4386330caef /arg.h | |
parent | d60ee7337b5f378d8858ef3774c5552d2c8e54fa (diff) | |
download | st-patched-33da67dac035b0d592f984bce90aec8d815b38a8.tar.bz2 st-patched-33da67dac035b0d592f984bce90aec8d815b38a8.tar.xz st-patched-33da67dac035b0d592f984bce90aec8d815b38a8.zip |
Update arg.h from sbase
sbase did some interesting modifications to arg.h (basically it
was fixed an incorrect use of the _ namespace), and this commit
take this last version for st.
Diffstat (limited to 'arg.h')
-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 | |||