/*
 * 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];\
     argc--, argv++) {\
	if (argv[0][0] == '-') {\
		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 ARGOPERAND \
		}\
	} else if (argv[0][0] != '\0') {\
		{

#define ARGEND \
		}\
	} else {\
		break;\
	}\
}

#define ARGC() argc_

#define ARGOP() argv[0]

#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX))

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

#define LNGARG() &argv[0][0]

#endif
