Adding parameter grouping. - geomyidae - A small C-based gopherd. (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit cf8dcb97a53fa14b89ade9088299ba8c1e8d7dc7 (DIR) parent f7fa209ff3d253fe62813d925468f7fe14ebc507 (HTM) Author: Christoph Lohmann <20h@r-36.net> Date: Sun, 12 Jun 2011 17:36:55 +0200 Adding parameter grouping. Diffstat: 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]))