diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-08-12 18:00:47 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-08-12 18:00:47 -0700 |
commit | e07cbe5edfef74005a56205586202e9a224f0500 (patch) | |
tree | 28f15db3a56d77e1716fcc7e82f451f097d0ee1a /html/001help.cc.html | |
parent | 32983f88e46082ebdbf3357ea488beda9497ce38 (diff) | |
download | mu-e07cbe5edfef74005a56205586202e9a224f0500.tar.gz |
3174
Diffstat (limited to 'html/001help.cc.html')
-rw-r--r-- | html/001help.cc.html | 70 |
1 files changed, 45 insertions, 25 deletions
diff --git a/html/001help.cc.html b/html/001help.cc.html index 09f1e4c9..cf4c82ec 100644 --- a/html/001help.cc.html +++ b/html/001help.cc.html @@ -40,28 +40,52 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Normal">if</span> <span class="Delimiter">(</span>argc <= <span class="Constant">1</span> || is_equal<span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">"--help"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> <span class="Comment">// this is the functionality later layers will provide</span> <span class="Comment">// currently no automated tests for commandline arg parsing</span> - cerr << <span class="Constant">"To load files and run 'main':</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To run all tests:</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu test</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To load files and then run all tests:</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To load files and run only the tests in explicitly loaded files (for apps):</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu --test-only-app test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"'--test-only-app' must come before all other args</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"'test' must come before all other args except '--test-only-app'</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To load all files with a numeric prefix in a directory:</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu directory1</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"You can test directories just like files.</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To pass ingredients to a mu program, provide them after '--':</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu file_or_dir1 file_or_dir2 ... -- ingredient1 ingredient2 ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + <span class="Normal">if</span> <span class="Delimiter">(</span>argc <= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> + cerr << <span class="Constant">"Please provide a Mu program to run.</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">"</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> + <span class="Delimiter">}</span> + cerr << <span class="Constant">"Usage:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu [options] [test] [files]</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">"or:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu [options] [test] [files] -- [ingredients for function/recipe 'main']</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">"Square brackets surround optional arguments.</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">"</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">"Examples:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To load files and run 'main':</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To run all tests:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu test</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To load files and then run all tests:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To load files and run only the tests in explicitly loaded files (for apps):</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu --test-only-app test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To load all files with a numeric prefix in a directory:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu directory1 directory2 ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" You can test directories just like files.</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu test directory1 directory2 ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To pass ingredients to a mu program, provide them after '--':</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu file_or_dir1 file_or_dir2 ... -- ingredient1 ingredient2 ...</span><span class="cSpecial">\n</span><span class="Constant">"</span> << <span class="Constant">"</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">"To browse a trace generated by a previous run:</span><span class="cSpecial">\n</span><span class="Constant">"</span> - << <span class="Constant">" mu browse-trace file</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" To browse a trace generated by a previous run:</span><span class="cSpecial">\n</span><span class="Constant">"</span> + << <span class="Constant">" mu browse-trace file</span><span class="cSpecial">\n</span><span class="Constant">"</span> <span class="Delimiter">;</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> +<span class="Comment">//: Support for option parsing.</span> +<span class="Comment">//: Options always begin with '--' and are always the first arguments. An</span> +<span class="Comment">//: option will never follow a non-option.</span> +<span class="Delimiter">:(before "End Commandline Parsing")</span> +<span class="Normal">char</span>** arg = &argv[<span class="Constant">1</span>]<span class="Delimiter">;</span> +<span class="Normal">while</span> <span class="Delimiter">(</span>argc > <span class="Constant">1</span> && starts_with<span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">"--"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> + <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> + <span class="Delimiter">;</span> <span class="Comment">// no-op branch just so any further additions can consistently always start with 'else'</span> + <span class="Comment">// End Commandline Options(*arg)</span> + <span class="Normal">else</span> + cerr << <span class="Constant">"skipping unknown option "</span> << *arg << <span class="cSpecial">'\n'</span><span class="Delimiter">;</span> + --argc<span class="Delimiter">;</span> ++argv<span class="Delimiter">;</span> ++arg<span class="Delimiter">;</span> +<span class="Delimiter">}</span> + <span class="SalientComment">//:: Helper function used by the above fragment of code (and later layers too,</span> <span class="SalientComment">//:: who knows?).</span> <span class="Comment">//: The :(code) directive appends function definitions to the end of the</span> @@ -76,6 +100,10 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Identifier">return</span> strncmp<span class="Delimiter">(</span>s<span class="Delimiter">,</span> lit<span class="Delimiter">,</span> strlen<span class="Delimiter">(</span>lit<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> +<span class="Normal">bool</span> starts_with<span class="Delimiter">(</span><span class="Normal">const</span> string& s<span class="Delimiter">,</span> <span class="Normal">const</span> string& pat<span class="Delimiter">)</span> <span class="Delimiter">{</span> + <span class="Identifier">return</span> s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> pat<span class="Delimiter">.</span>size<span class="Delimiter">())</span> == pat<span class="Delimiter">;</span> +<span class="Delimiter">}</span> + <span class="Comment">//: I'll throw some style conventions here for want of a better place for them.</span> <span class="Comment">//: As a rule I hate style guides. Do what you want, that's my motto. But since</span> <span class="Comment">//: we're dealing with C/C++, the one big thing we want to avoid is undefined</span> @@ -233,14 +261,6 @@ feenableexcept<span class="Delimiter">(</span>FE_OVERFLOW | FE_UNDERFLOW<span cl <span class="Identifier">return</span> in && !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span> <span class="Delimiter">}</span> -<span class="SalientComment">////: A hack to support faster debugging.</span> -<span class="Delimiter">:(before "End Globals")</span> -<span class="Normal">bool</span> Test_only_app = <span class="Constant">false</span><span class="Delimiter">;</span> -<span class="Delimiter">:(before "End Commandline Parsing")</span> -<span class="Normal">if</span> <span class="Delimiter">(</span>argc > <span class="Constant">1</span> && is_equal<span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">"--test-only-app"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> - Test_only_app = <span class="Constant">true</span><span class="Delimiter">;</span> --argc<span class="Delimiter">;</span> ++argv<span class="Delimiter">;</span> -<span class="Delimiter">}</span> - <span class="Delimiter">:(before "End Includes")</span> <span class="PreProc">#include </span><span class="Constant"><assert.h></span> |