ref: 0283ccf588a5243b2a992d3d726c2f1344c5438a
parent: 5cd0b7d8139f0cd5f4af1f9f3b82fe2cd3f37288
author: seh <henesy.dev@gmail.com>
date: Mon Mar 18 12:36:39 EDT 2019
stdlib modules have -M suffix for dir ;; frame for lists example
--- /dev/null
+++ b/Args-M/README.md
@@ -1,0 +1,62 @@
+# Command-Line Arguments
+
+Inferno has a dedicated module for processing commandline flags and arguments, [arg(2)](http://man.cat-v.org/inferno/2/arg).
+
+## Source
+
+### args.b:17,22
+
+The module `Arg` is loaded and initialized. As per the manual, the `arg->init()` function must be called before any other functions can be called from `Arg`.
+
+The usage message is also set pre-emptively for use later, if necessary.
+
+### args.b:24,37
+
+There are two flag arguments, `r` and `c` which set reversal of arguments and the list item indicator mark, respectively.
+
+The flag `r` is a binary option toggle, the flag's presence as an argument is sufficient to change the value of `rev`.
+
+The flag `c` takes an argument. The `arg->earg()` function is used to pop the flag's argument out of the list. Specifically with regards to `earg()` rather than `arg()` as per the manual, `earg()` will call `arg->usage()` if the relevant argument does not exist.
+
+Note: After the processing of all flags, `argv` is re-set from the value contained within `arg` to remove the elements (if any) utilized by flags and their arguments.
+
+### args.b:41,51
+
+This section utilizes the `rev` variable to (naively) reverse the list `argv`. After the `rev` check, the list `argv` is printed in order from beginning to end with each element being printed on a new line with the `mark` variable being prefixed to the list element currently at the head of the `argv` list each iteration during printout.
+
+## Demo
+
+ ; limbo args.b
+ ; args -h
+ usage: args [-r] [-c mark] words...
+ ; args a b c d
+ Argc after flags: 4
+ → a
+ → b
+ → c
+ → d
+ ; args -r a b c d
+ Argc after flags: 4
+ → d
+ → c
+ → b
+ → a
+ ; args -c 'quack: ' a b c d
+ Argc after flags: 4
+ quack: a
+ quack: b
+ quack: c
+ quack: d
+ ; args -r -c '-> ' d c b a
+ Argc after flags: 4
+ -> a
+ -> b
+ -> c
+ -> d
+ ;
+
+## Exercises
+
+- Can you trick `earg()` into accepting a nil value?
+- How would you pull an `int` out of `earg()`?
+- How would you trip the `usage()` message call-able from `earg()`?
--- /dev/null
+++ b/Args-M/args.b
@@ -1,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;
+}
--- a/Args/README.md
+++ /dev/null
@@ -1,62 +1,0 @@
-# Command-Line Arguments
-
-Inferno has a dedicated module for processing commandline flags and arguments, [arg(2)](http://man.cat-v.org/inferno/2/arg).
-
-## Source
-
-### args.b:17,22
-
-The module `Arg` is loaded and initialized. As per the manual, the `arg->init()` function must be called before any other functions can be called from `Arg`.
-
-The usage message is also set pre-emptively for use later, if necessary.
-
-### args.b:24,37
-
-There are two flag arguments, `r` and `c` which set reversal of arguments and the list item indicator mark, respectively.
-
-The flag `r` is a binary option toggle, the flag's presence as an argument is sufficient to change the value of `rev`.
-
-The flag `c` takes an argument. The `arg->earg()` function is used to pop the flag's argument out of the list. Specifically with regards to `earg()` rather than `arg()` as per the manual, `earg()` will call `arg->usage()` if the relevant argument does not exist.
-
-Note: After the processing of all flags, `argv` is re-set from the value contained within `arg` to remove the elements (if any) utilized by flags and their arguments.
-
-### args.b:41,51
-
-This section utilizes the `rev` variable to (naively) reverse the list `argv`. After the `rev` check, the list `argv` is printed in order from beginning to end with each element being printed on a new line with the `mark` variable being prefixed to the list element currently at the head of the `argv` list each iteration during printout.
-
-## Demo
-
- ; limbo args.b
- ; args -h
- usage: args [-r] [-c mark] words...
- ; args a b c d
- Argc after flags: 4
- → a
- → b
- → c
- → d
- ; args -r a b c d
- Argc after flags: 4
- → d
- → c
- → b
- → a
- ; args -c 'quack: ' a b c d
- Argc after flags: 4
- quack: a
- quack: b
- quack: c
- quack: d
- ; args -r -c '-> ' d c b a
- Argc after flags: 4
- -> a
- -> b
- -> c
- -> d
- ;
-
-## Exercises
-
-- Can you trick `earg()` into accepting a nil value?
-- How would you pull an `int` out of `earg()`?
-- How would you trip the `usage()` message call-able from `earg()`?
--- a/Args/args.b
+++ /dev/null
@@ -1,54 +1,0 @@
-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;
-}
--- /dev/null
+++ b/Lists/README.md
@@ -1,0 +1,17 @@
+# Lists
+
+Limbo supports lists of a type as a basic construct.
+
+## Source
+
+###
+
+
+
+## Demo
+
+
+
+## Exercises
+
+- Try reversing a list.
--- /dev/null
+++ b/Lists/lists.b
@@ -1,0 +1,21 @@
+implement Lists;
+
+include "sys.m";
+include "draw.m";
+
+include "arg.m";
+
+sys: Sys;
+print: import sys;
+
+Lists: 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;
+
+
+
+ exit;
+}
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@
Standard library modules:
-- [Command-Line Arguments](./Args)
+- [Command-Line Arguments](./Args-M)
## References