diff options
Diffstat (limited to 'arg.h')
| -rw-r--r-- | arg.h | 55 | 
1 files changed, 55 insertions, 0 deletions
@@ -0,0 +1,55 @@ +/* + * Copy me if you can. + * by 20h + */ + +#ifndef __ARG_H__ +#define __ARG_H__ + +extern char *argv0; + +#define USED(x)		((void)(x)) + +/* use main(int argc, char *argv[]) */ +#define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\ +					argv[0] && argv[0][1]\ +					&& argv[0][0] == '-';\ +					argc--, argv++) {\ +				char _argc;\ +				char **_argv;\ +				int brk;\ +				if (argv[0][1] == '-' && argv[0][2] == '\0') {\ +					argv++;\ +					argc--;\ +					break;\ +				}\ +				for (brk = 0, argv[0]++, _argv = argv;\ +						argv[0][0] && !brk;\ +						argv[0]++) {\ +					if (_argv != argv)\ +						break;\ +					_argc = argv[0][0];\ +					switch (_argc) + +#define ARGEND			}\ +				USED(_argc);\ +			}\ +			USED(argv);\ +			USED(argc); + +#define ARGC()		_argc + +#define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\ +				((x), abort(), (char *)0) :\ +				(brk = 1, (argv[0][1] != '\0')?\ +					(&argv[0][1]) :\ +					(argc--, argv++, argv[0]))) + +#define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\ +				(char *)0 :\ +				(brk = 1, (argv[0][1] != '\0')?\ +					(&argv[0][1]) :\ +					(argc--, argv++, argv[0]))) + +#endif +  | 
