49 lines
2.4 KiB
C
49 lines
2.4 KiB
C
/*
|
|
* Copy me if you can.
|
|
* by 20h
|
|
*/
|
|
|
|
#ifndef ARG_H
|
|
#define ARG_H
|
|
|
|
extern char *argv0;
|
|
|
|
/* use main(int argc, char *argv[]) */
|
|
#define ARGBEGIN \
|
|
for (argv0 = *argv, argv++, argc--; \
|
|
argv[0] && argv[0][0] == '-' && argv[0][1]; argc--, argv++) { \
|
|
char argc_; \
|
|
char **argv_; \
|
|
int brk_; \
|
|
if (argv[0][1] == '-' && argv[0][2] == '\0') { \
|
|
argv++; \
|
|
argc--; \
|
|
break; \
|
|
} \
|
|
int i_; \
|
|
for (i_ = 1, brk_ = 0, argv_ = argv; argv[0][i_] && !brk_; i_++) { \
|
|
if (argv_ != argv) \
|
|
break; \
|
|
argc_ = argv[0][i_]; \
|
|
switch (argc_)
|
|
|
|
#define ARGEND \
|
|
} \
|
|
}
|
|
|
|
#define ARGC() argc_
|
|
|
|
#define EARGF(x) \
|
|
((argv[0][i_ + 1] == '\0' && argv[1] == NULL) \
|
|
? ((x), abort(), (char *)0) \
|
|
: (brk_ = 1, (argv[0][i_ + 1] != '\0') ? (&argv[0][i_ + 1]) \
|
|
: (argc--, argv++, argv[0])))
|
|
|
|
#define ARGF() \
|
|
((argv[0][i_ + 1] == '\0' && argv[1] == NULL) \
|
|
? (char *)0 \
|
|
: (brk_ = 1, (argv[0][i_ + 1] != '\0') ? (&argv[0][i_ + 1]) \
|
|
: (argc--, argv++, argv[0])))
|
|
|
|
#endif
|