arg.h (1491B)
1 #pragma once 2 3 #include <utf.h> 4 5 /* command line */ 6 extern char* argv0; 7 8 #define ARGBEGIN \ 9 for ((argv0 ? 0 : (argv0 = *argv)), argv++, argc--; \ 10 argv[0] && argv[0][0] == '-' && argv[0][1]; \ 11 argc--, argv++) { \ 12 char *_args, *_argt; \ 13 Rune _argc; \ 14 _args = &argv[0][1]; \ 15 if (_args[0] == '-' && _args[1] == 0) { \ 16 argc--; \ 17 argv++; \ 18 break; \ 19 } \ 20 _argc = 0; \ 21 while (*_args && (_args += chartorune(&_argc, _args))) \ 22 switch (_argc) 23 #define ARGEND \ 24 SET(_argt); \ 25 USED(_argt); \ 26 USED(_argc); \ 27 USED(_args); \ 28 } \ 29 USED(argv); \ 30 USED(argc); 31 32 #define ARGF() (_argt = _args, _args = "", \ 33 (*_argt ? _argt : argv[1] ? (argc--, *++argv) \ 34 : 0)) 35 #define EARGF(x) (_argt = _args, _args = "", \ 36 (*_argt ? _argt : argv[1] ? (argc--, *++argv) \ 37 : ((x), abort(), (char*) 0))) 38 39 #define ARGC() _argc 40 41 #define SHIFT(by) (argc -= (by), argv += (by))