mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 18:14:21 +03:00
927 lines
116 KiB
HTML
927 lines
116 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>26/i6i</title>
|
|
<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>
|
|
|
|
<!--Weave of '26/uo' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Use Options</b></li></ul><p class="purpose">To control compiler settings, pragma-style.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The preferred way to pass "do it this way, not that way" instructions to
|
|
Inform, in the spirit of natural-language input, is not to use command-line
|
|
arguments in the shell but to write suitable sentences in the source text.
|
|
For instance:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Use American dialect and the serial comma.</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">Use options like "American dialect" take the place of what would be switches
|
|
like <code class="display"><span class="extract">--american-dialect</span></code> in a conventional Unix tool. They are themselves
|
|
defined by the source text (almost always the Standard Rules). They generally
|
|
control run-time behaviour, and as a result Inform deals with them simply by
|
|
defining suitable I6 constants in the I6 code being output: conditional
|
|
compilation of the I6 template layer then delivers the desired result.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">But a few use options are more analogous to compiler pragmas, changing how
|
|
Inform treats the rest of the source text. In some cases, they affect only
|
|
the source text file they come from — for example, so that an Extension can
|
|
set a use option applying only to itself.
|
|
</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">use_option</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">; </span> <span class="comment">word range where name is stored</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">option_expansion</span><span class="plain">; </span> <span class="comment">definition as given in source</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">where_used</span><span class="plain">; </span> <span class="comment">where the option is taken in the source</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">option_used</span><span class="plain">; </span> <span class="comment">set if this option has been taken</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">source_file_scoped</span><span class="plain">; </span> <span class="comment">scope is the current source file only?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">minimum_setting_value</span><span class="plain">; </span> <span class="comment">for those which are numeric</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">use_option</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure use_option is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/ts and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Five of the pragma-like settings are stored here:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">memory_economy_in_force</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dynamic_memory_allocation</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allow_engineering_notation</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">use_exact_parsing_option</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">index_figure_thumbnails</span><span class="plain"> = 50;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">undo_prevention</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">serial_comma</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">predictable_randomisation</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">command_line_echoing</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">American_dialect</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">room_description_level</span><span class="plain"> = 2;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>We can also meddle with the I6 memory settings which will be used to finish
|
|
compiling the story file. We need this because we have no practical way to
|
|
predict when our code will break I6's limits: the only reasonable way it can
|
|
work is for the user to hit the limit occasionally, and then raise that limit
|
|
by hand with a sentence in the source text.
|
|
</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">i6_memory_setting</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">ICL_identifier</span><span class="plain">; </span> <span class="comment">see the DM4 for the I6 memory setting names</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">number</span><span class="plain">; </span> <span class="comment">e.g., <code class="display"><span class="extract">50000</span></code> means "at least 50,000"</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">i6_memory_setting</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure i6_memory_setting is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Here first is the sentence handler for "Use ... means ..." sentences.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::use_translates_as_SMF</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">task</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">NPs</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">SW</span><span class="plain"> = (</span><span class="identifier">NPs</span><span class="plain">)?(</span><span class="identifier">NPs</span><span class="plain">[0]):</span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = (</span><span class="identifier">NPs</span><span class="plain">)?(</span><span class="identifier">NPs</span><span class="plain">[1]):</span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">task</span><span class="plain">) { </span> <span class="comment">"Use American dialect means ..."</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ACCEPT_SMFT</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">as</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">SW</span><span class="plain">)) {</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="constant">verb_id_ANNOT</span><span class="plain">, </span><span class="constant">SPECIAL_MEANING_VB</span><span class="plain">);</span>
|
|
<span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</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="constant">TRAVERSE1_SMFT</span><span class="plain">:</span>
|
|
<span class="functiontext">UseOptions::new_use_option</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::new_use_option</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">as</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">))) &&</span>
|
|
<span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>next</span><span class="plain">)))) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, 1);</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain">);</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain"> = </span><span class="identifier">OW</span><span class="plain">;</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_expansion</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> > 0) </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> = -1;</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((<</span><span class="identifier">notable</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">)) && (<<</span><span class="identifier">r</span><span class="plain">>> == </span><span class="constant">AUTHORIAL_MODESTY_UO</span><span class="plain">))</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">Nouns::new_proper_noun</span><span class="plain">(</span><span class="identifier">OW</span><span class="plain">, </span><span class="identifier">NEUTER_GENDER</span><span class="plain">,</span>
|
|
<span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">PARSE_EXACTLY_NTOPT</span><span class="plain">,</span>
|
|
<span class="identifier">MISCELLANEOUS_MC</span><span class="plain">, </span><span class="functiontext">Rvalues::from_use_option</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::use_translates_as_SMF is used in 6/nv (<a href="6-nv.html#SP16">§16</a>).</p>
|
|
|
|
<p class="endnote">The function UseOptions::new_use_option appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>The object for such a sentence is just an I6 expansion:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">as</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
|
<span class="identifier">use</span><span class="plain"> <</span><span class="identifier">nounphrase</span><span class="plain">> ==> </span><span class="identifier">TRUE</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">as</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ::=</span>
|
|
<span class="plain">(- ### | ==> </span><span class="identifier">TRUE</span>
|
|
<span class="plain">... ==> </span><<span class="cwebmacro">Issue PM_UseTranslatesNotI6 problem</span> <span class="cwebmacronumber">6.1</span>>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_UseTranslatesNotI6 problem</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UseTranslatesNotI6</span><span class="plain">),</span>
|
|
<span class="string">"that translates into something which isn't a simple I6 inclusion"</span><span class="plain">,</span>
|
|
<span class="string">"placed in '(-' and '-)' markers."</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>Having registered the use option names as miscellaneous, we need to parse
|
|
them back that way too:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="functiontext">UseOptions::parse_uo</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain">) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">ExParser::parse_excerpt</span><span class="plain">(</span><span class="identifier">MISCELLANEOUS_MC</span><span class="plain">, </span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rvalues::is_CONSTANT_of_kind</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">K_use_option</span><span class="plain">)) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rvalues::to_use_option</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::parse_uo is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>"Use" sentences are simple in structure. Their object noun phrases are
|
|
articled lists:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Use American dialect and the serial comma.</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">Each of the entries in this list must match the following; the text of the
|
|
option name is taken from the <code class="display"><span class="extract">...</span></code> or <code class="display"><span class="extract">###</span></code> as appropriate:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ::=</span>
|
|
<span class="plain">... </span><span class="identifier">of</span><span class="plain"> </span><span class="identifier">at</span><span class="plain"> </span><span class="identifier">least</span><span class="plain"> <</span><span class="identifier">cardinal</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">-</span><span class="identifier">unlimited</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain">### </span><span class="identifier">of</span><span class="plain"> <</span><span class="identifier">cardinal</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">-</span><span class="identifier">unlimited</span><span class="plain">> | ==> -</span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="identifier">definite</span><span class="plain">-</span><span class="identifier">article</span><span class="plain">> ... | ==> 0</span>
|
|
<span class="plain">... ==> 0</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">inter</span><span class="plain">-</span><span class="identifier">pipeline</span><span class="plain">> ::=</span>
|
|
<span class="identifier">inter</span><span class="plain"> </span><span class="identifier">pipeline</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">>} ==> </span><span class="identifier">TRUE</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>These are use option names which Inform provides special support for; it
|
|
recognises the English names when they are defined by the Standard Rules. (So
|
|
there is no need to translate this to other languages.)
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">notable</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ::=</span>
|
|
<span class="identifier">authorial</span><span class="plain"> </span><span class="identifier">modesty</span><span class="plain"> |</span>
|
|
<span class="identifier">dynamic</span><span class="plain"> </span><span class="identifier">memory</span><span class="plain"> </span><span class="identifier">allocation</span><span class="plain"> |</span>
|
|
<span class="identifier">memory</span><span class="plain"> </span><span class="identifier">economy</span><span class="plain"> |</span>
|
|
<span class="identifier">no</span><span class="plain"> </span><span class="identifier">deprecated</span><span class="plain"> </span><span class="identifier">features</span><span class="plain"> |</span>
|
|
<span class="identifier">numbered</span><span class="plain"> </span><span class="identifier">rules</span><span class="plain"> |</span>
|
|
<span class="identifier">telemetry</span><span class="plain"> </span><span class="identifier">recordings</span><span class="plain"> |</span>
|
|
<span class="identifier">scoring</span><span class="plain"> |</span>
|
|
<span class="identifier">no</span><span class="plain"> </span><span class="identifier">scoring</span><span class="plain"> |</span>
|
|
<span class="identifier">engineering</span><span class="plain"> </span><span class="identifier">notation</span><span class="plain"> |</span>
|
|
<span class="identifier">unabbreviated</span><span class="plain"> </span><span class="identifier">object</span><span class="plain"> </span><span class="identifier">names</span><span class="plain"> |</span>
|
|
<span class="identifier">index</span><span class="plain"> </span><span class="identifier">figure</span><span class="plain"> </span><span class="identifier">thumbnails</span><span class="plain"> |</span>
|
|
<span class="identifier">gn</span><span class="plain"> </span><span class="identifier">testing</span><span class="plain"> </span><span class="identifier">version</span><span class="plain"> |</span>
|
|
<span class="identifier">undo</span><span class="plain"> </span><span class="identifier">prevention</span><span class="plain"> |</span>
|
|
<span class="identifier">serial</span><span class="plain"> </span><span class="identifier">comma</span><span class="plain"> |</span>
|
|
<span class="identifier">predictable</span><span class="plain"> </span><span class="identifier">randomisation</span><span class="plain"> |</span>
|
|
<span class="identifier">command</span><span class="plain"> </span><span class="identifier">line</span><span class="plain"> </span><span class="identifier">echoing</span><span class="plain"> |</span>
|
|
<span class="identifier">american</span><span class="plain"> </span><span class="identifier">dialect</span><span class="plain"> |</span>
|
|
<span class="identifier">full</span><span class="plain">-</span><span class="identifier">length</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> </span><span class="identifier">descriptions</span><span class="plain"> |</span>
|
|
<span class="identifier">abbreviated</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> </span><span class="identifier">descriptions</span><span class="plain"> |</span>
|
|
<span class="identifier">verbose</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> </span><span class="identifier">descriptions</span><span class="plain"> |</span>
|
|
<span class="identifier">brief</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> </span><span class="identifier">descriptions</span><span class="plain"> |</span>
|
|
<span class="identifier">superbrief</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> </span><span class="identifier">descriptions</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>And these correspond to:
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">AUTHORIAL_MODESTY_UO</span><span class="plain"> 0</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">DYNAMIC_MEMORY_ALLOCATION_UO</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MEMORY_ECONOMY_UO</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_DEPRECATED_FEATURES_UO</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NUMBERED_RULES_UO</span><span class="plain"> 4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">TELEMETRY_RECORDING_UO</span><span class="plain"> 5</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SCORING_UO</span><span class="plain"> 6</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_SCORING_UO</span><span class="plain"> 7</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ENGINEERING_NOTATION_UO</span><span class="plain"> 8</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">UNABBREVIATED_OBJECT_NAMES_UO</span><span class="plain"> 9</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">INDEX_FIGURE_THUMBNAILS_UO</span><span class="plain"> 10</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">GN_TESTING_VERSION_UO</span><span class="plain"> 11</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">UNDO_PREVENTION_UO</span><span class="plain"> 12</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SERIAL_COMMA_UO</span><span class="plain"> 13</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PREDICTABLE_RANDOMISATION_UO</span><span class="plain"> 14</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">COMMAND_LINE_ECHOING_UO</span><span class="plain"> 15</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">AMERICAN_DIALECT_UO</span><span class="plain"> 16</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">FULL_LENGTH_ROOM_DESCRIPTIONS_UO</span><span class="plain"> 17</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ABBREVIATED_ROOM_DESCRIPTIONS_UO</span><span class="plain"> 18</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">VERBOSE_ROOM_DESCRIPTIONS_UO</span><span class="plain"> 19</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">BRIEF_ROOM_DESCRIPTIONS_UO</span><span class="plain"> 20</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SUPERBRIEF_ROOM_DESCRIPTIONS_UO</span><span class="plain"> 21</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::use_SMF</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">task</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">NPs</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = (</span><span class="identifier">NPs</span><span class="plain">)?(</span><span class="identifier">NPs</span><span class="plain">[1]):</span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">task</span><span class="plain">) { </span> <span class="comment">"Use American dialect."</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ACCEPT_SMFT</span><span class="plain">:</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="constant">verb_id_ANNOT</span><span class="plain">, </span><span class="constant">SPECIAL_MEANING_VB</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">articled</span><span class="plain">-</span><span class="identifier">list</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TRAVERSE1_SMFT</span><span class="plain">:</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TRAVERSE2_SMFT</span><span class="plain">:</span>
|
|
<span class="functiontext">UseOptions::set_use_options</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::handle_set_use_option</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="functiontext">UseOptions::set_use_options</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::set_use_options</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">AND_NT</span><span class="plain">) {</span>
|
|
<span class="functiontext">UseOptions::set_use_options</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">);</span>
|
|
<span class="functiontext">UseOptions::set_use_options</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">inter</span><span class="plain">-</span><span class="identifier">pipeline</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">))) </span><<span class="cwebmacro">Set the chain given in this word range</span> <span class="cwebmacronumber">11.2</span>>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">))) </span><<span class="cwebmacro">Set the option given in this word range</span> <span class="cwebmacronumber">11.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Used: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnknownUseOption</span><span class="plain">),</span>
|
|
<span class="string">"that isn't a 'Use' option known to me"</span><span class="plain">,</span>
|
|
<span class="string">"and needs to be one of the ones listed in the documentation."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::use_SMF is used in 6/nv (<a href="6-nv.html#SP16">§16</a>), 7/ns (<a href="7-ns.html#SP8_1">§8.1</a>).</p>
|
|
|
|
<p class="endnote">The function UseOptions::handle_set_use_option appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function UseOptions::set_use_options appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1"></a><b>§11.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Set the option given in this word range</span> <span class="cwebmacronumber">11.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">min_setting</span><span class="plain"> = -1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> < 0) </span><<span class="cwebmacro">Deal with the case of an I6 memory setting</span> <span class="cwebmacronumber">11.1.2</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> > 0) </span><span class="identifier">min_setting</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, 1);</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain"> = </span><span class="functiontext">UseOptions::parse_uo</span><span class="plain">(</span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">) {</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Adjust the minimum setting</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) {</span>
|
|
<span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">OW</span><span class="plain">)));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span> <span class="comment">that is, if used in the main source text</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">UseOptions::set_immediate_option_flags</span><span class="plain">(</span><span class="identifier">OW</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11">§11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_2"></a><b>§11.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Set the chain given in this word range</span> <span class="cwebmacronumber">11.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">CW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">inter</span><span class="plain">-</span><span class="identifier">pipeline</span><span class="plain">>, 1);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) </span><span class="functiontext">CoreMain::set_inter_pipeline</span><span class="plain">(</span><span class="identifier">CW</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11">§11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_1"></a><b>§11.1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Adjust the minimum setting</span> <span class="cwebmacronumber">11.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> == -1) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">min_setting</span><span class="plain"> != -1)</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UONotNumerical</span><span class="plain">),</span>
|
|
<span class="string">"that 'Use' option does not have a numerical setting"</span><span class="plain">,</span>
|
|
<span class="string">"but is either used or not used."</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">min_setting</span><span class="plain"> >= </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain">)</span>
|
|
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> = </span><span class="identifier">min_setting</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_2"></a><b>§11.1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Deal with the case of an I6 memory setting</span> <span class="cwebmacronumber">11.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = -<<</span><span class="identifier">r</span><span class="plain">>>, </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">));</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">) > 63) {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BadICLIdentifier</span><span class="plain">),</span>
|
|
<span class="string">"that is too long to be an ICL identifier"</span><span class="plain">,</span>
|
|
<span class="string">"so can't be the name of any I6 memory setting."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">i6_memory_setting</span><span class="plain"> *</span><span class="identifier">ms</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ms</span><span class="plain">, </span><span class="reserved">i6_memory_setting</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">, </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>number</span><span class="plain"> < </span><span class="identifier">n</span><span class="plain">) </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>number</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">ms</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">i6_memory_setting</span><span class="plain">);</span>
|
|
<span class="identifier">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">);</span>
|
|
<span class="identifier">ms</span><span class="plain">-</span><span class="element">>number</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">new_identifier</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>For the pragma-like UOs:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo_being_set</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::set_immediate_option_flags</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">) {</span>
|
|
<span class="identifier">uo_being_set</span><span class="plain"> = </span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::set_immediate_option_flags is used in <a href="#SP11_1">§11.1</a>, 3/rst (<a href="3-rst.html#SP4">§4</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>Some use options need to acted on immediately — for instance, if they're
|
|
set in the "Options.txt" file and they affect how Inform parses subsequent
|
|
sentences. The following works through a list of use options, acting on
|
|
those which need immediate action.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">> ::=</span>
|
|
<span class="plain">... | ==> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">preform_lookahead_mode</span><span class="plain">; </span> <span class="comment">match only when looking ahead</span>
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">entry</span><span class="plain">> <</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">tail</span><span class="plain">> | ==> </span><span class="identifier">TRUE</span>
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">entry</span><span class="plain">> ==> </span><span class="identifier">TRUE</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">tail</span><span class="plain">> ::=</span>
|
|
<span class="plain">, </span><span class="identifier">_and</span><span class="plain"> <</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">> |</span>
|
|
<span class="identifier">_</span><span class="plain">,/</span><span class="identifier">and</span><span class="plain"> <</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">></span>
|
|
|
|
<span class="plain"><</span><span class="identifier">immediate</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">entry</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">notable</span><span class="plain">-</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><<span class="cwebmacro">Act on this use option immediately</span> <span class="cwebmacronumber">13.1</span>>
|
|
<span class="plain">......</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13_1"></a><b>§13.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Act on this use option immediately</span> <span class="cwebmacronumber">13.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">[1]) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AUTHORIAL_MODESTY_UO</span><span class="plain">: {</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> =</span>
|
|
<span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span>
|
|
<span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="functiontext">Extensions::Files::set_general_authorial_modesty</span><span class="plain">();</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Extensions::Files::set_authorial_modesty</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DYNAMIC_MEMORY_ALLOCATION_UO</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo_being_set</span><span class="plain">) </span><span class="identifier">dynamic_memory_allocation</span><span class="plain"> = </span><span class="identifier">uo_being_set</span><span class="plain">-</span><span class="element">>minimum_setting_value</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="constant">MEMORY_ECONOMY_UO</span><span class="plain">: </span><span class="identifier">memory_economy_in_force</span><span class="plain"> = </span><span class="identifier">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="constant">NO_DEPRECATED_FEATURES_UO</span><span class="plain">: </span><span class="identifier">no_deprecated_features</span><span class="plain"> = </span><span class="identifier">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="constant">NUMBERED_RULES_UO</span><span class="plain">: </span><span class="functiontext">Rules::set_numbered_rules</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="constant">TELEMETRY_RECORDING_UO</span><span class="plain">: </span><span class="identifier">telemetry_recording</span><span class="plain"> = </span><span class="identifier">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="constant">SCORING_UO</span><span class="plain">: </span><span class="identifier">scoring_option_set</span><span class="plain"> = </span><span class="identifier">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="constant">NO_SCORING_UO</span><span class="plain">: </span><span class="identifier">scoring_option_set</span><span class="plain"> = </span><span class="identifier">FALSE</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="constant">ENGINEERING_NOTATION_UO</span><span class="plain">: </span><span class="identifier">allow_engineering_notation</span><span class="plain"> = </span><span class="identifier">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="constant">UNABBREVIATED_OBJECT_NAMES_UO</span><span class="plain">: </span><span class="identifier">use_exact_parsing_option</span><span class="plain"> = </span><span class="identifier">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="constant">INDEX_FIGURE_THUMBNAILS_UO</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo_being_set</span><span class="plain">) </span><span class="identifier">index_figure_thumbnails</span><span class="plain"> = </span><span class="identifier">uo_being_set</span><span class="plain">-</span><span class="element">>minimum_setting_value</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="constant">GN_TESTING_VERSION_UO</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="constant">UNDO_PREVENTION_UO</span><span class="plain">: </span><span class="identifier">undo_prevention</span><span class="plain"> = </span><span class="identifier">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="constant">SERIAL_COMMA_UO</span><span class="plain">: </span><span class="identifier">serial_comma</span><span class="plain"> = </span><span class="identifier">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="constant">PREDICTABLE_RANDOMISATION_UO</span><span class="plain">: </span><span class="identifier">predictable_randomisation</span><span class="plain"> = </span><span class="identifier">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="constant">COMMAND_LINE_ECHOING_UO</span><span class="plain">: </span><span class="identifier">command_line_echoing</span><span class="plain"> = </span><span class="identifier">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="constant">AMERICAN_DIALECT_UO</span><span class="plain">: </span><span class="identifier">American_dialect</span><span class="plain"> = </span><span class="identifier">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="constant">FULL_LENGTH_ROOM_DESCRIPTIONS_UO</span><span class="plain">: </span><span class="identifier">room_description_level</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ABBREVIATED_ROOM_DESCRIPTIONS_UO</span><span class="plain">: </span><span class="identifier">room_description_level</span><span class="plain"> = 3; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VERBOSE_ROOM_DESCRIPTIONS_UO</span><span class="plain">: </span><span class="identifier">room_description_level</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BRIEF_ROOM_DESCRIPTIONS_UO</span><span class="plain">: </span><span class="identifier">room_description_level</span><span class="plain"> = 1; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SUPERBRIEF_ROOM_DESCRIPTIONS_UO</span><span class="plain">: </span><span class="identifier">room_description_level</span><span class="plain"> = 3; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>It's possible to configure the size of the memory allocation for the run-time
|
|
heap, on which strings, lists and stored actions sit; here's where the level
|
|
is read:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::get_dynamic_memory_allocation</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">dynamic_memory_allocation</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::get_dynamic_memory_allocation is used in 13/rsfk (<a href="13-rsfk.html#SP18_1">§18.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b>This keeps the Contents page of the index from exploding:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::get_index_figure_thumbnails</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">index_figure_thumbnails</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::get_index_figure_thumbnails appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>And this is what the rest of Inform calls to find out whether a particular
|
|
pragma is set:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">category</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
|
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain">)?(</span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain">)))):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">efo</span><span class="plain"> = (</span><span class="identifier">sf</span><span class="plain">)?(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">)):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">category</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 1: </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sf</span><span class="plain">) && (</span><span class="identifier">efo</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 2: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 3: </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sf</span><span class="plain">) && (</span><span class="identifier">efo</span><span class="plain"> == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::uo_set_from is used in <a href="#SP20">§20</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b>Most use options, though, take effect by causing a constant to be defined
|
|
in the I6 code, or more generally by inserting some I6.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">(The flummery about memory economy is to take care of obscure bugs which
|
|
can occur if an attempt to release with an existing story file goes wrong
|
|
and problem messages must be issued.)
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::compile</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) || (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0)) {</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">UO</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
|
<span class="functiontext">TemplateFiles::interpret</span><span class="plain">(</span><span class="identifier">UO</span><span class="plain">,</span>
|
|
<span class="identifier">Lexer::word_raw_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_expansion</span><span class="plain">)) + 1),</span>
|
|
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">UO</span><span class="plain">, </span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::intervention</span><span class="plain">(</span><span class="identifier">EARLY_LINK_STAGE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">UO</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::compile is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>I6 memory settings need to be issued as ICL commands at the top of the I6
|
|
source code: see the DM4 for details.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::compile_icl_commands</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Emit::pragma</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"-s"</span><span class="plain">);</span>
|
|
<span class="reserved">i6_memory_setting</span><span class="plain"> *</span><span class="identifier">ms</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ms</span><span class="plain">, </span><span class="reserved">i6_memory_setting</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"MAX_LOCAL_VARIABLES"</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">VirtualMachines::allow_MAX_LOCAL_VARIABLES</span><span class="plain">() == </span><span class="identifier">FALSE</span><span class="plain">))</span>
|
|
<span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">, </span><span class="string">"$%S=%d"</span><span class="plain">, </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain">, </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>number</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::pragma</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::compile_icl_commands is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>Now for indexing, where there's nothing much to see.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAIN_TEXT_UO_ORIGIN</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">OPTIONS_FILE_UO_ORIGIN</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">EXTENSION_UO_ORIGIN</span><span class="plain"> 3</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::index</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"The following use options are in force:"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAIN_TEXT_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">OPTIONS_FILE_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">) </span><span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">EXTENSION_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> < 0)) </span><span class="identifier">nt</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nt</span><span class="plain"> > 0) {</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Whereas these are not in force:"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 2, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> < 0)) {</span>
|
|
<<span class="cwebmacro">Write in the index line for a use option not taken</span> <span class="cwebmacronumber">19.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (--</span><span class="identifier">nt</span><span class="plain"> > 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::index is used in 26/vm (<a href="26-vm.html#SP18">§18</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP19_1"></a><b>§19.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write in the index line for a use option not taken</span> <span class="cwebmacronumber">19.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">white-space:nowrap\</span><span class="plain">"</span><span class="string">;"</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">"Use %+W."</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;%+W"</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP19">§19</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">category</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> < 0) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">++ == 0) </span><<span class="cwebmacro">Write in the use option subheading</span> <span class="cwebmacronumber">20.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write in the index line for a use option taken</span> <span class="cwebmacronumber">20.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0)) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">++ == 0) </span><<span class="cwebmacro">Write in the use option subheading</span> <span class="cwebmacronumber">20.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write in the index line for a use option taken</span> <span class="cwebmacronumber">20.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::index_options_in_force_from is used in <a href="#SP19">§19</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP20_1"></a><b>§20.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write in the use option subheading</span> <span class="cwebmacronumber">20.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 2, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Set from "</span><span class="plain">);</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">category</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MAIN_TEXT_UO_ORIGIN</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the source text"</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="constant">OPTIONS_FILE_UO_ORIGIN</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the Options.txt configuration file"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"OPTIONSFILE"</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="constant">EXTENSION_UO_ORIGIN</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the "</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the extension "</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP20">§20</a> (twice).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP20_2"></a><b>§20.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write in the index line for a use option taken</span> <span class="cwebmacronumber">20.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 3, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Use %+W"</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" of at least %d"</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain">) </span><span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain">)));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;"</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">"Use %+W of at least %d."</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain">, 2*(</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain">));</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>Double this</i>"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP20">§20</a> (twice).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>A relatively late addition to the design of use options was to make them
|
|
values at run-time, of the kind "use option". We need to provide two routines:
|
|
one to test them, one to print them.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::TestUseOption_routine</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">NO_USE_OPTIONS_HL</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain">));</span>
|
|
<<span class="cwebmacro">Compile the TestUseOption routine</span> <span class="cwebmacronumber">21.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Compile the PrintUseOption routine</span> <span class="cwebmacronumber">21.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::TestUseOption_routine is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21_1"></a><b>§21.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Compile the TestUseOption routine</span> <span class="cwebmacronumber">21.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">TESTUSEOPTION_HL</span><span class="plain">));</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">UO_s</span><span class="plain"> = </span><span class="functiontext">LocalVariables::add_named_call_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"UO"</span><span class="plain">);</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) || (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0)) {</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">IF_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">EQ_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val_symbol</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">UO_s</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">uo</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::rtrue</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">Produce::rfalse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21_2"></a><b>§21.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Compile the PrintUseOption routine</span> <span class="cwebmacronumber">21.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_iname</span><span class="plain">(</span><span class="identifier">K_use_option</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">UO_s</span><span class="plain"> = </span><span class="functiontext">LocalVariables::add_named_call_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"UO"</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">SWITCH_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val_symbol</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">UO_s</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">CASE_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">uo</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">PRINT_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="string">"%W option"</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> > 0)</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="string">" [%d]"</span><span class="plain">, </span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::val_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_verb_verb_exists</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">story_author_given</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ranking_table_given</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::no_verb_verb</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">no_verb_verb_exists</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::story_author_given</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">story_author_given</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::ranking_table_given</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">ranking_table_given</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::configure_template</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bitmap</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scoring_option_set</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">undo_prevention</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 2;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">serial_comma</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 4;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">predictable_randomisation</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 16;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">command_line_echoing</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 32;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_verb_verb_exists</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 64;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">American_dialect</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 128;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">story_author_given</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 256;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ranking_table_given</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain"> += 512;</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">TEMPLATE_CONFIGURATION_BITMAP_HL</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">bitmap</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">TEMPLATE_CONFIGURATION_LOOKMODE_HL</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">room_description_level</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseOptions::no_verb_verb appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function UseOptions::story_author_given appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function UseOptions::ranking_table_given appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function UseOptions::configure_template is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="26-i6i.html">Back to 'Inform 6 Inclusions'</a></li><li><a href="26-lt.html">Continue with 'List Together'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|