nixos-dotfiles

nixos-dotfiles

https://git.tonybtw.com/nixos-dotfiles.git git://git.tonybtw.com/nixos-dotfiles.git
1,011 bytes raw
1
/*
2
 * Copy me if you can.
3
 * by 20h
4
 */
5
6
#ifndef ARG_H__
7
#define ARG_H__
8
9
extern char *argv0;
10
11
/* use main(int argc, char *argv[]) */
12
#define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
13
					argv[0] && argv[0][0] == '-'\
14
					&& argv[0][1];\
15
					argc--, argv++) {\
16
				char argc_;\
17
				char **argv_;\
18
				int brk_;\
19
				if (argv[0][1] == '-' && argv[0][2] == '\0') {\
20
					argv++;\
21
					argc--;\
22
					break;\
23
				}\
24
				for (brk_ = 0, argv[0]++, argv_ = argv;\
25
						argv[0][0] && !brk_;\
26
						argv[0]++) {\
27
					if (argv_ != argv)\
28
						break;\
29
					argc_ = argv[0][0];\
30
					switch (argc_)
31
32
#define ARGEND			}\
33
			}
34
35
#define ARGC()		argc_
36
37
#define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\
38
				((x), abort(), (char *)0) :\
39
				(brk_ = 1, (argv[0][1] != '\0')?\
40
					(&argv[0][1]) :\
41
					(argc--, argv++, argv[0])))
42
43
#define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\
44
				(char *)0 :\
45
				(brk_ = 1, (argv[0][1] != '\0')?\
46
					(&argv[0][1]) :\
47
					(argc--, argv++, argv[0])))
48
49
#endif