fiss

Friedel's Initialization and Service Supervision
Log | Files | Refs | LICENSE

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))