Adding parameter grouping. - geomyidae - A small C-based gopherd. HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit cf8dcb97a53fa14b89ade9088299ba8c1e8d7dc7 DIR parent f7fa209ff3d253fe62813d925468f7fe14ebc507 HTML Author: Christoph Lohmann <20h@r-36.net> Date: Sun, 12 Jun 2011 17:36:55 +0200 Adding parameter grouping. Diffstat: M arg.h | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) --- DIR diff --git a/arg.h b/arg.h @@ -5,13 +5,30 @@ extern char *argv0; -#define ARGBEGIN for(argv0 = *argv, argv++, argc--;\ - argv[0] && argv[0][0]=='-' && argv[0][1];\ - argc--, argv++) {\ +#define ARGBEGIN for(argv0 = *argv, argv++, argc--;\ + argv[0] && argv[0][1]\ + && argv[0][0] == '-';\ + argc--, argv++) {\ char _argc;\ - _argc = argv[0][1];\ - switch(_argc) -#define ARGEND USED(_argc);} USED(argv);USED(argc); + char **_argv;\ + if(argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for(argv[0]++, _argv = argv; argv[0][0];\ + argv[0]++) {\ + if(_argv != argv)\ + break;\ + _argc = argv[0][0];\ + switch(_argc) + +#define ARGEND }\ + USED(_argc);\ + }\ + USED(argv);\ + USED(argc); + #define EARGF(x) ((argv[1] == nil)? ((x), abort(), (char *)0) :\ (argc--, argv++, argv[0]))