inweb-bootstrap/docs/inweb/1-cnf.html
2020-04-12 23:48:34 +01:00

517 lines
87 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>
<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="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../foundation-module/index.html">foundation-module</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>
</ul>
</nav>
<main role="main">
<!--Weave of 'Configuration' generated by 7-->
<ul class="crumbs"><li><a href="../webs.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="#SP1">&#167;1. Instructions</a></li><li><a href="#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="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inweb_instructions</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inweb_mode</span><span class="plain">; </span><span class="comment"> our main mode of operation: one of the <code class="display"><span class="extract">*_MODE</span></code> constants</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">chosen_web</span><span class="plain">; </span><span class="comment"> project folder relative to cwd</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">chosen_file</span><span class="plain">; </span><span class="comment"> or, single file relative to cwd</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chosen_range</span><span class="plain">; </span><span class="comment"> which subset of this web we apply to (often, all of it)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">chosen_range_actually_chosen</span><span class="plain">; </span><span class="comment"> rather than being a default choice</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">swarm_mode</span><span class="plain">; </span><span class="comment"> relevant to weaving only: one of the <code class="display"><span class="extract">*_SWARM</span></code> constants</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">tag_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-weave-tag X</span></code>: weave, but only the material tagged X</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">weave_format</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-weave-as X</span></code>: for example, <code class="display"><span class="extract">-weave-as TeX</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">weave_pattern</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-weave-to X</span></code>: for example, <code class="display"><span class="extract">-weave-to HTML</span></code></span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">weave_docs</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-docs</span></code>: for GitHub Pages</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">show_languages_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-show-languages</span></code>: print list of available PLs</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">catalogue_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-catalogue</span></code>: print catalogue of sections</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">functions_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-functions</span></code>: print catalogue of functions within sections</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">structures_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-structures</span></code>: print catalogue of structures within sections</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">advance_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-advance-build</span></code>: advance build file for web</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_pdf_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-open-pdf</span></code>: open any woven PDF in the OS once it is made</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">scan_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-scan</span></code>: simply show the syntactic scan of the source</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">weave_to_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-weave-to X</span></code>: the pathname X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">weave_into_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-weave-into X</span></code>: the pathname X, if supplied</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sequential</span><span class="plain">; </span><span class="comment"> give the sections sequential sigils</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">tangle_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-tangle-to X</span></code>: the pathname X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">makefile_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-makefile X</span></code>: the filename X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">gitignore_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-gitignore X</span></code>: the filename X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">advance_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-advance-build-file X</span></code>: advance build file X</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">writeme_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-write-me X</span></code>: advance build file X</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">prototype_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-prototype X</span></code>: the pathname X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">navigation_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-navigation X</span></code>: the filename X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">colony_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-colony X</span></code>: the filename X, if supplied</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">breadcrumb_setting</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">breadcrumb_request</span></code></span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbose_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-verbose</span></code>: print names of files read to stdout</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">targets</span><span class="plain">; </span><span class="comment"> used only for parsing</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">test_language_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-test-language X</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">test_language_on_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-test-language-on X</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">import_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-import X</span></code>: where to find imported webs</span>
<span class="plain">} </span><span class="reserved">inweb_instructions</span><span class="plain">;</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">breadcrumb_request</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">breadcrumb_text</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">breadcrumb_link</span><span class="plain">;</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">breadcrumb_request</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inweb_instructions is accessed in 1/pc and here.</p>
<p class="endnote">The structure breadcrumb_request is accessed in 5/hf and here.</p>
<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="display">
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="functiontext">Configuration::read<button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Configuration::read</b>:<br>Program Control - <a href="1-pc.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="identifier">args</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Initialise the args</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Declare the command-line switches specific to Inweb</span> <span class="cwebmacronumber">2.3</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="3-cla.html#SP8">CommandLine::read</a></span><span class="plain">(</span><span class="identifier">argc</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">, &amp;</span><span class="identifier">args</span><span class="plain">, &amp;</span><span class="functiontext"><a href="#SP3">Configuration::switch</a></span><span class="plain">, &amp;</span><span class="functiontext"><a href="#SP4">Configuration::bareword</a></span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">.</span><span class="identifier">chosen_web</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) &amp;&amp; (</span><span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_file</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">.</span><span class="identifier">makefile_setting</span><span class="plain">) || (</span><span class="identifier">args</span><span class="plain">.</span><span class="element">gitignore_setting</span><span class="plain">))</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">inweb_mode</span><span class="plain"> = </span><span class="constant">TRANSLATE_MODE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">args</span><span class="plain">.</span><span class="element">inweb_mode</span><span class="plain"> != </span><span class="constant">TRANSLATE_MODE</span><span class="plain">)</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">inweb_mode</span><span class="plain"> = </span><span class="constant">NO_MODE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_range</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_range</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"0"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">args</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Initialise the args</span> <span class="cwebmacronumber">2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">args</span><span class="plain">.</span><span class="element">inweb_mode</span><span class="plain"> = </span><span class="constant">NO_MODE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="constant">SWARM_OFF_SWM</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">show_languages_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">catalogue_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">functions_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">structures_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">advance_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">open_pdf_switch</span><span class="plain"> = </span><span class="constant">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">scan_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">verbose_switch</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_web</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">chosen_range_actually_chosen</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">tangle_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">weave_to_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">weave_into_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">makefile_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">gitignore_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">advance_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">writeme_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">prototype_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">navigation_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">colony_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">breadcrumb_setting</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">breadcrumb_request</span><span class="plain">);</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">tag_setting</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">weave_pattern</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP4">Str::new_from_wide_string</a></span><span class="plain">(</span><span class="identifier">L</span><span class="string">"HTML"</span><span class="plain">);</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">weave_docs</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">import_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">targets</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">test_language_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">test_language_on_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<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">-help</span></code>) which it
provides automatically.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">VERBOSE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IMPORT_FROM_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">LANGUAGES_CLSG</span>
<span class="definitionkeyword">enum</span> <span class="constant">LANGUAGE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">LANGUAGES_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SHOW_LANGUAGES_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEST_LANGUAGE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEST_LANGUAGE_ON_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">ANALYSIS_CLSG</span>
<span class="definitionkeyword">enum</span> <span class="constant">CATALOGUE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">FUNCTIONS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">STRUCTURES_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">ADVANCE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">GITIGNORE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">MAKEFILE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WRITEME_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">ADVANCE_FILE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROTOTYPE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SCAN_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVING_CLSG</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_INTO_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_TO_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">OPEN_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_AS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_TAG_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_DOCS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">BREADCRUMB_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">NAVIGATION_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">COLONY_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLING_CLSG</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLE_TO_CLSW</span>
</pre>
<p class="inwebparagraph"><a id="SP2_3"></a><b>&#167;2.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Declare the command-line switches specific to Inweb</span> <span class="cwebmacronumber">2.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext"><a href="3-cla.html#SP14">CommandLine::declare_heading</a></span><span class="plain">(</span><span class="identifier">L</span><span class="string">"inweb: a tool for literate programming\n\n"</span>
<span class="identifier">L</span><span class="string">"Usage: inweb WEB OPTIONS RANGE\n\n"</span>
<span class="identifier">L</span><span class="string">"WEB must be a directory holding a literate program (a 'web')\n\n"</span>
<span class="identifier">L</span><span class="string">"The legal RANGEs are:\n"</span>
<span class="identifier">L</span><span class="string">" all: complete web (the default if no TARGETS set)\n"</span>
<span class="identifier">L</span><span class="string">" P: all preliminaries\n"</span>
<span class="identifier">L</span><span class="string">" 1: Chapter 1 (and so on)\n"</span>
<span class="identifier">L</span><span class="string">" A: Appendix A (and so on, up to Appendix O)\n"</span>
<span class="identifier">L</span><span class="string">" 3/eg: section with abbreviated name \"3/eg\" (and so on)\n"</span>
<span class="identifier">L</span><span class="string">"You can also, or instead, specify:\n"</span>
<span class="identifier">L</span><span class="string">" index: to weave an HTML page indexing the project\n"</span>
<span class="identifier">L</span><span class="string">" chapters: to weave all chapters as individual documents\n"</span>
<span class="identifier">L</span><span class="string">" sections: ditto with sections\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::begin_group</a></span><span class="plain">(</span><span class="constant">LANGUAGES_CLSG</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"for locating programming language definitions"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">LANGUAGE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"read-language"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"read language definition from file X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">LANGUAGES_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"read-languages"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"read all language definitions in path X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">SHOW_LANGUAGES_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"show-languages"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"list programming languages supported by Inweb"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">TEST_LANGUAGE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"test-language"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"test language X on..."</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">TEST_LANGUAGE_ON_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"test-language-on"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"...the code in the file X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::end_group</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::begin_group</a></span><span class="plain">(</span><span class="constant">ANALYSIS_CLSG</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"for analysing a web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">CATALOGUE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"catalogue"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"list the sections in the web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">CATALOGUE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"catalog"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"same as '-catalogue'"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">MAKEFILE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"makefile"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"write a makefile for this web and store it in X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">GITIGNORE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"gitignore"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"write a .gitignore file for this web and store it in X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">ADVANCE_FILE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"advance-build-file"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"increment daily build code in file X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WRITEME_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"write-me"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"write a read-me file following instructions in file X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">PROTOTYPE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"prototype"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"translate makefile from prototype X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">FUNCTIONS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"functions"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"catalogue the functions in the web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">STRUCTURES_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"structures"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"catalogue the structures in the web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">ADVANCE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"advance-build"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"increment daily build code for the web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">SCAN_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"scan"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"scan the web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::end_group</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::begin_group</a></span><span class="plain">(</span><span class="constant">WEAVING_CLSG</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"for weaving a web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_DOCS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave-docs"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave the web for use at GitHub Pages"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave the web into human-readable form"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_INTO_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave-into"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave, but into directory X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_TO_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave-to"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave, but to filename X (for single files only)"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">OPEN_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"open"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave then open woven file"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_AS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave-as"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"set weave pattern to X (default is 'HTML')"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">WEAVE_TAG_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weave-tag"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"weave, but only using material tagged as X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">BREADCRUMB_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"breadcrumb"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"use the text X as a breadcrumb in overhead navigation"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">NAVIGATION_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"navigation"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"use the file X as a column of navigation links"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">COLONY_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"colony"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"use the file X as a list of webs in this colony"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::end_group</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::begin_group</a></span><span class="plain">(</span><span class="constant">TANGLING_CLSG</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"for tangling a web"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">TANGLE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"tangle"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"tangle the web into machine-compilable form"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">TANGLE_TO_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"tangle-to"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"tangle, but to filename X"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::end_group</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP6">CommandLine::declare_boolean_switch</a></span><span class="plain">(</span><span class="constant">VERBOSE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"verbose"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"explain what inweb is doing"</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">IMPORT_FROM_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"import-from"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"specify that imported modules are at pathname X"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Foundation calls this on any <code class="display"><span class="extract">-switch</span></code> argument read:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::switch<button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Configuration::switch</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = (</span><span class="reserved">inweb_instructions</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="comment"> Miscellaneous</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">VERBOSE_CLSW:</span><span class="plain"> </span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">verbose_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IMPORT_FROM_CLSW:</span><span class="plain"> </span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">import_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP5">Pathnames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="comment"> Analysis</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LANGUAGE_CLSW:</span>
<span class="functiontext"><a href="4-pl.html#SP7">Languages::read_definition</a></span><span class="plain">(</span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">)); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LANGUAGES_CLSW:</span>
<span class="functiontext"><a href="4-pl.html#SP5">Languages::read_definitions</a></span><span class="plain">(</span><span class="functiontext"><a href="3-pth.html#SP5">Pathnames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">)); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SHOW_LANGUAGES_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">show_languages_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TEST_LANGUAGE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">test_language_setting</span><span class="plain"> =</span>
<span class="functiontext"><a href="4-pl.html#SP7">Languages::read_definition</a></span><span class="plain">(</span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">));</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TEST_LANGUAGE_ON_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">test_language_on_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CATALOGUE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">catalogue_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FUNCTIONS_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">functions_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STRUCTURES_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">structures_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ADVANCE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">advance_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MAKEFILE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">makefile_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">inweb_mode</span><span class="plain"> != </span><span class="constant">TRANSLATE_MODE</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GITIGNORE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">gitignore_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">inweb_mode</span><span class="plain"> != </span><span class="constant">TRANSLATE_MODE</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ADVANCE_FILE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">advance_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WRITEME_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">writeme_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PROTOTYPE_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">prototype_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SCAN_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">scan_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">ANALYSE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="comment"> Weave-related</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_CLSW:</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_DOCS_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">weave_docs</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_INTO_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">weave_into_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP5">Pathnames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_TO_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">weave_to_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">open_pdf_switch</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_AS_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">weave_pattern</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEAVE_TAG_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">tag_setting</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BREADCRUMB_CLSW:</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="functiontext"><a href="#SP3">Configuration::breadcrumb</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">),</span>
<span class="reserved">breadcrumb_request</span><span class="plain">, </span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">breadcrumb_setting</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NAVIGATION_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">navigation_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COLONY_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">colony_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="comment"> Tangle-related</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TANGLE_CLSW:</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TANGLE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TANGLE_TO_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">tangle_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TANGLE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented switch"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">breadcrumb_request</span><span class="plain"> *</span><span class="functiontext">Configuration::breadcrumb<button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Configuration::breadcrumb</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">breadcrumb_request</span><span class="plain"> *</span><span class="identifier">BR</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">breadcrumb_request</span><span class="plain">);</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">arg</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?): *(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">BR</span><span class="plain">-&gt;</span><span class="element">breadcrumb_text</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="identifier">BR</span><span class="plain">-&gt;</span><span class="element">breadcrumb_link</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">BR</span><span class="plain">-&gt;</span><span class="element">breadcrumb_text</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="identifier">BR</span><span class="plain">-&gt;</span><span class="element">breadcrumb_link</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">BR</span><span class="plain">-&gt;</span><span class="element">breadcrumb_link</span><span class="plain">, </span><span class="string">".html"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">BR</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>Foundation calls this routine on any command-line argument which is
neither a switch (like <code class="display"><span class="extract">-weave</span></code>), nor an argument for a switch (like
the <code class="display"><span class="extract">X</span></code> in <code class="display"><span class="extract">-weave-as X</span></code>).
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::bareword<button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Configuration::bareword</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = (</span><span class="reserved">inweb_instructions</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">chosen_web</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) &amp;&amp; (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_file</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP20">Str::suffix_eq</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".inweb"</span><span class="plain">, </span><span class="constant">6</span><span class="plain">))</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_file</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_web</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP5">Pathnames::from_text</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP5">Configuration::set_range</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="identifier">opt</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>Here we read a range. The special ranges <code class="display"><span class="extract">index</span></code>, <code class="display"><span class="extract">chapters</span></code> and <code class="display"><span class="extract">sections</span></code>
are converted into swarm settings instead. <code class="display"><span class="extract">all</span></code> is simply an alias for <code class="display"><span class="extract">0</span></code>.
Otherwise, a range is a chapter number/letter, or a section range.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_range<button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Configuration::set_range</b>:<br><a href="#SP4">&#167;4</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</span><span class="plain">) {</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"index"</span><span class="plain">)) {</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="constant">SWARM_INDEX_SWM</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"chapters"</span><span class="plain">)) {</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="constant">SWARM_CHAPTERS_SWM</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"sections"</span><span class="plain">)) {</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="constant">SWARM_SECTIONS_SWM</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">targets</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) </span><span class="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"at most one target may be given"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"all"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_range</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"0"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">isalnum</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">))) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">))</span>
<span class="plain">|| (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%i+/%i+"</span><span class="plain">))) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_range</span><span class="plain">, </span><span class="identifier">opt</span><span class="plain">);</span>
<span class="reserved">string_position</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP10">Str::start</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">toupper</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">ERM</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">ERM</span><span class="plain">, </span><span class="string">"target not recognised (see -help for more): %S"</span><span class="plain">, </span><span class="identifier">opt</span><span class="plain">);</span>
<span class="functiontext"><a href="1-pc.html#SP8">Main::error_in_web</a></span><span class="plain">(</span><span class="identifier">ERM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">ERM</span><span class="plain">);</span>
<span class="identifier">exit</span><span class="plain">(1);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_range_actually_chosen</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>We can only be in a single mode at a time:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_fundamental_mode<button class="popup" onclick="togglePopup('usagePopup7')">...<span class="popuptext" id="usagePopup7">Usage of <b>Configuration::set_fundamental_mode</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">inweb_mode</span><span class="plain"> != </span><span class="constant">NO_MODE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">inweb_mode</span><span class="plain"> != </span><span class="identifier">new_material</span><span class="plain">))</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"can only do one at a time - weaving, tangling or analysing"</span><span class="plain">);</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">inweb_mode</span><span class="plain"> = </span><span class="identifier">new_material</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="1-pc.html">Back to 'Program Control'</a></li><li><a href="1-ptt.html">Continue with 'Patterns'</a></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>