mistress arg.h
 1extern char	*argv0;
 2
 3#define ARGBEGIN	for ((argv0 || (argv0 = argv[0])), argc--, argv++;\
 4			    argv[0] && argv[0][0] == '-' && argv[0][1];\
 5			    argc--, argv++) {\
 6				char *_args;\
 7				char *_argt;\
 8				char _argc;\
 9				_args = &argv[0][1];\
10				if (_args[0] == '-' && _args[1] == '\0') {\
11					argc--, argv++;\
12					break;\
13				}\
14				_argc = '\0';\
15				while (_args[0] && (_argc = *_args++))\
16					switch (_argc)
17
18#define ARGEND			(void)_args, _argt, _argc;\
19			}\
20			(void)argc, argv;
21
22#define ARGF()		(_argt = _args, _args = "",\
23			     (_argt[0] ? _argt :\
24			     argv[1] ? (argc--, *++argv) : (char *)0))
25
26#define EARGF(x)	(_argt = _args, _args = "",\
27			     (_argt[0] ? _argt :\
28			     argv[1] ? (argc--, *++argv) :\
29			     ((x), abort(), (char *)0)))
30
31#define ARGC()		_argc