shithub: limbobyexample

Download patch

ref: 5cd0b7d8139f0cd5f4af1f9f3b82fe2cd3f37288
parent: 169cceaef46664b809cc13f52f9cfaa88275d610
author: seh <henesy.dev@gmail.com>
date: Mon Mar 18 12:23:46 EDT 2019

add args.m example

--- a/Args/README.md
+++ b/Args/README.md
@@ -1,23 +1,29 @@
 # Command-Line Arguments
 
-Inferno has a dedicated module for processing commandline flags and arguments, arg(2). 
+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
@@ -48,3 +54,9 @@
 	->  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/README.md
+++ b/README.md
@@ -47,6 +47,10 @@
 - [Generics, Picks, and Interfaces (kind of)](./Generics)
 - [Exceptions](./Exceptions)
 
+Standard library modules:
+
+- [Command-Line Arguments](./Args)
+
 ## References
 
 - [The Limbo Programming Language](http://doc.cat-v.org/inferno/4th_edition/limbo_language/limbo)