/*
 * 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++) {\
                       int brk_, i_;\
                       char argc_, **argv_;\
                       if (argv[0][1] == '-' && argv[0][2] == '\0') {\
                           argv++;\
                           argc--;\
                           break;\
                       }\
                       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
