shithub: limbobyexample

Download patch

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