scc

simple C compiler
git clone git://git.2f30.org/scc
Log | Files | Refs | README | LICENSE

commit 72b2248a62c38bcc2203c12f2462cbb7491be5be
parent ec3185794afb773d64c798ebd6c3c846d56a93db
Author: Quentin Rameau <quinq@fifth.space>
Date:   Sat,  2 Jul 2016 11:10:35 +0200

[arg.h] add a macro for handling operands in any order

Diffstat:
Minc/arg.h | 100++++++++++++++++++++++++++++++++++++++-----------------------------------------
1 file changed, 48 insertions(+), 52 deletions(-)

diff --git a/inc/arg.h b/inc/arg.h @@ -9,57 +9,53 @@ extern char *argv0; /* use main(int argc, char *argv[]) */ -#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ - argv[0] && argv[0][0] == '-'\ - && argv[0][1];\ - argc--, argv++) {\ - char argc_;\ - char **argv_;\ - int brk_;\ - if (argv[0][1] == '-' && argv[0][2] == '\0') {\ - argv++;\ - argc--;\ - break;\ - }\ - for (brk_ = 0, argv[0]++, argv_ = argv;\ - argv[0][0] && !brk_;\ - argv[0]++) {\ - if (argv_ != argv)\ - break;\ - argc_ = argv[0][0];\ - switch (argc_) - -/* Handles obsolete -NUM syntax */ -#define ARGNUM case '0':\ - case '1':\ - case '2':\ - case '3':\ - case '4':\ - case '5':\ - case '6':\ - case '7':\ - case '8':\ - case '9' - -#define ARGEND }\ - } - -#define ARGC() argc_ - -#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX)) - -#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ - ((x), abort(), (char *)0) :\ - (brk_ = 1, (argv[0][1] != '\0')?\ - (&argv[0][1]) :\ - (argc--, argv++, argv[0]))) - -#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ - (char *)0 :\ - (brk_ = 1, (argv[0][1] != '\0')?\ - (&argv[0][1]) :\ - (argc--, argv++, argv[0]))) - -#define LNGARG() &argv[0][0] +#define ARGBEGIN \ +for (argv0 = *argv, argv++, argc--;\ + argv[0];\ + argc--, argv++) {\ + if (argv[0][0] == '-') {\ + char argc_;\ + char **argv_;\ + int brk_;\ + if (argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for (brk_ = 0, argv[0]++, argv_ = argv;\ + argv[0][0] && !brk_;\ + argv[0]++) {\ + if (argv_ != argv)\ + break;\ + argc_ = argv[0][0];\ + switch (argc_) + +#define ARGOPERAND \ + }\ + } else if (argv[0][0] != '\0') + +#define ARGEND } + +#define ARGC() argc_ + +#define ARGOP() argv[0] + +#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX)) + +#define EARGF(x) \ +((argv[0][1] == '\0' && argv[1] == NULL) ?\ + ((x), abort(), (char *)0) :\ + (brk_ = 1, (argv[0][1] != '\0') ?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#define ARGF() \ +((argv[0][1] == '\0' && argv[1] == NULL)?\ + (char *)0 :\ + (brk_ = 1, (argv[0][1] != '\0')?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#define LNGARG() &argv[0][0] #endif