OrionUserland
Barry Importing existing Orion Userland 19aefaa (3 years, 3 months ago)
diff --git a/ls/arg.h b/ls/arg.h
new file mode 100644
index 0000000..9022339
--- /dev/null
+++ b/ls/arg.h
@@ -0,0 +1,42 @@
+#ifndef ARG_H
+#define ARG_H
+
+extern char *progname;
+
+#define ARGBEGIN for (progname = *argv, argv++, argc--; \
+ argc && argv[0] && argv[0][0] == '-' \
+ && argv[0][1]; \
+ argc--, argv++) { \
+ char argc_, **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