JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Adopting arg.h with more flexible cmd handling.
[st.git] / arg.h
diff --git a/arg.h b/arg.h
new file mode 100644 (file)
index 0000000..2b189fe
--- /dev/null
+++ b/arg.h
@@ -0,0 +1,55 @@
+/*
+ * Copy me if you can.
+ * by 20h
+ */
+
+#ifndef __ARG_H__
+#define __ARG_H__
+
+extern char *argv0;
+
+#define USED(x)                ((void)(x))
+
+/* use main(int argc, char *argv[]) */
+#define ARGBEGIN       for (argv0 = *argv, argv++, argc--;\
+                                       argv[0] && argv[0][1]\
+                                       && argv[0][0] == '-';\
+                                       argc--, argv++) {\
+                               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 ARGEND                 }\
+                               USED(_argc);\
+                       }\
+                       USED(argv);\
+                       USED(argc);
+
+#define ARGC()         _argc
+
+#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])))
+
+#endif
+