inweb-bootstrap/docs/inweb/1-cnf.html
2020-04-21 17:55:17 +01:00

490 lines
112 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Configuration</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Octagram.png" width=72 height=72">
</a></h1>
<ul><li><a href="index.html"><span class="selectedlink">inweb</span></a></li>
</ul><h2>Foundation Module</h2><ul>
<li><a href="../foundation-module/index.html">foundation</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul><h2>Example Webs</h2><ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
<li><a href="../eastertide/index.html">eastertide</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inweb"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inform/docs/index.html">inform</a></li>
<li><a href="../../../intest/docs/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Configuration' generated by Inweb-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#1">Chapter 1: Top Level</a></li><li><b>Configuration</b></li></ul><p class="purpose">To parse the command line arguments with which inweb was called, and to handle any errors it needs to issue.</p>
<ul class="toc"><li><a href="1-cnf.html#SP1">&#167;1. Instructions</a></li><li><a href="1-cnf.html#SP2">&#167;2. Reading the command line</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Instructions. </b>The following structure exists just to hold what the user specified on the
command line: there will only ever be one of these.
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inweb_mode</span><span class="plain-syntax">; </span><span class="comment"> our main mode of operation: one of the </span><code class="display"><span class="extract-syntax">*_MODE</span></code><span class="comment"> constants</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chosen_web</span><span class="plain-syntax">; </span><span class="comment"> project folder relative to cwd</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chosen_file</span><span class="plain-syntax">; </span><span class="comment"> or, single file relative to cwd</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chosen_range</span><span class="plain-syntax">; </span><span class="comment"> which subset of this web we apply to (often, all of it)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">chosen_range_actually_chosen</span><span class="plain-syntax">; </span><span class="comment"> rather than being a default choice</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">swarm_mode</span><span class="plain-syntax">; </span><span class="comment"> relevant to weaving only: one of the </span><code class="display"><span class="extract-syntax">*_SWARM</span></code><span class="comment"> constants</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tag_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-weave-tag X</span></code><span class="comment">: weave, but only the material tagged X</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="reserved-syntax">weave_pattern</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-weave-as X</span></code><span class="comment">: for example, </span><code class="display"><span class="extract-syntax">-weave-to HTML</span></code>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_languages_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-show-languages</span></code><span class="comment">: print list of available PLs</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">catalogue_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-catalogue</span></code><span class="comment">: print catalogue of sections</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">functions_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-functions</span></code><span class="comment">: print catalogue of functions within sections</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">structures_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-structures</span></code><span class="comment">: print catalogue of structures within sections</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">advance_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-advance-build</span></code><span class="comment">: advance build file for web</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">open_pdf_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-open-pdf</span></code><span class="comment">: open any woven PDF in the OS once it is made</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">scan_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-scan</span></code><span class="comment">: simply show the syntactic scan of the source</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">weave_to_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-weave-to X</span></code><span class="comment">: the pathname X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">weave_into_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-weave-into X</span></code><span class="comment">: the pathname X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequential</span><span class="plain-syntax">; </span><span class="comment"> give the sections sequential sigils</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tangle_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-tangle-to X</span></code><span class="comment">: the pathname X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">makefile_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-makefile X</span></code><span class="comment">: the filename X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gitignore_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-gitignore X</span></code><span class="comment">: the filename X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">advance_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-advance-build-file X</span></code><span class="comment">: advance build file X</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">writeme_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-write-me X</span></code><span class="comment">: advance build file X</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-prototype X</span></code><span class="comment">: the pathname X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">navigation_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-navigation X</span></code><span class="comment">: the filename X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">colony_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-colony X</span></code><span class="comment">: the filename X, if supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">member_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-member X</span></code><span class="comment">: sets web to member X of colony</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">breadcrumb_setting</span><span class="plain-syntax">; </span><span class="comment"> of </span><code class="display"><span class="extract-syntax">breadcrumb_request</span></code>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verbose_switch</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-verbose</span></code><span class="comment">: print names of files read to stdout</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">targets</span><span class="plain-syntax">; </span><span class="comment"> used only for parsing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">test_language_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-test-language X</span></code>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">test_language_on_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-test-language-on X</span></code>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">import_setting</span><span class="plain-syntax">; </span><span class="comment"> </span><code class="display"><span class="extract-syntax">-import X</span></code><span class="comment">: where to find imported webs</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax">;</span>
</pre><ul class="endnotetexts"><li>The structure inweb_instructions is accessed in 1/pc and here.</li></ul><p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Reading the command line. </b>The dull work of this is done by the Foundation module: all we need to do is
to enumerate constants for the Inweb-specific command line switches, and
then declare them.
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::read</span><button class="popup" onclick="togglePopup('usagePopup1')">...<span class="popuptext" id="usagePopup1">Usage of <b>Configuration::read</b>:<br>Program Control - <a href="1-pc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> **</span><span class="identifier-syntax">argv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span>&lt;<span class="named-paragraph">Initialise the args</span> <span class="named-paragraph-number">2.1</span>&gt;<span class="plain-syntax">;</span>
<span class="plain-syntax"> </span>&lt;<span class="named-paragraph">Declare the command-line switches specific to Inweb</span> <span class="named-paragraph-number">2.3</span>&gt;<span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP8" class="internal">CommandLine::read</a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">args</span><span class="plain-syntax">, &amp;</span><a href="1-cnf.html#SP3" class="internal">Configuration::switch</a><span class="plain-syntax">, &amp;</span><a href="1-cnf.html#SP5" class="internal">Configuration::bareword</a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP4" class="internal">Configuration::member_and_colony</a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">args</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="internal">Str::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax">, </span><span class="string-syntax">"HTML"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_web</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_file</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">gitignore_setting</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> != </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="internal">Str::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_range</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP17" class="internal">Str::copy</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre><p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="named-paragraph-defn">Initialise the args</span> <span class="named-paragraph-number">2.1</span>&gt; =
</code></p>
<pre class="displayed-code all-displayed-code">
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">swarm_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">SWARM_OFF_SWM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">show_languages_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">catalogue_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">functions_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">structures_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">advance_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">open_pdf_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">scan_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">verbose_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_web</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_range</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="internal">Str::new</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">chosen_range_actually_chosen</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">tangle_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">weave_to_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">weave_into_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">gitignore_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">advance_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">writeme_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">navigation_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">colony_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">member_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">breadcrumb_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">breadcrumb_request</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">tag_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="internal">Str::new</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="internal">Str::new</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">import_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">targets</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">test_language_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">.</span><span class="element-syntax">test_language_on_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre><ul class="endnotetexts"><li>This code is used in <a href="1-cnf.html#SP2">&#167;2</a>.</li></ul><p class="inwebparagraph"><a id="SP2_2"></a><b>&#167;2.2. </b>The CommandLine section of Foundation needs to be told what command-line
switches we want, other than the standard set (such as <code class="display"><span class="extract-syntax">-help</span></code>) which it
provides automatically.
</p>
<pre class="definitions">
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERBOSE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">IMPORT_FROM_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGES_CLSG</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGES_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SHOW_LANGUAGES_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_LANGUAGE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_LANGUAGE_ON_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ANALYSIS_CLSG</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CATALOGUE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">FUNCTIONS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">STRUCTURES_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ADVANCE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">GITIGNORE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MAKEFILE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WRITEME_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ADVANCE_FILE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROTOTYPE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SCAN_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVING_CLSG</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVE_INTO_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVE_TO_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">OPEN_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVE_AS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">WEAVE_TAG_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BREADCRUMB_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NAVIGATION_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TANGLING_CLSG</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TANGLE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TANGLE_TO_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COLONIAL_CLSG</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COLONY_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MEMBER_CLSW</span>
</pre>
<p class="inwebparagraph"><a id="SP2_3"></a><b>&#167;2.3. </b><code class="display">
&lt;<span class="named-paragraph-defn">Declare the command-line switches specific to Inweb</span> <span class="named-paragraph-number">2.3</span>&gt; =
</code></p>
<pre class="displayed-code all-displayed-code">
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP14" class="internal">CommandLine::declare_heading</a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"inweb: a tool for literate programming\n\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"Usage: inweb WEB OPTIONS RANGE\n\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"WEB must be a directory holding a literate program (a 'web')\n\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"The legal RANGEs are:\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" all: complete web (the default if no TARGETS set)\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" P: all preliminaries\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" 1: Chapter 1 (and so on)\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" A: Appendix A (and so on, up to Appendix O)\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" 3/eg: section with abbreviated name \"3/eg\" (and so on)\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"You can also, or instead, specify:\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" index: to weave an HTML page indexing the project\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" chapters: to weave all chapters as individual documents\n"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">" sections: ditto with sections\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::begin_group</a><span class="plain-syntax">(</span><span class="constant-syntax">LANGUAGES_CLSG</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"for locating programming language definitions"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">LANGUAGE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"read-language"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"read language definition from file X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">LANGUAGES_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"read-languages"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"read all language definitions in path X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">SHOW_LANGUAGES_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"show-languages"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"list programming languages supported by Inweb"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">TEST_LANGUAGE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"test-language"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"test language X on..."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">TEST_LANGUAGE_ON_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"test-language-on"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"...the code in the file X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::end_group</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::begin_group</a><span class="plain-syntax">(</span><span class="constant-syntax">ANALYSIS_CLSG</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"for analysing a web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">CATALOGUE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"catalogue"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"list the sections in the web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">CATALOGUE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"catalog"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"same as '-catalogue'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">MAKEFILE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"makefile"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"write a makefile for this web and store it in X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">GITIGNORE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"gitignore"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"write a .gitignore file for this web and store it in X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">ADVANCE_FILE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"advance-build-file"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"increment daily build code in file X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WRITEME_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"write-me"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"write a read-me file following instructions in file X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">PROTOTYPE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"prototype"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"translate makefile from prototype X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">FUNCTIONS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"functions"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"catalogue the functions in the web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">STRUCTURES_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"structures"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"catalogue the structures in the web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">ADVANCE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"advance-build"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"increment daily build code for the web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">SCAN_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"scan"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"scan the web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::end_group</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::begin_group</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVING_CLSG</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"for weaving a web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave the web into human-readable form"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVE_INTO_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave-into"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave, but into directory X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVE_TO_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave-to"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave, but to filename X (for single files only)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">OPEN_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"open"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave then open woven file"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVE_AS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave-as"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"set weave pattern to X (default is 'HTML')"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">WEAVE_TAG_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave-tag"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"weave, but only using material tagged as X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">BREADCRUMB_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"breadcrumb"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"use the text X as a breadcrumb in overhead navigation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">NAVIGATION_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"navigation"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"use the file X as a column of navigation links"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::end_group</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::begin_group</a><span class="plain-syntax">(</span><span class="constant-syntax">TANGLING_CLSG</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"for tangling a web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">TANGLE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"tangle"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"tangle the web into machine-compilable form"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">TANGLE_TO_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"tangle-to"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"tangle, but to filename X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::end_group</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::begin_group</a><span class="plain-syntax">(</span><span class="constant-syntax">COLONIAL_CLSG</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"for dealing with colonies of webs together"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">COLONY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"colony"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"use the file X as a list of webs in this colony"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">MEMBER_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"member"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"use member X from the colony as our web"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::end_group</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP6" class="internal">CommandLine::declare_boolean_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">VERBOSE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"verbose"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"explain what inweb is doing"</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-cla.html#SP5" class="internal">CommandLine::declare_switch</a><span class="plain-syntax">(</span><span class="constant-syntax">IMPORT_FROM_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"import-from"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"specify that imported modules are at pathname X"</span><span class="plain-syntax">);</span>
</pre><ul class="endnotetexts"><li>This code is used in <a href="1-cnf.html#SP2">&#167;2</a>.</li></ul><p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Foundation calls this on any <code class="display"><span class="extract-syntax">-switch</span></code> argument read:
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::switch</span><button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Configuration::switch</b>:<br><a href="1-cnf.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment"> Miscellaneous</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERBOSE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">verbose_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IMPORT_FROM_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">import_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-pth.html#SP5" class="internal">Pathnames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment"> Analysis</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LANGUAGE_CLSW:</span>
<span class="plain-syntax"> </span><a href="4-pl.html#SP7" class="internal">Languages::read_definition</a><span class="plain-syntax">(</span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LANGUAGES_CLSW:</span>
<span class="plain-syntax"> </span><a href="4-pl.html#SP5" class="internal">Languages::read_definitions</a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="internal">Pathnames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SHOW_LANGUAGES_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">show_languages_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_LANGUAGE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_language_setting</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-pl.html#SP7" class="internal">Languages::read_definition</a><span class="plain-syntax">(</span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_LANGUAGE_ON_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_language_on_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CATALOGUE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">catalogue_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FUNCTIONS_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">functions_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STRUCTURES_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">structures_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADVANCE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">advance_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MAKEFILE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> != </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">GITIGNORE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gitignore_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> != </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADVANCE_FILE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">advance_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITEME_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">writeme_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROTOTYPE_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">TRANSLATE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SCAN_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scan_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">ANALYSE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment"> Weave-related</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WEAVE_CLSW:</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WEAVE_INTO_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_into_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-pth.html#SP5" class="internal">Pathnames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WEAVE_TO_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_to_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OPEN_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">open_pdf_switch</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WEAVE_AS_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="internal">Str::duplicate</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WEAVE_TAG_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tag_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="internal">Str::duplicate</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BREADCRUMB_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><a href="6-cln.html#SP6" class="internal">Colonies::request_breadcrumb</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">breadcrumb_request</span><span class="plain-syntax">, </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">breadcrumb_setting</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NAVIGATION_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">navigation_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">WEAVE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment"> Colonial</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COLONY_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colony_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MEMBER_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">member_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="internal">Str::duplicate</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment"> Tangle-related</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TANGLE_CLSW:</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">TANGLE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TANGLE_TO_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tangle_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP7" class="internal">Configuration::set_fundamental_mode</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="constant-syntax">TANGLE_MODE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unimplemented switch"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre><p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>The colony file is, in one sense, a collection of presets for the web
location and its navigational aids.
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::member_and_colony</span><button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Configuration::member_and_colony</b>:<br><a href="1-cnf.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colony_setting</span><span class="plain-syntax">) </span><a href="6-cln.html#SP4" class="internal">Colonies::load</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colony_setting</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="internal">Str::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">member_setting</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_web</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_file</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">colony_member</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CM</span><span class="plain-syntax"> = </span><a href="6-cln.html#SP7" class="internal">Colonies::find</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">member_setting</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CM</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="../foundation-module/3-em.html#SP2" class="internal">Errors::fatal</a><span class="plain-syntax">(</span><span class="string-syntax">"the colony has no member of that name"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-cnf.html#SP5" class="internal">Configuration::bareword</a><span class="plain-syntax">(0, </span><span class="identifier-syntax">CM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">path</span><span class="plain-syntax">, </span><span class="identifier-syntax">args</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="internal">Str::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">default_weave_pattern</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/2-llas.html#SP6" class="internal">LinkedLists::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">breadcrumb_setting</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">breadcrumb_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">breadcrumb_tail</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">navigation_setting</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">navigation_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">navigation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_into_setting</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_into_setting</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weave_path</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-em.html#SP2" class="internal">Errors::fatal</a><span class="plain-syntax">(</span><span class="string-syntax">"cannot specify a web and also use -member"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre><p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>Foundation calls this routine on any command-line argument which is
neither a switch (like <code class="display"><span class="extract-syntax">-weave</span></code>), nor an argument for a switch (like
the <code class="display"><span class="extract-syntax">X</span></code> in <code class="display"><span class="extract-syntax">-weave-as X</span></code>).
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::bareword</span><button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Configuration::bareword</b>:<br><a href="1-cnf.html#SP2">&#167;2</a>, <a href="1-cnf.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_web</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_file</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP21" class="internal">Str::suffix_eq</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">".inweb"</span><span class="plain-syntax">, </span><span class="constant-syntax">6</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_file</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="internal">Filenames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_web</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-pth.html#SP5" class="internal">Pathnames::from_text</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="1-cnf.html#SP6" class="internal">Configuration::set_range</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="identifier-syntax">opt</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre><p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Here we read a range. The special ranges <code class="display"><span class="extract-syntax">index</span></code>, <code class="display"><span class="extract-syntax">chapters</span></code> and <code class="display"><span class="extract-syntax">sections</span></code>
are converted into swarm settings instead. <code class="display"><span class="extract-syntax">all</span></code> is simply an alias for <code class="display"><span class="extract-syntax">0</span></code>.
Otherwise, a range is a chapter number/letter, or a section range.
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::set_range</span><button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Configuration::set_range</b>:<br><a href="1-cnf.html#SP5">&#167;5</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-pm.html#SP9" class="internal">Regexp::create_mr</a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP22" class="internal">Str::eq_wide_string</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"index"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">swarm_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">SWARM_INDEX_SWM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP22" class="internal">Str::eq_wide_string</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"chapters"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">swarm_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">SWARM_CHAPTERS_SWM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP22" class="internal">Str::eq_wide_string</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"sections"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">swarm_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">SWARM_SECTIONS_SWM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (++</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">targets</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><a href="../foundation-module/3-em.html#SP2" class="internal">Errors::fatal</a><span class="plain-syntax">(</span><span class="string-syntax">"at most one target may be given"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP22" class="internal">Str::eq_wide_string</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"all"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP17" class="internal">Str::copy</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">isalnum</span><span class="plain-syntax">(</span><a href="../foundation-module/4-sm.html#SP13" class="internal">Str::get_first_char</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">))) &amp;&amp; (</span><a href="../foundation-module/4-sm.html#SP8" class="internal">Str::len</a><span class="plain-syntax">(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> || (</span><a href="../foundation-module/4-pm.html#SP10" class="internal">Regexp::match</a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">opt</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"%i+/%i+"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP17" class="internal">Str::copy</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">opt</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">string_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP10" class="internal">Str::start</a><span class="plain-syntax">(</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">chosen_range</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP14" class="internal">Str::put</a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">toupper</span><span class="plain-syntax">(</span><a href="../foundation-module/4-sm.html#SP13" class="internal">Str::get</a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"target not recognised (see -help for more): %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">opt</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-pc.html#SP8" class="internal">Main::error_in_web</a><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">exit</span><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">chosen_range_actually_chosen</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="internal">Regexp::dispose_of</a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre><p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>We can only be in a single mode at a time:
</p>
<pre class="displayed-code all-displayed-code">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Configuration::set_fundamental_mode</span><button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Configuration::set_fundamental_mode</b>:<br><a href="1-cnf.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inweb_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_material</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> != </span><span class="constant-syntax">NO_MODE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inweb_mode</span><span class="plain-syntax"> != </span><span class="identifier-syntax">new_material</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-em.html#SP2" class="internal">Errors::fatal</a><span class="plain-syntax">(</span><span class="string-syntax">"can only do one at a time - weaving, tangling or analysing"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">args</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">inweb_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_material</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre><hr class="tocbar">
<ul class="toc"><li><a href="1-pc.html">Back to 'Program Control'</a></li><li><a href="1-ts.html">Continue with 'The Swarm'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>