summaryrefslogtreecommitdiff
path: root/Args-M/args.b
diff options
context:
space:
mode:
authorseh <henesy.dev@gmail.com>2019-03-18 16:36:39 -0500
committerseh <henesy.dev@gmail.com>2019-03-18 16:36:39 -0500
commit0283ccf588a5243b2a992d3d726c2f1344c5438a (patch)
tree72c7fd3b20f147299c52aebfc8829adcf4b158cc /Args-M/args.b
parent5cd0b7d8139f0cd5f4af1f9f3b82fe2cd3f37288 (diff)
stdlib modules have -M suffix for dir ;; frame for lists example
Diffstat (limited to 'Args-M/args.b')
-rw-r--r--Args-M/args.b54
1 files changed, 54 insertions, 0 deletions
diff --git a/Args-M/args.b b/Args-M/args.b
new file mode 100644
index 0000000..392f371
--- /dev/null
+++ b/Args-M/args.b
@@ -0,0 +1,54 @@
+implement Args;
+
+include "sys.m";
+include "draw.m";
+
+include "arg.m";
+
+sys: Sys;
+print: import sys;
+
+Args: module {
+ init: fn(nil: ref Draw->Context, argv: list of string);
+};
+
+init(nil: ref Draw->Context, argv: list of string) {
+ sys = load Sys Sys->PATH;
+ arg := load Arg Arg->PATH;
+ if(arg == nil)
+ raise "bad module load";
+
+ arg->init(argv);
+ arg->setusage(arg->progname() + " [-r] [-c mark] words...");
+
+ rev := 0;
+ mark := "→ ";
+
+ while((opt := arg->opt()) != 0)
+ case opt {
+ 'r' =>
+ rev = 1;
+ 'c' =>
+ mark = arg->earg();
+ * =>
+ arg->usage();
+ }
+
+ argv = arg->argv();
+
+ print("Argc after flags: %d\n", len argv);
+
+ if(rev) {
+ argl: list of string;
+
+ for(; argv != nil; argv = tl argv)
+ argl = hd argv :: argl;
+
+ argv = argl;
+ }
+
+ for(; argv != nil; argv = tl argv)
+ sys->print("%s %s\n", mark, hd argv);
+
+ exit;
+}