arg.h 2.2 KB

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