1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 12:10:44 +03:00

Revised Neptune language

This commit is contained in:
Graham Nelson 2020-08-19 18:32:30 +01:00
parent f695cd7a4f
commit 568f512b3a
84 changed files with 1765 additions and 1247 deletions

File diff suppressed because one or more lines are too long

View file

@ -441,7 +441,7 @@ interpret no indication of a kind as meaning "object".
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">is_a_kind</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::new_base</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::new_base</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_interpretation_as_infs</span><span class="plain-syntax">[</span><span class="identifier-syntax">v</span><span class="plain-syntax">] = </span><a href="13-kak.html#SP1" class="function-link"><span class="function-syntax">Kinds::Knowledge::as_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_interpretation_as_spec</span><span class="plain-syntax">[</span><span class="identifier-syntax">v</span><span class="plain-syntax">] = </span><a href="14-sp.html#SP1" class="function-link"><span class="function-syntax">Specifications::from_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">is_a_var</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">is_a_const</span><span class="plain-syntax">)) {</span>

View file

@ -228,7 +228,7 @@ the values given there.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::FloatingPoint::uses_floating_point</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> += </span><span class="constant-syntax">TB_COLUMN_REAL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> += </span><span class="constant-syntax">TB_COLUMN_ALLOCATED</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">))) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> = </span><span class="constant-syntax">TB_COLUMN_TOPIC</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">))) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> = </span><span class="constant-syntax">TB_COLUMN_TOPIC</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="19-rsft.html#SP3" class="function-link"><span class="function-syntax">Tables::Support::requires_blanks_bitmap</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> += </span><span class="constant-syntax">TB_COLUMN_NOBLANKBITS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">preserve_row_order_at_run_time</span><span class="plain-syntax">) </span><span class="identifier-syntax">bits</span><span class="plain-syntax"> += </span><span class="constant-syntax">TB_COLUMN_DONTSORTME</span><span class="plain-syntax">;</span>

View file

@ -153,7 +153,7 @@ is run only to call other functions.
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">tfp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFiles::at</span><span class="plain-syntax">(</span><span class="identifier-syntax">index_structure</span><span class="plain-syntax">, </span><span class="identifier-syntax">lc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NeptuneFiles::read_command</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NeptuneFiles::read_command</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cs</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -242,7 +242,7 @@ matched up with the inference subject already existing.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PLUGIN_SET_SUBKIND_NOTIFY</span><span class="plain-syntax">, </span><span class="identifier-syntax">sub</span><span class="plain-syntax">, </span><span class="identifier-syntax">super</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Plugins::Call::complete_model</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Plugins::Call::complete_model</span></span>:<br/>Passes through Major Nodes - <a href="3-ptmn.html#SP2_1">&#167;2.1</a><br/>Complete Model World - <a href="16-cmw.html#SP1_1">&#167;1.1</a>, <a href="16-cmw.html#SP1_2">&#167;1.2</a>, <a href="16-cmw.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Plugins::Call::complete_model</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Plugins::Call::complete_model</span></span>:<br/>Passes through Major Nodes - <a href="3-ptmn.html#SP2_2">&#167;2.2</a><br/>Complete Model World - <a href="16-cmw.html#SP1_1">&#167;1.1</a>, <a href="16-cmw.html#SP1_2">&#167;1.2</a>, <a href="16-cmw.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="16-in.html#SP18" class="function-link"><span class="function-syntax">World::Inferences::diversion_off</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PLUGIN_COMPLETE_MODEL</span><span class="plain-syntax">, </span><span class="identifier-syntax">stage</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -113,11 +113,28 @@ but saves a deal of passing parameters around.
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">last</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse_nodep</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><a href="3-ptmn.html#SP3" class="function-link"><span class="function-syntax">MajorNodes::visit</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">last</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ptmn.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Extend the pass to sentences needed when implicit kinds are set</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ptmn.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Extend the pass to invented sentences from kinds</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ptmn.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Extend the pass to sentences needed when implicit kinds are set</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure pass_state is accessed in 3/ar, 4/tr, 4/uor, 4/dbtr, 5/ass, 5/ass2, 19/tc, 22/pav and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b>Here's a tricky timing problem, or rather, here's the fix for it. Assemblies
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extend the pass to invented sentences from kinds</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="8-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::add_kind_inventions</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">extras</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">assembly_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">extras</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse_nodep_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">extras</span><span class="plain-syntax">, </span><a href="3-ptmn.html#SP3" class="function-link"><span class="function-syntax">MajorNodes::visit</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">last</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">extras</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">assembly_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">extras</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse_nodep_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">extras</span><span class="plain-syntax">, </span><a href="3-ptmn.html#SP3" class="function-link"><span class="function-syntax">MajorNodes::visit</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">last</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ptmn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b>Here's a tricky timing problem, or rather, here's the fix for it. Assemblies
are made when the kinds of objects are set, and they're made by inserting
appropriate sentences. For instance, given the generalisation:
</p>
@ -140,7 +157,7 @@ call the model-maker right now, and prolong pass 2 artificially to pick up
any additional sentences generated.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extend the pass to sentences needed when implicit kinds are set</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extend the pass to sentences needed when implicit kinds are set</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -154,7 +171,7 @@ any additional sentences generated.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">MajorNodes::visit</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">MajorNodes::visit</span></span>:<br/><a href="3-ptmn.html#SP2">&#167;2</a>, <a href="3-ptmn.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">last</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">MajorNodes::visit</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">MajorNodes::visit</span></span>:<br/><a href="3-ptmn.html#SP2">&#167;2</a>, <a href="3-ptmn.html#SP2_1">&#167;2.1</a>, <a href="3-ptmn.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">last</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">assembly_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compilation_unit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cm</span><span class="plain-syntax"> = </span><a href="27-cm.html#SP6" class="function-link"><span class="function-syntax">CompilationUnits::current</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="27-cm.html#SP6" class="function-link"><span class="function-syntax">CompilationUnits::set_current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>

View file

@ -123,7 +123,7 @@ automatically creates it.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner_ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="16-is.html#SP20" class="function-link"><span class="function-syntax">InferenceSubjects::domain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner_infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::convert_to_enumeration</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::convert_to_enumeration</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K</span><span class="plain-syntax">) &amp;&amp; (</span><a href="13-kak.html#SP2" class="function-link"><span class="function-syntax">Kinds::Knowledge::has_properties</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-npa.html#SP1_1_1" class="named-paragraph-link"><span class="named-paragraph">Disallow this kind as a new owner of a value property</span><span class="named-paragraph-number">1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="15-vp.html#SP1" class="function-link"><span class="function-syntax">Properties::Valued::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>

View file

@ -276,7 +276,7 @@ be done later on: see the "Instance Counts" plugin.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::has_named_constant_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to make an instance value for impossible kind"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">enumeration_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">enumeration_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cp</span><span class="plain-syntax">) </span><a href="6-ins.html#SP10" class="function-link"><span class="function-syntax">Instances::register_as_adjectival_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">cp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>

View file

@ -2772,7 +2772,7 @@ does not throw a problem message as being a bar which is out of range
<span class="plain-syntax"> </span><span class="string-syntax">"and not the built-in ones like 'number' or 'time'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">owner</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::convert_to_unit</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::convert_to_unit</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_LPEnumeration</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this is a kind of value which already has named values"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"so it can't have a basically numerical form as well."</span><span class="plain-syntax">);</span>
@ -2917,7 +2917,7 @@ not really distort matters.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">integer_scaling</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::convert_to_real</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::convert_to_real</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Scalings::convert_to_real</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scaling</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
</pre>

View file

@ -446,6 +446,10 @@ also makes it easier for us to manipulate the results.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NodeType::has_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">), </span><span class="identifier-syntax">PHRASAL_NFLAG</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::add_kind_inventions</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::add_kind_inventions</span></span>:<br/>Passes through Major Nodes - <a href="3-ptmn.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StarTemplates::transcribe_all</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. The assertion-maker's invariant. </b>Hmm: "The Assertion-Maker's Invariant" might make a good magic-realism
novel, in which an enigmatic wise man of Samarkand builds an ingenious box
@ -455,7 +459,7 @@ be such that their head nodes each pass this test:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span></span>:<br/>Assertions - <a href="5-ass.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span></span>:<br/>Assertions - <a href="5-ass.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NodeType::has_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -464,7 +468,7 @@ be such that their head nodes each pass this test:
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::verify</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::verify</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_4">&#167;2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::verify</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::verify</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_4">&#167;2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_integrity</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>

View file

@ -352,7 +352,7 @@ make that explicit: for instance, "taking" becomes "the taking action".
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTION_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Created action: %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>

View file

@ -86,6 +86,7 @@ which use this module:
<span class="definition-keyword">enum</span> <span class="constant-syntax">kind_constructor_casting_rule_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">kind_constructor_instance_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">unit_sequence_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">star_invention_CLASS</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">dimensional_rule</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
@ -98,6 +99,7 @@ which use this module:
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor_comparison_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor_instance</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">unit_sequence</span><span class="plain-syntax">, </span><span class="constant-syntax">50</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">star_invention</span><span class="plain-syntax">)</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
</p>
@ -205,7 +207,7 @@ to some routine of her own, gazumping this one.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">km</li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="2-knd.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">km</li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="2-knd.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -903,7 +903,7 @@ usage.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-tlok.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresscurrent">dk</li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="2-uk.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-tlok.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresscurrent">dk</li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="2-uk.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -300,7 +300,7 @@ it is. There is no need for speed here.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">FamiliarKinds::is_known</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">FamiliarKinds::is_known</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6_2">&#167;6.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">FamiliarKinds::is_known</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">FamiliarKinds::is_known</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5_2">&#167;5.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-fk.html#SP11" class="function-link"><span class="function-syntax">FamiliarKinds::known_con</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sn</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-fk.html#SP11" class="function-link"><span class="function-syntax">FamiliarKinds::known_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sn</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -339,7 +339,7 @@ but are indexed together.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-knd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresscurrent">fk</li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="2-tlok.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-knd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresscurrent">fk</li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="2-tlok.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -93,7 +93,7 @@ MathJax = {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kc_args</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_KIND_CONSTRUCTION_ARITY</span><span class="plain-syntax">]; </span><span class="comment-syntax"> used if arity positive, or for </span><span class="extract"><span class="extract-syntax">CON_KIND_VARIABLE</span></span>
<span class="plain-syntax">} </span><span class="reserved-syntax">kind</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure kind is accessed in 2/fk, 2/tlok, 2/uk, 3/fv and here.</li></ul>
<ul class="endnotetexts"><li>The structure kind is accessed in 2/fk, 2/tlok, 2/uk, 3/fv, 4/st and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Some kinds, like <span class="extract"><span class="extract-syntax">number</span></span>, are atomic while others, like <span class="extract"><span class="extract-syntax">relation of numbers to texts</span></span>,
are composite. Each <a href="2-knd.html#SP1" class="internal">kind</a> object is formally a "construction" resulting from
applying a <a href="4-kc2.html#SP2" class="internal">kind_constructor</a> to other kinds. Each different possible constructor
@ -181,7 +181,7 @@ we can then use that same pointer on all subsequent requests.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::base_construction</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::base_construction</span></span>:<br/><a href="2-knd.html#SP10">&#167;10</a>, <a href="2-knd.html#SP20">&#167;20</a><br/>Describing Kinds - <a href="2-dk.html#SP10">&#167;10</a><br/>Neptune Syntax - <a href="4-ns.html#SP6_2">&#167;6.2</a><br/>Kind Commands - <a href="4-kc.html#SP1_4">&#167;1.4</a><br/>Kind Constructors - <a href="4-kc2.html#SP2">&#167;2</a>, <a href="4-kc2.html#SP9">&#167;9</a>, <a href="4-kc2.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::base_construction</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::base_construction</span></span>:<br/><a href="2-knd.html#SP10">&#167;10</a>, <a href="2-knd.html#SP20">&#167;20</a><br/>Describing Kinds - <a href="2-dk.html#SP10">&#167;10</a><br/>Neptune Syntax - <a href="4-ns.html#SP5_2">&#167;5.2</a><br/>Star Templates - <a href="4-st.html#SP4">&#167;4</a><br/>Kind Commands - <a href="4-kc.html#SP1_4">&#167;1.4</a><br/>Kind Constructors - <a href="4-kc2.html#SP2">&#167;2</a>, <a href="4-kc2.html#SP9">&#167;9</a>, <a href="4-kc2.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"impossible construction"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">con</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CON_KIND_VARIABLE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">con</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CON_INTERMEDIATE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"forbidden construction"</span><span class="plain-syntax">);</span>
@ -372,7 +372,7 @@ drawing up the index, and so on.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::get_construct</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::get_construct</span></span>:<br/><a href="2-knd.html#SP17">&#167;17</a>, <a href="2-knd.html#SP20">&#167;20</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP12_1">&#167;12.1</a><br/>Describing Kinds - <a href="2-dk.html#SP24">&#167;24</a>, <a href="2-dk.html#SP24_1">&#167;24.1</a>, <a href="2-dk.html#SP24_1_1">&#167;24.1.1</a>, <a href="2-dk.html#SP25">&#167;25</a><br/>Using Kinds - <a href="2-uk.html#SP17">&#167;17</a>, <a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP11">&#167;11</a><br/>Neptune Syntax - <a href="4-ns.html#SP6_2">&#167;6.2</a><br/>Kind Constructors - <a href="4-kc2.html#SP9">&#167;9</a>, <a href="4-kc2.html#SP17">&#167;17</a>, <a href="4-kc2.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::get_construct</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::get_construct</span></span>:<br/><a href="2-knd.html#SP17">&#167;17</a>, <a href="2-knd.html#SP20">&#167;20</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP12_1">&#167;12.1</a><br/>Describing Kinds - <a href="2-dk.html#SP24">&#167;24</a>, <a href="2-dk.html#SP24_1">&#167;24.1</a>, <a href="2-dk.html#SP24_1_1">&#167;24.1.1</a>, <a href="2-dk.html#SP25">&#167;25</a><br/>Using Kinds - <a href="2-uk.html#SP17">&#167;17</a>, <a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP11">&#167;11</a><br/>Neptune Syntax - <a href="4-ns.html#SP5_2">&#167;5.2</a><br/>Kind Constructors - <a href="4-kc2.html#SP9">&#167;9</a>, <a href="4-kc2.html#SP17">&#167;17</a>, <a href="4-kc2.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -565,13 +565,13 @@ is the super-kind ("value", "thing").
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::new_base</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::new_base</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROTECTED_MODEL_PROCEDURE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PROTECTED_MODEL_PROCEDURE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="2-knd.html#SP6" class="function-link"><span class="function-syntax">Kinds::base_construction</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="4-kc2.html#SP9" class="function-link"><span class="function-syntax">Kinds::Constructors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><a href="2-knd.html#SP11" class="function-link"><span class="function-syntax">Kinds::get_construct</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">super</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"#NEW"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-kc2.html#SP9" class="function-link"><span class="function-syntax">Kinds::Constructors::new</span></a><span class="plain-syntax">(</span><a href="2-knd.html#SP11" class="function-link"><span class="function-syntax">Kinds::get_construct</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">super</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"#NEW"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BASE_CONSTRUCTOR_GRP</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-knd.html#SP20_1" class="named-paragraph-link"><span class="named-paragraph">Use the source-text name to attach a noun to the constructor</span><span class="named-paragraph-number">20.1</span></a></span><span class="plain-syntax">;</span>
@ -709,7 +709,7 @@ to the kind "number" even if that's the current value of X.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::eq</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Kinds::eq</span></span>:<br/><a href="2-knd.html#SP17">&#167;17</a>, <a href="2-knd.html#SP18">&#167;18</a>, <a href="2-knd.html#SP21">&#167;21</a>, <a href="2-knd.html#SP25">&#167;25</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP6">&#167;6</a>, <a href="2-tlok.html#SP7_1">&#167;7.1</a>, <a href="2-tlok.html#SP7_2">&#167;7.2</a>, <a href="2-tlok.html#SP12_1">&#167;12.1</a>, <a href="2-tlok.html#SP12_2">&#167;12.2</a>, <a href="2-tlok.html#SP12_5">&#167;12.5</a><br/>Describing Kinds - <a href="2-dk.html#SP24_1_2">&#167;24.1.2</a>, <a href="2-dk.html#SP24_2">&#167;24.2</a>, <a href="2-dk.html#SP24_3_1">&#167;24.3.1</a>, <a href="2-dk.html#SP24_3_2">&#167;24.3.2</a><br/>Using Kinds - <a href="2-uk.html#SP2">&#167;2</a>, <a href="2-uk.html#SP4">&#167;4</a>, <a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP15">&#167;15</a>, <a href="3-dmn.html#SP20">&#167;20</a>, <a href="3-dmn.html#SP21">&#167;21</a>, <a href="3-dmn.html#SP24">&#167;24</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2_1">&#167;30.2.1</a>, <a href="3-dmn.html#SP30_2_2">&#167;30.2.2</a>, <a href="3-dmn.html#SP32_2">&#167;32.2</a><br/>Floating-Point Values - <a href="3-fv.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::eq</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Kinds::eq</span></span>:<br/><a href="2-knd.html#SP17">&#167;17</a>, <a href="2-knd.html#SP18">&#167;18</a>, <a href="2-knd.html#SP21">&#167;21</a>, <a href="2-knd.html#SP25">&#167;25</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP6">&#167;6</a>, <a href="2-tlok.html#SP7_1">&#167;7.1</a>, <a href="2-tlok.html#SP7_2">&#167;7.2</a>, <a href="2-tlok.html#SP12_1">&#167;12.1</a>, <a href="2-tlok.html#SP12_2">&#167;12.2</a>, <a href="2-tlok.html#SP12_5">&#167;12.5</a><br/>Describing Kinds - <a href="2-dk.html#SP24_1_2">&#167;24.1.2</a>, <a href="2-dk.html#SP24_2">&#167;24.2</a>, <a href="2-dk.html#SP24_3_1">&#167;24.3.1</a>, <a href="2-dk.html#SP24_3_2">&#167;24.3.2</a><br/>Using Kinds - <a href="2-uk.html#SP2">&#167;2</a>, <a href="2-uk.html#SP4">&#167;4</a>, <a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP15">&#167;15</a>, <a href="3-dmn.html#SP20">&#167;20</a>, <a href="3-dmn.html#SP21">&#167;21</a>, <a href="3-dmn.html#SP24">&#167;24</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2_1">&#167;30.2.1</a>, <a href="3-dmn.html#SP30_2_2">&#167;30.2.2</a>, <a href="3-dmn.html#SP32_2">&#167;32.2</a><br/>Floating-Point Values - <a href="3-fv.html#SP1">&#167;1</a><br/>Star Templates - <a href="4-st.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax"> != </span><span class="identifier-syntax">K2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -738,7 +738,7 @@ to the kind "number" even if that's the current value of X.
<span class="definition-keyword">define</span> <span class="constant-syntax">NEVER_MATCH</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> provably incorrect at compile time</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::conforms_to</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Kinds::conforms_to</span></span>:<br/><a href="2-knd.html#SP18">&#167;18</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP7">&#167;7</a><br/>Using Kinds - <a href="2-uk.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::conforms_to</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Kinds::conforms_to</span></span>:<br/><a href="2-knd.html#SP18">&#167;18</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP7">&#167;7</a><br/>Using Kinds - <a href="2-uk.html#SP2">&#167;2</a><br/>Star Templates - <a href="4-st.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-tlok.html#SP12" class="function-link"><span class="function-syntax">Latticework::order_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) == </span><span class="constant-syntax">ALWAYS_MATCH</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -759,7 +759,7 @@ to the kind "number" even if that's the current value of X.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-km.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">knd</li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="2-fk.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="1-km.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">knd</li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="2-fk.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -690,7 +690,7 @@ getting in the way, so these logging functions can be helpful:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-fk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresscurrent">tlok</li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="2-dk.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-fk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresscurrent">tlok</li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresssection"><a href="2-uk.html">uk</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="2-dk.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -143,7 +143,7 @@ kind of kind, like "arithmetic value":
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_kind_of_kind</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_kind_of_kind</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">KIND_OF_KIND_GRP</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -153,7 +153,7 @@ checks that we aren't doing that:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::definite</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::definite</span></span>:<br/>Star Templates - <a href="4-st.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::is_definite</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">arity</span><span class="plain-syntax"> = </span><a href="4-kc2.html#SP16" class="function-link"><span class="function-syntax">Kinds::Constructors::arity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
@ -224,7 +224,7 @@ has been used, the matter is settled and there is no going back.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_uncertainly_defined</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_uncertainly_defined</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_uncertainly_defined</span></span>:<br/><a href="2-uk.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_incompletely_defined</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -233,7 +233,7 @@ has been used, the matter is settled and there is no going back.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</span></span>:<br/><a href="2-uk.html#SP28">&#167;28</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</span></span>:<br/><a href="2-uk.html#SP15">&#167;15</a>, <a href="2-uk.html#SP28">&#167;28</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::is_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -244,25 +244,25 @@ if the kind was already a unit or was successfully converted into one,
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_unit</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_unit</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-kc2.html#SP13" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_unit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-kc2.html#SP13" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_unit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>And similarly:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></span>:<br/><a href="2-uk.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><a href="4-kc2.html#SP13" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></span>:<br/><a href="2-uk.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><a href="4-kc2.html#SP13" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>And similarly to switch from integer to real arithmetic.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_real</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><a href="4-kc2.html#SP14" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_real</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::convert_to_real</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><a href="4-kc2.html#SP14" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_real</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The instances of an enumeration have the values \(1, 2, 3, ..., N\) at
@ -271,9 +271,9 @@ by the next instance to be created.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-uk.html#SP9" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-uk.html#SP9" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_free_value</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>
</pre>
@ -289,12 +289,12 @@ by the next instance to be created.
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. (C) Compatibility with other kinds. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</span></span>:<br/>Kinds - <a href="2-knd.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</span></span>:<br/>Kinds - <a href="2-knd.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"set_superkind_set_at for null kind"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">superkind_set_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</span></span>:<br/>Kinds - <a href="2-knd.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</span></span>:<br/>Kinds - <a href="2-knd.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">superkind_set_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -307,7 +307,8 @@ kilopascals" might be a notation for a kind where constants are not named.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::has_named_constant_values</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">created_with_assertions</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-uk.html#SP7" class="function-link"><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-uk.html#SP6" class="function-link"><span class="function-syntax">Kinds::Behaviour::is_uncertainly_defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -376,29 +377,29 @@ track of dimensions, and the following routines connect the code in the
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span></span>:<br/><a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP15">&#167;15</a>, <a href="3-dmn.html#SP28_3">&#167;28.3</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2">&#167;30.2</a>, <a href="3-dmn.html#SP31">&#167;31</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span></span>:<br/><a href="2-uk.html#SP28">&#167;28</a><br/>Dimensions - <a href="3-dmn.html#SP15">&#167;15</a>, <a href="3-dmn.html#SP28_3">&#167;28.3</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2">&#167;30.2</a>, <a href="3-dmn.html#SP31">&#167;31</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::is_arithmetic</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">unit_sequence</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP24_1">&#167;24.1</a><br/>Dimensions - <a href="3-dmn.html#SP23">&#167;23</a>, <a href="3-dmn.html#SP28_2">&#167;28.2</a>, <a href="3-dmn.html#SP28_3">&#167;28.3</a>, <a href="3-dmn.html#SP28_4">&#167;28.4</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2">&#167;30.2</a>, <a href="3-dmn.html#SP31">&#167;31</a>, <a href="3-dmn.html#SP32">&#167;32</a>, <a href="3-dmn.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">unit_sequence</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP24_1">&#167;24.1</a><br/>Dimensions - <a href="3-dmn.html#SP23">&#167;23</a>, <a href="3-dmn.html#SP28_2">&#167;28.2</a>, <a href="3-dmn.html#SP28_3">&#167;28.3</a>, <a href="3-dmn.html#SP28_4">&#167;28.4</a>, <a href="3-dmn.html#SP29">&#167;29</a>, <a href="3-dmn.html#SP30_2">&#167;30.2</a>, <a href="3-dmn.html#SP31">&#167;31</a>, <a href="3-dmn.html#SP32">&#167;32</a>, <a href="3-dmn.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-uk.html#SP19" class="function-link"><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">construct</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CON_INTERMEDIATE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">intermediate_result</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dimensional_form</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::test_if_derived</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::test_if_derived</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP28_1">&#167;28.1</a>, <a href="3-dmn.html#SP29">&#167;29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::test_if_derived</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::test_if_derived</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP28_1">&#167;28.1</a>, <a href="3-dmn.html#SP29">&#167;29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dimensional_form_fixed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::now_derived</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::now_derived</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP28_2">&#167;28.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::now_derived</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::now_derived</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP28_2">&#167;28.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't derive null kind"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dimensional_form_fixed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::scale_factor</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::scale_factor</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP32_4">&#167;32.4</a><br/>Floating-Point Values - <a href="3-fv.html#SP7">&#167;7</a><br/>Scaled Arithmetic Values - <a href="3-sav.html#SP2">&#167;2</a>, <a href="3-sav.html#SP3">&#167;3</a>, <a href="3-sav.html#SP4">&#167;4</a>, <a href="3-sav.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::scale_factor</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::scale_factor</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP32_4">&#167;32.4</a><br/>Floating-Point Values - <a href="3-fv.html#SP7">&#167;7</a><br/>Scaled Arithmetic Values - <a href="3-sav.html#SP2">&#167;2</a>, <a href="3-sav.html#SP3">&#167;3</a>, <a href="3-sav.html#SP4">&#167;4</a>, <a href="3-sav.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">intermediate_result</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-dmn.html#SP25" class="function-link"><span class="function-syntax">Kinds::Dimensions::us_get_scaling_factor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">intermediate_result</span><span class="plain-syntax">);</span>
@ -414,7 +415,7 @@ operations can be applied, and if so, what kind the result has.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">dimensional_rules</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dim_rules</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_dim_rules</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP13">&#167;13</a>, <a href="3-dmn.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">dimensional_rules</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dim_rules</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_dim_rules</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP13">&#167;13</a>, <a href="3-dmn.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dim_rules</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -422,7 +423,7 @@ operations can be applied, and if so, what kind the result has.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. (H) Representing this kind at run-time. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_name_in_template_code</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_name_in_template_code</span></span>:<br/>Kinds - <a href="2-knd.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_name_in_template_code</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_name_in_template_code</span></span>:<br/>Kinds - <a href="2-knd.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"UNKNOWN_NT"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name_in_template_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -487,7 +488,7 @@ sufficient to apply <span class="extract"><span class="extract-syntax">~=</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_distinguisher</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">distinguisher</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">distinguishing_routine</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
@ -656,7 +657,7 @@ not, it returns <span class="extract"><span class="extract-syntax">NULL</span></
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::offers_I6_GPR</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::offers_I6_GPR</span></span>:<br/><a href="2-uk.html#SP31">&#167;31</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::offers_I6_GPR</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::offers_I6_GPR</span></span>:<br/><a href="2-uk.html#SP31">&#167;31</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::offers_I6_GPR</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -688,7 +689,7 @@ parsing names of objects, but not as a grammar token in its own right.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_recognition_only_GPR</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">recognition_only_GPR</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">recognition_routine</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
@ -722,12 +723,12 @@ values for each kind:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_default_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP30_2_1">&#167;30.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP30_2_1">&#167;30.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_minimum_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP30_2_2">&#167;30.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span></span>:<br/>Dimensions - <a href="3-dmn.html#SP30_2_2">&#167;30.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_maximum_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -758,7 +759,7 @@ text used only on the index pages, and not existing at run-time.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-dk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresscurrent">uk</li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="3-dmn.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-dk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-knd.html">knd</a></li><li class="progresssection"><a href="2-fk.html">fk</a></li><li class="progresssection"><a href="2-tlok.html">tlok</a></li><li class="progresssection"><a href="2-dk.html">dk</a></li><li class="progresscurrent">uk</li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="3-dmn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1319,7 +1319,7 @@ the physics but on the arithmetic method being used.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-dmn.html#SP32">&#167;32</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-uk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">dmn</li><li class="progresssection"><a href="3-fv.html">fv</a></li><li class="progresssection"><a href="3-sav.html">sav</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="3-fv.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-uk.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">dmn</li><li class="progresssection"><a href="3-fv.html">fv</a></li><li class="progresssection"><a href="3-sav.html">sav</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="3-fv.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -220,7 +220,7 @@ integer versions may have been scaled.
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-dmn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-dmn.html">dmn</a></li><li class="progresscurrent">fv</li><li class="progresssection"><a href="3-sav.html">sav</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="3-sav.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-dmn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-dmn.html">dmn</a></li><li class="progresscurrent">fv</li><li class="progresssection"><a href="3-sav.html">sav</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="3-sav.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1226,7 +1226,7 @@ digit after the decimal point should be <span class="extract"><span class="extra
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sav.html#SP25_1">&#167;25.1</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-fv.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-dmn.html">dmn</a></li><li class="progresssection"><a href="3-fv.html">fv</a></li><li class="progresscurrent">sav</li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="4-nf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-fv.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-dmn.html">dmn</a></li><li class="progresssection"><a href="3-fv.html">fv</a></li><li class="progresscurrent">sav</li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="4-abgtn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -0,0 +1,366 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>A Brief Guide to Neptune</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script src="http://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="../docs-assets/Bigfoot.js"></script>
<link href="../docs-assets/Bigfoot.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="index.html"><span class="selectedlink">kinds</span></a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'A Brief Guide to Neptune' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">kinds</a></li><li><a href="index.html#4">Chapter 4: Constructors</a></li><li><b>A Brief Guide to Neptune</b></li></ul></div>
<p class="purpose">A manual for the mini-language used in Neptune files.</p>
<ul class="toc"><li><a href="4-abgtn.html#SP1">&#167;1. Purpose</a></li><li><a href="4-abgtn.html#SP2">&#167;2. Comments and white space</a></li><li><a href="4-abgtn.html#SP3">&#167;3. Declarations</a></li><li><a href="4-abgtn.html#SP7">&#167;7. Commands</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Purpose. </b>Neptune is a simple mini-language for defining the built-in kinds of Inform.
Each kit of Inter code can supply one or more Neptune files: for example,
<span class="extract"><span class="extract-syntax">WorldModelKit</span></span> supplies a file called <span class="extract"><span class="extract-syntax">Scenes.neptune</span></span> which defines the
built-in base kind "scene".
</p>
<p class="commentary">The name is nothing to do with the planet and derives from the Place Neptune,
Carcassonne, where these files were first implemented in August 2007. The
syntax was made more legible in 2020.
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Comments and white space. </b>Lines consisting of white space or whose first non-white space character is
<span class="extract"><span class="extract-syntax">!</span></span> are ignored as comments, but note that a <span class="extract"><span class="extract-syntax">!</span></span> later in a line which already
has other content will not be treated as a comment.
</p>
<p class="commentary">All white space at the start or end of a line is similarly ignored. Indentation
can be used for clarity, but has no significance.
</p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Declarations. </b>Otherwise, a Neptune file is a series of declarations. Each must begin with
a header line which ends in an open brace, and must conclude with a line
consisting only of a close brace.
</p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>A constructor is created with two initial keywords, and then its identifier
name. The first keyword must be either <span class="extract"><span class="extract-syntax">new</span></span> or <span class="extract"><span class="extract-syntax">builtin</span></span>. The only difference
here is that <span class="extract"><span class="extract-syntax">builtin</span></span> must be used if the constructor being made is one of
the <a href="2-fk.html" class="internal">Familiar Kinds</a>, whose identifier has to correspond to one of those
hardwired into the code of this module. <span class="extract"><span class="extract-syntax">new</span></span> must be used in all other cases.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
</p>
<p class="commentary">The second keyword must be one of the following:
</p>
<ul class="items"><li>&#9679; <span class="extract"><span class="extract-syntax">base</span></span> for a new base kind, like <span class="extract"><span class="extract-syntax">NUMBER_TY</span></span>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">constructor</span></span> for a proper constructor, like <span class="extract"><span class="extract-syntax">LIST_OF_TY</span></span>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">protocol</span></span> for a kind of kind, like <span class="extract"><span class="extract-syntax">SAYABLE_VALUE_TY</span></span>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">punctuation</span></span> for a constructor with no independent meaning, such as <span class="extract"><span class="extract-syntax">INTERMEDIATE_TY</span></span>.
</li></ul>
<p class="commentary">For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">builtin protocol SAYABLE_VALUE_TY {</span>
<span class="plain-syntax"> conforms-to: STORED_VALUE_TY</span>
<span class="plain-syntax"> singular: sayable value</span>
<span class="plain-syntax"> plural: sayable values</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> The distinction really only exists as a mnemonic - it reminds us that it
wouldn't be safe to change the identifier without also changing the compiler.
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>A "macro" is a set of commands which could be applied to any constructor.
It will have no effect unless applied, which happens only by a special command
(see below) or, for certain macro names, when the code in this module applies
it automatically.
</p>
<p class="commentary">For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">macro #REAL {</span>
<span class="plain-syntax"> conforms-to: REAL_ARITHMETIC_VALUE_TY</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary">This declares a macro called <span class="extract"><span class="extract-syntax">#REAL</span></span>. All macros have names beginning with a
sharp sign, and continuing with capital letters.
</p>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>An "invention" is a piece of source text to be added to whatever is being
compiled.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> Invention names begin with an asterisk. For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">invention *UNDERSTOOD-VARIABLE {</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which varies.</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary">Note that the text is not quite literal, because it can contain wildcards like
<span class="extract"><span class="extract-syntax">&lt;kind&gt;</span></span>, which expands to the name of the kind in question: for instance, we
might get "number understood is a number which varies". The legal wildcards are:
</p>
<ul class="items"><li>&#9679; &lt;kind&gt;, expanding to the singular name of the kind.
</li><li>&#9679; &lt;lower-case-kind&gt;, the same but always using lower case.
</li><li>&#9679; &lt;kind-weak-ID&gt;, the weak ID number for the base kind.
</li><li>&#9679; &lt;printing-routine&gt;, the identifier of its printing routine.
</li><li>&#9679; &lt;comparison-routine&gt;, similarly.
</li></ul>
<p class="commentary">There are a few limitations on what template text can include. Firstly,
nothing with angle brackets in, except where a wildcard appears. Secondly,
each sentence must end at the end of a line, and similarly the colon for
any rule or other definition. Thus this template would fail:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">invention *UNDERSTOOD-VARIABLE {</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which</span>
<span class="plain-syntax"> varies. To judge &lt;kind&gt;: say "I judge [&lt;kind&gt; understood]."</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary">because the first sentence ends in the middle of the second line, and the
colon dividing the phrase header from its definition is also mid-line. The
template must be reformatted thus to work:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">invention *UNDERSTOOD-VARIABLE {</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which varies.</span>
<span class="plain-syntax"> To judge &lt;kind&gt;:</span>
<span class="plain-syntax"> say "I judge [&lt;kind&gt; understood]."</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="footnotetexts"><li class="footnote" id="fn:2"><p class="inwebfootnote"><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> Inventions are not elegant and have now mostly been phased out, except to
create the "K understood" variables for each base kind conforming to
<span class="extract"><span class="extract-syntax">understandable value</span></span>, using the example invention shown here.
<a href="#fnref:2" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Commands. </b>Inside a macro or a constructor declaration, each line consists of a single
command, always written in the form <span class="extract"><span class="extract-syntax">command: value</span></span>. If the command occurs
in a constructor, it applies to that constructor; if in a macro, it is applied
to whatever constructor the macro is being applied to (if it ever is).
</p>
<p class="commentary">All commands are a single word, though sometimes hyphenated. White space
either side of the <span class="extract"><span class="extract-syntax">value</span></span> is trimmed away. <span class="extract"><span class="extract-syntax">value</span></span> is not allowed to be empty,
or to contain only white space.
</p>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Constructor declarations are conventionally written in four groups of commands,
though this is just convention. Let's start with the first block, which names
the constructor and locates it in the lattice.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">conforms-to: K</span></span> declares that the new kind conforms to the existing kind <span class="extract"><span class="extract-syntax">K</span></span>.
Multiple conformances can be given, but there is seldom any need to, because if
<span class="extract"><span class="extract-syntax">K</span></span> then conforms to <span class="extract"><span class="extract-syntax">L</span></span>, our new kind will do so too. In general, new base
kinds should declare their conformance to the most specific protocol they can.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">compatible-with: K</span></span> declares that <span class="extract"><span class="extract-syntax">K</span></span> is compatible with the new kind (note:
not the other way round), in a way needing explicit conversion code at run-time:
i.e., <span class="extract"><span class="extract-syntax">K</span></span> does not conform to the new kind, but can be converted to it.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">singular</span></span> and <span class="extract"><span class="extract-syntax">plural</span></span> specify singular and plural natural language names for
the constructor. If these are omitted, it will be impossible to refer to in
source text, but that doesn't necessarily make the constructor useless: the
compiler can still generate it internally. Multiple legal wordings can be
given, divided by vertical strokes. Names of the construction kinds can be
written as <span class="extract"><span class="extract-syntax">k</span></span> and <span class="extract"><span class="extract-syntax">l</span></span> (note lower case). So, for example, <span class="extract"><span class="extract-syntax">list of k</span></span>.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">terms</span></span> is used only for proper constructors. For a unary constructor, it will
give one term; for binary, two terms, separated by a comma. Each term should
be <span class="extract"><span class="extract-syntax">covariant</span></span> or <span class="extract"><span class="extract-syntax">contravariant</span></span>, with an ootional keyword after it:
</p>
<ul class="items"><li>&#9679; <span class="extract"><span class="extract-syntax">optional</span></span> means that it is legal to name the constructor without naming
this term. For example, "activity" is a legal way to say "activity on nothing".
</li><li>&#9679; <span class="extract"><span class="extract-syntax">list</span></span> means that it is legal to give a list of kinds here, in brackets
if there are some, or <span class="extract"><span class="extract-syntax">nothing</span></span> if there are not.
</li></ul>
<p class="commentary"><span class="extract"><span class="extract-syntax">invent-source-text: *NAME</span></span> causes new source text to be invented. <span class="extract"><span class="extract-syntax">*NAME</span></span>
must be an invention which has already been declared. If this command is applied
to a protocol, such as <span class="extract"><span class="extract-syntax">arithmetic value</span></span>, then the invention will be made not
for the protocol itself, but for every base kind which conforms to it: this can
result in a stream of similar-looking sentences.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">apply-macro: #NAME</span></span> does what it says, really. Here, however, it applies to
protocols just the same as to everything else.
</p>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The second group concerns behaviours of the kinds in question, or methods
for compiling their data. They are in general meaningless for protocols or
other kinds which don't refer to data stored at run-time.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">default-value</span></span> is the default value for an uninitialised variable of this
kind. If this is not set, problem messages may be generated for such variables.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">can-coincide-with-property</span></span> is either <span class="extract"><span class="extract-syntax">yes</span></span> or <span class="extract"><span class="extract-syntax">no</span></span> (default <span class="extract"><span class="extract-syntax">no</span></span>), and means
what it says: the name of this kind is allowed also to be the name of a property
which takes values in this kind.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">can-exchange</span></span> is either <span class="extract"><span class="extract-syntax">yes</span></span> or <span class="extract"><span class="extract-syntax">no</span></span> (default <span class="extract"><span class="extract-syntax">no</span></span>), and means that data of
this kind can be serialised &mdash; printed out as text into an external file &mdash;
and read into a different program, but with the same meaning.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">constant-compilation-method</span></span> tells Inform how to compile constants of this
kind. The possible options are: <span class="extract"><span class="extract-syntax">none</span></span>, <span class="extract"><span class="extract-syntax">literal</span></span>, <span class="extract"><span class="extract-syntax">quantitative</span></span> and <span class="extract"><span class="extract-syntax">special</span></span>,
the default being <span class="extract"><span class="extract-syntax">none</span></span>:
</p>
<ul class="items"><li>&#9679; <span class="extract"><span class="extract-syntax">none</span></span> means there are no constants of this kind.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">literal</span></span> means constants are literals in Inform source text, such as 65 or 11:12 PM.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">quantitative</span></span> means they are named instances, as for enumerations.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">special</span></span> means that the compiler needs to use ad-hoc code to handle
this kind; unless it contains that code, of course, this can't be used.
</li></ul>
<p class="commentary"><span class="extract"><span class="extract-syntax">loop-domain-schema</span></span> is an Inter schema for iterating through the valid
instances of the kind.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">comparison-schema</span></span> is an Inter schema for comparing a value of this kind
with a value of a named other kind to which it does not conform. It should
take the form <span class="extract"><span class="extract-syntax">NAME&gt;&gt;&gt;SCHEMA</span></span>, where <span class="extract"><span class="extract-syntax">NAME</span></span> is the other kind, and <span class="extract"><span class="extract-syntax">SCHEMA</span></span>
the Inter code.
</p>
<p class="commentary">If the kind conforms to <span class="extract"><span class="extract-syntax">POINTER_VALUE_TY</span></span> then it stores values on the heap,
rather than in single words of memory, and in that case three more properies
become meaningful: <span class="extract"><span class="extract-syntax">multiple-block</span></span> is either <span class="extract"><span class="extract-syntax">yes</span></span> or <span class="extract"><span class="extract-syntax">no</span></span> (default <span class="extract"><span class="extract-syntax">no</span></span>), and
allows data to expand arbitrarily in size if necessary; <span class="extract"><span class="extract-syntax">heap-size-estimate</span></span>
should be a power of 2, and gives an initial allocation size in words; and
<span class="extract"><span class="extract-syntax">small-block-size</span></span> optionally allows a small block (in words) to point to the
data (thus adding further indirection).
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">is-incompletely-defined</span></span> is either <span class="extract"><span class="extract-syntax">yes</span></span> or <span class="extract"><span class="extract-syntax">no</span></span> (default <span class="extract"><span class="extract-syntax">no</span></span>), and is a
short-term device used to handle kinds which have been created but not yet
turned into units or enumerations.
</p>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The third group supplies identifier names for Inter routines to perform run-time
duties related to the kind. Inform will simply assume such a routine is present;
this will usually be defined in the same kit which is supplying the Neptune file.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">comparison-routine</span></span> determines which of two values of the kind is greater.
The default is <span class="extract"><span class="extract-syntax">UnsignedCompare</span></span>. The special value <span class="extract"><span class="extract-syntax">signed</span></span> can be used to
ask for signed comparison of the 2s-complement run-time values, which is a
little quicker than calling a routine.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">printing-routine</span></span> prints out a textual representation of a value of the given
kind, and <span class="extract"><span class="extract-syntax">printing-routine-for-debugging</span></span> the same but for purposes of the
debugging output called for by the ACTIONS command. These have no effect for
kinds which do not conform to <span class="extract"><span class="extract-syntax">sayable value</span></span>.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">parsing-routine</span></span> is a "general parsing routine", which assists the run-time
command parser. <span class="extract"><span class="extract-syntax">distinguishing-routine</span></span>, similarly, determines whether two
things can be distinguished by textual commands. These have no effect in Basic
Inform projects, or for kinds which do not conform to <span class="extract"><span class="extract-syntax">understandable value</span></span>.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">recognition-routine</span></span> is a "recognition-only general parsing routine". Again
this has no effect in Basic Inform projects. It is only used for kinds which
do not conform to <span class="extract"><span class="extract-syntax">understandable value</span></span>, but can nevertheless be used when
the command parser allows things to be named by their property values, and
those values have the kind in question.
</p>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The final group is concerned only with documentation and indexing, and thus
has no effect on compilation.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">documentation-reference</span></span> is a reference keyword to the Inform documentation,
which can make be used to improve problem messages or the index by giving little
blue help buttons next to the kind's name.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">index-priority</span></span> is a non-negative integer. It is by default 100 for base kinds
and constructors, 0 for protocols and punctuation. 0 in fact means "omit from the
index", which is otherwise grouped in ascending order &mdash; i.e., lowest priority
numbers first.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">index-default-value</span></span> can be used in place of the <span class="extract"><span class="extract-syntax">default-value</span></span> in the index,
to make it look prettier.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">index-maximum-value</span></span> can similarly override the indexer's automated attempt to
print the largest representable value, and similarly for <span class="extract"><span class="extract-syntax">index-minimum-value</span></span>.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">indexed-grey-if-empty</span></span> is either <span class="extract"><span class="extract-syntax">yes</span></span> or <span class="extract"><span class="extract-syntax">no</span></span> (default <span class="extract"><span class="extract-syntax">no</span></span>), and specifies
that if the kind has no instances then it should be tinted grey in the index.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">specification-text</span></span> provides the value of the specification pseudo-property
(an oddball feature of the Inform language which seemed like a good idea at
the time). This should be plain text, not HTML.
</p>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-sav.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">abgtn</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-nf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -69,8 +69,7 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KindCommands::apply</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">KindCommands::apply</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a><br/>Macros - <a href="4-mcr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KindCommands::apply</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">KindCommands::apply</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a><br/>Macros - <a href="4-mcr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"apply: %s (%d/%d/%S/%S) to %d/%S\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_command</span><span class="plain-syntax">,</span>
@ -98,10 +97,10 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tcc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">invent_source_text_KCC:</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP4" class="function-link"><span class="function-syntax">StarTemplates::transcribe</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::note</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">apply_macro_KCC:</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">macro_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">macro_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -123,7 +122,6 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_BOOLEAN_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">indexed_grey_if_empty</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_BOOLEAN_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">is_incompletely_defined</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_BOOLEAN_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">multiple_block</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_BOOLEAN_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">created_with_assertions</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_INTEGER_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">heap_size_estimate</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_INTEGER_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">index_priority</span><span class="plain-syntax">)</span>
@ -132,14 +130,14 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_CCM_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_compilation_method</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">default_value</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">distinguisher</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">distinguishing_routine</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">documentation_reference</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_GPR_identifier</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">index_default_value</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">index_maximum_value</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">index_minimum_value</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop_domain_schema</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">recognition_only_GPR</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">recognition_routine</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SET_TEXTUAL_FIELD</span><span class="plain-syntax">(</span><span class="identifier-syntax">specification_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
@ -148,7 +146,7 @@ function togglePopup(material_id) {
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tcc</span><span class="plain-syntax"> == </span><span class="constant-syntax">cast_KCC</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tcc</span><span class="plain-syntax"> == </span><span class="constant-syntax">compatible_with_KCC</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"SNIPPET_TY"</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Plugins::Manage::plugged_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
@ -187,9 +185,6 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">terms_KCC:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-kc.html#SP1_4_1" class="named-paragraph-link"><span class="named-paragraph">Parse the constructor arity text</span><span class="named-paragraph-number">1.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">description_KCC:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constructor_description</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">comparison_routine_KCC:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">31</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"overlong identifier"</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
@ -200,7 +195,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"overlong identifier"</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">print_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing_routine_actions_KCC:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing_routine_for_debugging_KCC:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">31</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"overlong identifier"</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ACTIONS_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">);</span>
@ -211,8 +206,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">length</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-knd.html#SP22" class="function-link"><span class="function-syntax">Kinds::mark_vocabulary_as_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">array</span><span class="plain-syntax">[0], </span><a href="2-knd.html#SP6" class="function-link"><span class="function-syntax">Kinds::base_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">length</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">length</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="constant-syntax">KIND_SLOW_MC</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::mark_vocabulary</span><span class="plain-syntax">(</span><span class="identifier-syntax">array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="function-syntax">&lt;k-kind&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -246,10 +240,6 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">modifying_adjective_KCC:</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the modifying-adjective syntax has been withdrawn"</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-kc.html#SP1">&#167;1</a>.</li></ul>
@ -282,7 +272,7 @@ function togglePopup(material_id) {
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-kc.html#SP1_4">&#167;1.4</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-st.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresscurrent">kc</li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-kc2.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-st.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresscurrent">kc</li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-kc2.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -72,7 +72,7 @@ function togglePopup(material_id) {
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PUNCTUATION_GRP</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> used in the construction of other kinds only</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">KIND_OF_KIND_GRP</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> such as </span><span class="extract"><span class="extract-syntax">arithmetic value</span></span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> such as </span><span class="extract"><span class="extract-syntax">arithmetic value</span></span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BASE_CONSTRUCTOR_GRP</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> such as </span><span class="extract"><span class="extract-syntax">number</span></span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> with positive arity, such as "list of ..."</span>
</pre>
@ -111,7 +111,6 @@ set by commands in Neptune files, others set by calls from Inform.
<span class="plain-syntax"> </span><span class="comment-syntax"> D: how constant values of this kind are expressed</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">literal_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ways_to_write_literals</span><span class="plain-syntax">; </span><span class="comment-syntax"> list of ways to write this</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">created_with_assertions</span><span class="plain-syntax">; </span><span class="comment-syntax"> such as "Train Arrival is a scene."</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">named_values_created_with_table</span><span class="plain-syntax">; </span><span class="comment-syntax"> alternatively...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_free_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> to make distinguishable instances of this kind</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">constant_compilation_method</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_CCM</span></span><span class="comment-syntax"> values</span>
@ -144,7 +143,7 @@ set by commands in Neptune files, others set by calls from Inform.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple_block</span><span class="plain-syntax">; </span><span class="comment-syntax"> TRUE for flexible-size values stored on the heap</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">heap_size_estimate</span><span class="plain-syntax">; </span><span class="comment-syntax"> typical number of bytes used</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">can_exchange</span><span class="plain-syntax">; </span><span class="comment-syntax"> with external files and therefore other story files</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">distinguisher</span><span class="plain-syntax">; </span><span class="comment-syntax"> Inter routine to see if values distinguishable</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">distinguishing_routine</span><span class="plain-syntax">; </span><span class="comment-syntax"> Inter routine to see if values distinguishable</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor_comparison_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_comparison_schema</span><span class="plain-syntax">; </span><span class="comment-syntax"> list of these</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop_domain_schema</span><span class="plain-syntax">; </span><span class="comment-syntax"> how to compile a loop over the instances</span>
@ -165,11 +164,10 @@ set by commands in Neptune files, others set by calls from Inform.
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar_verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">understand_as_values</span><span class="plain-syntax">; </span><span class="comment-syntax"> used when parsing such values</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">needs_GPR</span><span class="plain-syntax">; </span><span class="comment-syntax"> a GPR is actually required to be compiled</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">explicit_GPR_identifier</span><span class="plain-syntax">; </span><span class="comment-syntax"> routine name, when not compiled automatically</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recognition_only_GPR</span><span class="plain-syntax">; </span><span class="comment-syntax"> for recognising an explicit value as preposition</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recognition_routine</span><span class="plain-syntax">; </span><span class="comment-syntax"> for recognising an explicit value as preposition</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> K: indexing and documentation</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">specification_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> text for parse_node</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constructor_description</span><span class="plain-syntax">; </span><span class="comment-syntax"> text used in index pages</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">specification_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> text for pseudo-property</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_default_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> and its description in the Kinds index</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_maximum_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_minimum_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
@ -268,7 +266,7 @@ then <span class="extract"><span class="extract-syntax">CON_VALUE</span></span>
</blockquote>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Constructors::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::new</span></span>:<br/>Kinds - <a href="2-knd.html#SP20">&#167;20</a><br/>Neptune Syntax - <a href="4-ns.html#SP6_2">&#167;6.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Constructors::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::new</span></span>:<br/>Kinds - <a href="2-knd.html#SP20">&#167;20</a><br/>Neptune Syntax - <a href="4-ns.html#SP5_2">&#167;5.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">initialisation_macro</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> **</span><span class="identifier-syntax">pC</span><span class="plain-syntax"> = </span><a href="2-fk.html#SP11" class="function-link"><span class="function-syntax">FamiliarKinds::known_con</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">source_name</span><span class="plain-syntax">);</span>
@ -330,7 +328,6 @@ we apply any defaults set in Neptune files.
<span class="plain-syntax"> </span><span class="comment-syntax"> D: how constant values of this kind are expressed</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ways_to_write_literals</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">created_with_assertions</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">named_values_created_with_table</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_free_value</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_compilation_method</span><span class="plain-syntax"> = </span><span class="constant-syntax">NONE_CCM</span><span class="plain-syntax">;</span>
@ -368,7 +365,7 @@ we apply any defaults set in Neptune files.
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">heap_size_estimate</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">can_exchange</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_comparison_schema</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">distinguisher</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">distinguishing_routine</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">loop_domain_schema</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> J: printing and parsing values at run-time</span>
@ -394,16 +391,15 @@ we apply any defaults set in Neptune files.
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">understand_as_values</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">needs_GPR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">explicit_GPR_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">recognition_only_GPR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">recognition_routine</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> K: indexing and documentation</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">specification_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constructor_description</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_default_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"--"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_maximum_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"--"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_minimum_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"--"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_priority</span><span class="plain-syntax"> = </span><span class="constant-syntax">LOWEST_INDEX_PRIORITY</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PUNCTUATION_GRP</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">KIND_OF_KIND_GRP</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PUNCTUATION_GRP</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">index_priority</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">linguistic</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">indexed_grey_if_empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -412,15 +408,14 @@ we apply any defaults set in Neptune files.
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">group</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUNCTUATION_GRP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#PUNCTUATION"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_OF_KIND_GRP:set_defaults</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#PROTOCOL"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROTOCOL_GRP:set_defaults</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#PROTOCOL"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASE_CONSTRUCTOR_GRP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#BASE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROPER_CONSTRUCTOR_GRP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#CONSTRUCTOR"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax">) </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax">) </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">set_defaults</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">initialisation_macro</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">initialisation_macro</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">initialisation_macro</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-kc2.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b>However, if we create our constructor as a subkind, like so:
@ -462,7 +457,7 @@ of the constructor:
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dt_tag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::get_name</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::get_name</span></span>:<br/><a href="4-kc2.html#SP11">&#167;11</a><br/>Describing Kinds - <a href="2-dk.html#SP14">&#167;14</a><br/>Using Kinds - <a href="2-uk.html#SP1">&#167;1</a><br/>Star Templates - <a href="4-st.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::get_name</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::get_name</span></span>:<br/><a href="4-kc2.html#SP11">&#167;11</a><br/>Describing Kinds - <a href="2-dk.html#SP14">&#167;14</a><br/>Using Kinds - <a href="2-uk.html#SP1">&#167;1</a><br/>Star Templates - <a href="4-st.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dt_tag</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dt_tag</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">);</span>
@ -572,23 +567,20 @@ require running macros in the kind interpreter:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_unit</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_unit</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_unit</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_unit</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_incompletely_defined</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#UNIT"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#UNIT"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::is_arithmetic</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., if it succeeded</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_incompletely_defined</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#ENUMERATION"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#ENUMERATION"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">linguistic</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#LINGUISTIC"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#LINGUISTIC"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-kc2.html#SP17" class="function-link"><span class="function-syntax">Kinds::Constructors::is_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., if it succeeded</span>
@ -599,9 +591,8 @@ require running macros in the kind interpreter:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_real</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_real</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#REAL"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::convert_to_real</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::convert_to_real</span></span>:<br/>Using Kinds - <a href="2-uk.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP2" class="function-link"><span class="function-syntax">NeptuneMacros::play_back</span></a><span class="plain-syntax">(</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"#REAL"</span><span class="plain-syntax">), </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>A few base kinds are marked as "linguistic", which simply enables us to fence
@ -621,7 +612,7 @@ them tidily off in the index.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::arity</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::arity</span></span>:<br/>Kinds - <a href="2-knd.html#SP6">&#167;6</a>, <a href="2-knd.html#SP6_3">&#167;6.3</a>, <a href="2-knd.html#SP13">&#167;13</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP7">&#167;7</a>, <a href="2-tlok.html#SP12_4">&#167;12.4</a><br/>Describing Kinds - <a href="2-dk.html#SP12">&#167;12</a>, <a href="2-dk.html#SP12_1">&#167;12.1</a>, <a href="2-dk.html#SP24_3">&#167;24.3</a>, <a href="2-dk.html#SP24_3_2">&#167;24.3.2</a><br/>Using Kinds - <a href="2-uk.html#SP4">&#167;4</a><br/>Star Templates - <a href="4-st.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::arity</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Kinds::Constructors::arity</span></span>:<br/>Kinds - <a href="2-knd.html#SP6">&#167;6</a>, <a href="2-knd.html#SP6_3">&#167;6.3</a>, <a href="2-knd.html#SP13">&#167;13</a><br/>The Lattice of Kinds - <a href="2-tlok.html#SP7">&#167;7</a>, <a href="2-tlok.html#SP12_4">&#167;12.4</a><br/>Describing Kinds - <a href="2-dk.html#SP12">&#167;12</a>, <a href="2-dk.html#SP12_1">&#167;12.1</a>, <a href="2-dk.html#SP24_3">&#167;24.3</a>, <a href="2-dk.html#SP24_3_2">&#167;24.3.2</a><br/>Using Kinds - <a href="2-uk.html#SP4">&#167;4</a><br/>Star Templates - <a href="4-st.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constructor_arity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
@ -686,7 +677,7 @@ ought to ask questions about kinds instead (see "Using Kinds"). However:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. Cast and instance lists. </b>Each constructor has a list of other constructors (all of the <span class="extract"><span class="extract-syntax">KIND_OF_KIND_GRP</span></span>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. Cast and instance lists. </b>Each constructor has a list of other constructors (all of the <span class="extract"><span class="extract-syntax">PROTOCOL_GRP</span></span>
group) which it's an instance of: value, word value, arithmetic value, and so on.
</p>
@ -760,7 +751,7 @@ group or <span class="extract"><span class="extract-syntax">PROPER_CONSTRUCTOR_G
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-kc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresscurrent">kc2</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-kc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresscurrent">kc2</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -87,7 +87,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">tmd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">NeptuneMacros::parse_name</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::parse_name</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6_12">&#167;6.12</a><br/>Kind Constructors - <a href="4-kc2.html#SP9_1">&#167;9.1</a>, <a href="4-kc2.html#SP13">&#167;13</a>, <a href="4-kc2.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">NeptuneMacros::parse_name</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::parse_name</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5_12">&#167;5.12</a><br/>Kind Constructors - <a href="4-kc2.html#SP9_1">&#167;9.1</a>, <a href="4-kc2.html#SP13">&#167;13</a>, <a href="4-kc2.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tmd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">tmd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">tmd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_name</span><span class="plain-syntax">))</span>
@ -95,12 +95,12 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::recording</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::recording</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a><br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::recording</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::recording</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a><br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_km</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::begin</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::begin</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"duplicate definition of kind command macro"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
@ -116,7 +116,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_km</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_line</span><span class="plain-syntax">[</span><span class="identifier-syntax">current_km</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_line_count</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::end</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::end</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::end</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::end</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_km</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"ended kind macro outside one"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_km</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -128,20 +128,20 @@ commands in sequence to the relevant kind.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::play_back</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::play_back</span></span>:<br/>Kind Commands - <a href="4-kc.html#SP1_1">&#167;1.1</a><br/>Kind Constructors - <a href="4-kc2.html#SP9_1">&#167;9.1</a>, <a href="4-kc2.html#SP13">&#167;13</a>, <a href="4-kc2.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">macro</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneMacros::play_back</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">NeptuneMacros::play_back</span></span>:<br/>Kind Commands - <a href="4-kc.html#SP1_1">&#167;1.1</a><br/>Kind Constructors - <a href="4-kc2.html#SP9_1">&#167;9.1</a>, <a href="4-kc2.html#SP13">&#167;13</a>, <a href="4-kc2.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">macro</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">macro</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no such kind macro to play back"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Macro %S on %S (%d lines)\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">macro</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name_in_template_code</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_line_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;macro-&gt;</span><span class="element-syntax">kind_macro_line_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><a href="4-kc.html#SP1" class="function-link"><span class="function-syntax">KindCommands::apply</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_line</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="identifier-syntax">con</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-kc.html#SP1" class="function-link"><span class="function-syntax">KindCommands::apply</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_line</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="identifier-syntax">con</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Macro %S ended\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kind_macro_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-nf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresscurrent">mcr</li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-ns.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-ns.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresscurrent">mcr</li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-st.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -73,30 +73,28 @@ where these files were first conceived and implemented.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read kinds file"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::load_kinds_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::load_kinds_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cs</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::load_kinds_helper</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::read_command</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::read_command</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::read_command</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::read_command</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">) == </span><span class="character-syntax">'!'</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip blanks and comments</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax"> = </span><a href="4-ns.html#SP6" class="function-link"><span class="function-syntax">NeptuneSyntax::parse_command</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax"> = </span><a href="4-ns.html#SP5" class="function-link"><span class="function-syntax">NeptuneSyntax::parse_command</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::recording</span></a><span class="plain-syntax">()) </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::record_into_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax">) </span><a href="4-kc.html#SP1" class="function-link"><span class="function-syntax">KindCommands::apply</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax">) </span><a href="4-kc.html#SP1" class="function-link"><span class="function-syntax">KindCommands::apply</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command describes unspecified kind"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -116,7 +114,7 @@ the Inform GUI can at least display them, if not very elegantly.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::error</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneFiles::error</span></span>:<br/><a href="4-nf.html#SP1">&#167;1</a><br/>Macros - <a href="4-mcr.html#SP1">&#167;1</a>, <a href="4-mcr.html#SP2">&#167;2</a><br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a>, <a href="4-ns.html#SP6_2">&#167;6.2</a>, <a href="4-ns.html#SP6_3">&#167;6.3</a>, <a href="4-ns.html#SP6_4">&#167;6.4</a>, <a href="4-ns.html#SP6_5">&#167;6.5</a>, <a href="4-ns.html#SP6_6">&#167;6.6</a>, <a href="4-ns.html#SP6_8">&#167;6.8</a>, <a href="4-ns.html#SP6_11">&#167;6.11</a>, <a href="4-ns.html#SP6_12">&#167;6.12</a><br/>Star Templates - <a href="4-st.html#SP3">&#167;3</a>, <a href="4-st.html#SP4">&#167;4</a>, <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>, <a href="4-st.html#SP7">&#167;7</a><br/>Kind Commands - <a href="4-kc.html#SP1">&#167;1</a>, <a href="4-kc.html#SP1_4">&#167;1.4</a>, <a href="4-kc.html#SP1_4_1">&#167;1.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">error</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneFiles::error</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneFiles::error</span></span>:<br/><a href="4-nf.html#SP1">&#167;1</a><br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a>, <a href="4-ns.html#SP5_2">&#167;5.2</a>, <a href="4-ns.html#SP5_3">&#167;5.3</a>, <a href="4-ns.html#SP5_4">&#167;5.4</a>, <a href="4-ns.html#SP5_5">&#167;5.5</a>, <a href="4-ns.html#SP5_6">&#167;5.6</a>, <a href="4-ns.html#SP5_8">&#167;5.8</a>, <a href="4-ns.html#SP5_11">&#167;5.11</a>, <a href="4-ns.html#SP5_12">&#167;5.12</a><br/>Macros - <a href="4-mcr.html#SP1">&#167;1</a>, <a href="4-mcr.html#SP2">&#167;2</a><br/>Star Templates - <a href="4-st.html#SP2">&#167;2</a>, <a href="4-st.html#SP5">&#167;5</a>, <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>, <a href="4-st.html#SP8">&#167;8</a><br/>Kind Commands - <a href="4-kc.html#SP1">&#167;1</a>, <a href="4-kc.html#SP1_4">&#167;1.4</a>, <a href="4-kc.html#SP1_4_1">&#167;1.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">error</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">)</span>
@ -131,7 +129,7 @@ the Inform GUI can at least display them, if not very elegantly.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-sav.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">nf</li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-mcr.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-abgtn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresscurrent">nf</li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-ns.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -66,36 +66,9 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">kinds</a></li><li><a href="index.html#4">Chapter 4: Constructors</a></li><li><b>Neptune Syntax</b></li></ul></div>
<p class="purpose">To parse individual commands from Neptune files.</p>
<ul class="toc"><li><a href="4-ns.html#SP1">&#167;1. Specification of the Neptune language</a></li><li><a href="4-ns.html#SP2">&#167;2. The command set</a></li><li><a href="4-ns.html#SP6">&#167;6. Parsing single kind commands</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="4-ns.html#SP1">&#167;1. The command set</a></li><li><a href="4-ns.html#SP5">&#167;5. Parsing single kind commands</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Specification of the Neptune language. </b>Everyone loves a mini-language, so here is one. At the top level:
</p>
<ul class="items"><li>(a) Lines consisting of white space or whose first non-white space character is
<span class="extract"><span class="extract-syntax">!</span></span> are ignored as comments.
</li><li>(b) A line ending with a colon <span class="extract"><span class="extract-syntax">:</span></span> opens a new block. The text before the colon
is the title of the block, except that the first character indicates its type:
<ul class="items"><li>(1) An asterisk means that the block is a "star template": for instance,
<span class="extract"><span class="extract-syntax">*PRINTING-ROUTINE:</span></span> says the block defines a template called <span class="extract"><span class="extract-syntax">PRINTING-ROUTINE</span></span>.
A template consists of Inform 7 source text which extends as far as the next
<span class="extract"><span class="extract-syntax">*END</span></span> line.
</li><li>(2) A sharp sign <span class="extract"><span class="extract-syntax">#</span></span> means that the block is a macro definition. For
instance, <span class="extract"><span class="extract-syntax">#UNIT:</span></span> says the block defines a template called <span class="extract"><span class="extract-syntax">UNIT</span></span>. A macro
is just a sequence of lines holding kind commands which continues to
the beginning of the next block, or the end of the file.
</li><li>(3) And otherwise the block is a kind definition, but the optional opening
character <span class="extract"><span class="extract-syntax">+</span></span> marks the kind as one which Inform requires the existence of.
Thus <span class="extract"><span class="extract-syntax">+NUMBER_TY:</span></span>, since Inform will crash if the template doesn't set this
kind up, but <span class="extract"><span class="extract-syntax">BOOJUMS_TY:</span></span> would validly declare a new kind called
<span class="extract"><span class="extract-syntax">BOOJUMS_TY</span></span> which isn't special to any of Inform's internals. The <span class="extract"><span class="extract-syntax">+</span></span> signs
are there as a help for hackers looking at the I6 template and wondering what
they can safely monkey with.
</li></ul>
<li>(c) That just leaves the lines within blocks. Each of these is a usage of one
of the commands, given in the form <span class="extract"><span class="extract-syntax">operation: operand</span></span>, i.e., divided by a
colon and some optional spacing.
</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. The command set. </b>Each different operation is defined with a block like so:
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. The command set. </b>Each different operation is defined with a block like so:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -106,7 +79,7 @@ colon and some optional spacing.
<span class="plain-syntax">} </span><span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure kind_command_definition is accessed in 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The operands have different types, and the possibilities are given here:
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The operands have different types, and the possibilities are given here:
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_KCA</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> there's no operand</span>
@ -119,24 +92,23 @@ colon and some optional spacing.
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEMPLATE_KCA</span><span class="plain-syntax"> </span><span class="comment-syntax"> the name of a template whose definition is given in the file</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MACRO_KCA</span><span class="plain-syntax"> </span><span class="comment-syntax"> the name of a macro whose definition is given in the file</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>And, to cut to the chase, here is the complete table of commands:
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And, to cut to the chase, here is the complete table of commands:
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">apply_macro_KCC</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">invent_source_text_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">can_coincide_with_property_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">can_exchange_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cast_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">compatible_with_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">comparison_routine_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">comparison_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">constant_compilation_method_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">default_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">description_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">distinguisher_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">distinguishing_routine_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">documentation_reference_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">explicit_GPR_identifier_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">heap_size_estimate_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">printing_routine_actions_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">printing_routine_for_debugging_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">printing_routine_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_default_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_maximum_value_KCC</span>
@ -145,68 +117,60 @@ colon and some optional spacing.
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_priority_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">conforms_to_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">is_incompletely_defined_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">is_template_variable_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">loop_domain_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">modifying_adjective_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">multiple_block_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">created_with_assertions_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">plural_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">recognition_only_GPR_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">recognition_routine_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">singular_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">specification_text_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">small_block_size_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">template_variable_number_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">terms_KCC</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax"> </span><span class="identifier-syntax">table_of_kind_commands</span><span class="plain-syntax">[] = {</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"can-coincide-with-property"</span><span class="plain-syntax">, </span><span class="constant-syntax">can_coincide_with_property_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"can-exchange"</span><span class="plain-syntax">, </span><span class="constant-syntax">can_exchange_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"indexed-grey-if-empty"</span><span class="plain-syntax">, </span><span class="constant-syntax">indexed_grey_if_empty_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"is-incompletely-defined"</span><span class="plain-syntax">, </span><span class="constant-syntax">is_incompletely_defined_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"is-template-variable"</span><span class="plain-syntax">, </span><span class="constant-syntax">is_template_variable_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"multiple-block"</span><span class="plain-syntax">, </span><span class="constant-syntax">multiple_block_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"created-with-assertions"</span><span class="plain-syntax">, </span><span class="constant-syntax">created_with_assertions_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"can-coincide-with-property"</span><span class="plain-syntax">, </span><span class="constant-syntax">can_coincide_with_property_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"can-exchange"</span><span class="plain-syntax">, </span><span class="constant-syntax">can_exchange_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"indexed-grey-if-empty"</span><span class="plain-syntax">, </span><span class="constant-syntax">indexed_grey_if_empty_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"is-incompletely-defined"</span><span class="plain-syntax">, </span><span class="constant-syntax">is_incompletely_defined_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"multiple-block"</span><span class="plain-syntax">, </span><span class="constant-syntax">multiple_block_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"constant-compilation-method"</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_compilation_method_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CCM_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"constant-compilation-method"</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_compilation_method_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CCM_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"comparison-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">comparison_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"default-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">default_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"description"</span><span class="plain-syntax">, </span><span class="constant-syntax">description_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"distinguisher"</span><span class="plain-syntax">, </span><span class="constant-syntax">distinguisher_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"documentation-reference"</span><span class="plain-syntax">, </span><span class="constant-syntax">documentation_reference_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"parsing-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">explicit_GPR_identifier_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"printing-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">printing_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"printing-routine-actions"</span><span class="plain-syntax">, </span><span class="constant-syntax">printing_routine_actions_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-default-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_default_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-maximum-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_maximum_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-minimum-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_minimum_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"loop-domain-schema"</span><span class="plain-syntax">, </span><span class="constant-syntax">loop_domain_schema_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"recognition-only-GPR"</span><span class="plain-syntax">, </span><span class="constant-syntax">recognition_only_GPR_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"specification-text"</span><span class="plain-syntax">, </span><span class="constant-syntax">specification_text_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"comparison-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">comparison_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"default-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">default_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"distinguishing-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">distinguishing_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"documentation-reference"</span><span class="plain-syntax">, </span><span class="constant-syntax">documentation_reference_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"parsing-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">explicit_GPR_identifier_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"printing-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">printing_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"printing-routine-for-debugging"</span><span class="plain-syntax">, </span><span class="constant-syntax">printing_routine_for_debugging_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-default-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_default_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-maximum-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_maximum_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-minimum-value"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_minimum_value_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"loop-domain-schema"</span><span class="plain-syntax">, </span><span class="constant-syntax">loop_domain_schema_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"recognition-routine"</span><span class="plain-syntax">, </span><span class="constant-syntax">recognition_routine_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"specification-text"</span><span class="plain-syntax">, </span><span class="constant-syntax">specification_text_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"cast"</span><span class="plain-syntax">, </span><span class="constant-syntax">cast_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"comparison-schema"</span><span class="plain-syntax">, </span><span class="constant-syntax">comparison_schema_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"conforms-to"</span><span class="plain-syntax">, </span><span class="constant-syntax">conforms_to_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"comparison-schema"</span><span class="plain-syntax">, </span><span class="constant-syntax">comparison_schema_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"compatible-with"</span><span class="plain-syntax">, </span><span class="constant-syntax">compatible_with_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"conforms-to"</span><span class="plain-syntax">, </span><span class="constant-syntax">conforms_to_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"modifying-adjective"</span><span class="plain-syntax">, </span><span class="constant-syntax">modifying_adjective_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"plural"</span><span class="plain-syntax">, </span><span class="constant-syntax">plural_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"singular"</span><span class="plain-syntax">, </span><span class="constant-syntax">singular_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"plural"</span><span class="plain-syntax">, </span><span class="constant-syntax">plural_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"singular"</span><span class="plain-syntax">, </span><span class="constant-syntax">singular_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"terms"</span><span class="plain-syntax">, </span><span class="constant-syntax">terms_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"heap-size-estimate"</span><span class="plain-syntax">, </span><span class="constant-syntax">heap_size_estimate_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-priority"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_priority_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"small-block-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">small_block_size_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"template-variable-number"</span><span class="plain-syntax">, </span><span class="constant-syntax">template_variable_number_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"terms"</span><span class="plain-syntax">, </span><span class="constant-syntax">terms_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"heap-size-estimate"</span><span class="plain-syntax">, </span><span class="constant-syntax">heap_size_estimate_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"index-priority"</span><span class="plain-syntax">, </span><span class="constant-syntax">index_priority_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"small-block-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">small_block_size_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"invent-source-text"</span><span class="plain-syntax">, </span><span class="constant-syntax">invent_source_text_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEMPLATE_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"invent-source-text"</span><span class="plain-syntax">, </span><span class="constant-syntax">invent_source_text_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">TEMPLATE_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"apply-macro"</span><span class="plain-syntax">, </span><span class="constant-syntax">apply_macro_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">MACRO_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="string-syntax">"apply-macro"</span><span class="plain-syntax">, </span><span class="constant-syntax">apply_macro_KCC</span><span class="plain-syntax">, </span><span class="constant-syntax">MACRO_KCA</span><span class="plain-syntax"> },</span>
<span class="plain-syntax"> { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">NO_KCA</span><span class="plain-syntax"> }</span>
<span class="plain-syntax">};</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>When processing a command, we parse it into one of the following structures:
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>When processing a command, we parse it into one of the following structures:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -225,25 +189,25 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">completed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure single_kind_command is accessed in 4/nf, 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Parsing single kind commands. </b>Each command is read in as text, parsed and stored into a modest structure.
<ul class="endnotetexts"><li>The structure single_kind_command is accessed in 4/nf, 4/st, 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Parsing single kind commands. </b>Each command is read in as text, parsed and stored into a modest structure.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneSyntax::parse_command</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneSyntax::parse_command</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneSyntax::parse_command</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneSyntax::parse_command</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Initialise the STC to a blank command</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Initialise the STC to a blank command</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"}"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) </span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::recording</span></a><span class="plain-syntax">()) </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::record_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::record_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">) == </span><span class="character-syntax">'{'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax">) {</span>
@ -253,7 +217,7 @@ colon and some optional spacing.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"invention (%C+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP3" class="function-link"><span class="function-syntax">StarTemplates::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"macro (#%C+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"(%C+) (%C+) (%C+) {"</span><span class="plain-syntax">)) {</span>
@ -266,7 +230,7 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"punctuation"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PUNCTUATION_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"protocol"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">KIND_OF_KIND_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"protocol"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"base"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">BASE_CONSTRUCTOR_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"constructor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
@ -274,7 +238,7 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"must declare 'variable', 'protocol', 'base' or 'constructor'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Create a new constructor</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Create a new constructor</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -290,19 +254,19 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">6.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Identify the command being used</span><span class="named-paragraph-number">6.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Identify the command being used</span><span class="named-paragraph-number">5.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">operand_type</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOOLEAN_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">6.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CCM_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_6" class="named-paragraph-link"><span class="named-paragraph">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">6.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTRUCTOR_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">6.10</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MACRO_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_12" class="named-paragraph-link"><span class="named-paragraph">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">6.12</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMERIC_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_9" class="named-paragraph-link"><span class="named-paragraph">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">6.9</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEMPLATE_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_11" class="named-paragraph-link"><span class="named-paragraph">Parse a template name argument for a kind command</span><span class="named-paragraph-number">6.11</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_7" class="named-paragraph-link"><span class="named-paragraph">Parse a textual argument for a kind command</span><span class="named-paragraph-number">6.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VOCABULARY_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP6_8" class="named-paragraph-link"><span class="named-paragraph">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">6.8</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOOLEAN_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5" class="named-paragraph-link"><span class="named-paragraph">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">5.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CCM_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_6" class="named-paragraph-link"><span class="named-paragraph">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">5.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTRUCTOR_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">5.10</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MACRO_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_12" class="named-paragraph-link"><span class="named-paragraph">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">5.12</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMERIC_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_9" class="named-paragraph-link"><span class="named-paragraph">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">5.9</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEMPLATE_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_11" class="named-paragraph-link"><span class="named-paragraph">Parse a template name argument for a kind command</span><span class="named-paragraph-number">5.11</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_7" class="named-paragraph-link"><span class="named-paragraph">Parse a textual argument for a kind command</span><span class="named-paragraph-number">5.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VOCABULARY_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_8" class="named-paragraph-link"><span class="named-paragraph">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">5.8</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">)</span>
@ -310,7 +274,7 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialise the STC to a blank command</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialise the STC to a blank command</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -327,8 +291,8 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax"> = </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new constructor</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new constructor</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -338,7 +302,7 @@ colon and some optional spacing.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">do_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command describes already-known kind"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-kc2.html#SP9" class="function-link"><span class="function-syntax">Kinds::Constructors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><a href="2-knd.html#SP11" class="function-link"><span class="function-syntax">Kinds::get_construct</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">group</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-kc2.html#SP9" class="function-link"><span class="function-syntax">Kinds::Constructors::new</span></a><span class="plain-syntax">(</span><a href="2-knd.html#SP11" class="function-link"><span class="function-syntax">Kinds::get_construct</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">group</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEW_BASE_KINDS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CON_KIND_VARIABLE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CON_INTERMEDIATE</span><span class="plain-syntax">)) {</span>
@ -347,12 +311,12 @@ colon and some optional spacing.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b>Spaces and tabs after the colon are skipped; so a textual argument cannot
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b>Spaces and tabs after the colon are skipped; so a textual argument cannot
begin with those characters, but that doesn't matter for the things we need.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">6.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -365,15 +329,15 @@ begin with those characters, but that doesn't matter for the things we need.
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command without argument"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_4" class="paragraph-anchor"></a><b>&#167;6.4. </b>The following is clearly inefficient, but is not worth optimising. It makes
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4" class="paragraph-anchor"></a><b>&#167;5.4. </b>The following is clearly inefficient, but is not worth optimising. It makes
about 20 string comparisons per command, and there are about 600 commands in a
typical run of Inform, so the total cost is about 12,000 comparisons with
quite small strings as arguments &mdash; which is negligible for our purposes,
so we neglect it.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Identify the command being used</span><span class="named-paragraph-number">6.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Identify the command being used</span><span class="named-paragraph-number">5.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -386,8 +350,8 @@ so we neglect it.
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_5" class="paragraph-anchor"></a><b>&#167;6.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">6.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5" class="paragraph-anchor"></a><b>&#167;5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">5.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -395,8 +359,8 @@ so we neglect it.
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"no"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">boolean_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"boolean kind command takes yes/no argument"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_6" class="paragraph-anchor"></a><b>&#167;6.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">6.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_6" class="paragraph-anchor"></a><b>&#167;5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">5.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -410,15 +374,15 @@ so we neglect it.
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_7" class="paragraph-anchor"></a><b>&#167;6.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a textual argument for a kind command</span><span class="named-paragraph-number">6.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_7" class="paragraph-anchor"></a><b>&#167;5.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a textual argument for a kind command</span><span class="named-paragraph-number">5.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_8" class="paragraph-anchor"></a><b>&#167;6.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">6.8</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_8" class="paragraph-anchor"></a><b>&#167;5.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">5.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -432,15 +396,15 @@ so we neglect it.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">vocabulary_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_9" class="paragraph-anchor"></a><b>&#167;6.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">6.9</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_9" class="paragraph-anchor"></a><b>&#167;5.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">5.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">numeric_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_10" class="paragraph-anchor"></a><b>&#167;6.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">6.10</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_10" class="paragraph-anchor"></a><b>&#167;5.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">5.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -452,19 +416,19 @@ so we neglect it.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_11" class="paragraph-anchor"></a><b>&#167;6.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a template name argument for a kind command</span><span class="named-paragraph-number">6.11</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_11" class="paragraph-anchor"></a><b>&#167;5.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a template name argument for a kind command</span><span class="named-paragraph-number">5.11</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> = </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> = </span><a href="4-st.html#SP1" class="function-link"><span class="function-syntax">StarTemplates::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unknown template name in kind command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_12" class="paragraph-anchor"></a><b>&#167;6.12. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">6.12</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_12" class="paragraph-anchor"></a><b>&#167;5.12. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">5.12</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -474,9 +438,9 @@ so we neglect it.
<span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP6">&#167;6</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-mcr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresscurrent">ns</li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-st.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-nf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresscurrent">ns</li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-mcr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -66,51 +66,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">kinds</a></li><li><a href="index.html#4">Chapter 4: Constructors</a></li><li><b>Star Templates</b></li></ul></div>
<p class="purpose">Allowing Neptune files to generate additional source text.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>These are passages of I7 source text which can be inserted into the main
source text at the request of any kind. An example would be:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> *UNDERSTOOD-VARIABLE:</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which varies.</span>
<span class="plain-syntax"> *END</span>
</pre>
<p class="commentary">The template <span class="extract"><span class="extract-syntax">*UNDERSTOOD-VARIABLE</span></span> contains only a single sentence of source
text, and the idea is to make a new global variable associated with a given
kind. Note that the text is not quite literal, because it can contain
wildcards like <span class="extract"><span class="extract-syntax">&lt;kind&gt;</span></span>, which expands to the name of the kind of value in
question: for instance, we might get
</p>
<blockquote>
<p>number understood is a number which varies.</p>
</blockquote>
<p class="commentary">There are a few limitations on what template text can include. Firstly,
nothing with angle brackets in, except where a wildcard appears. Secondly,
each sentence must end at the end of a line, and similarly the colon for
any rule or other definition. Thus this template would fail:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> *UNDERSTOOD-VARIABLE:</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which</span>
<span class="plain-syntax"> varies. To judge &lt;kind&gt;: say "I judge [&lt;kind&gt; understood]."</span>
<span class="plain-syntax"> *END</span>
</pre>
<p class="commentary">because the first sentence ends in the middle of the second line, and the
colon dividing the phrase header from its definition is also mid-line. The
template must be reformatted thus to work:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> *UNDERSTOOD-VARIABLE:</span>
<span class="plain-syntax"> &lt;kind&gt; understood is a &lt;kind&gt; which varies.</span>
<span class="plain-syntax"> To judge &lt;kind&gt;:</span>
<span class="plain-syntax"> say "I judge [&lt;kind&gt; understood]."</span>
<span class="plain-syntax"> *END</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>So, to begin:
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Each "recorded" invention, a.k.a., "star template", generates one of the following:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -120,13 +76,13 @@ template must be reformatted thus to work:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::new</span></span>:<br/><a href="4-st.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::new</span></span>:<br/><a href="4-st.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ttd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ttd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ttd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::parse_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::parse_name</span></span>:<br/><a href="4-st.html#SP3">&#167;3</a><br/>Neptune Syntax - <a href="4-ns.html#SP6_11">&#167;6.11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::parse_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::parse_name</span></span>:<br/><a href="4-st.html#SP2">&#167;2</a><br/>Neptune Syntax - <a href="4-ns.html#SP5_11">&#167;5.11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ttd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ttd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ttd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template_name</span><span class="plain-syntax">))</span>
@ -135,7 +91,7 @@ template must be reformatted thus to work:
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure kind_template_definition is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Here is the code which records templates, reading them as one line of plain
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Here is the code which records templates, reading them as one line of plain
text at a time. (In the above example, <span class="extract"><span class="extract-syntax">StarTemplates::record_line</span></span> would be
called just once, with the single source text line.)
</p>
@ -143,37 +99,82 @@ called just once, with the single source text line.)
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> the one now being recorded</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::recording</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::recording</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::recording</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::recording</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::begin</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::begin</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::begin</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::begin</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax">) </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"first stt still recording"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP1" class="function-link"><span class="function-syntax">StarTemplates::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"duplicate definition of source text template"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax"> = </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template_text</span><span class="plain-syntax"> = </span><a href="4-st.html#SP7" class="function-link"><span class="function-syntax">StarTemplates::open_spool</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax"> = </span><a href="4-st.html#SP1" class="function-link"><span class="function-syntax">StarTemplates::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template_text</span><span class="plain-syntax"> = </span><a href="4-st.html#SP8" class="function-link"><span class="function-syntax">StarTemplates::open_spool</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::record_line</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::record_line</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP7" class="function-link"><span class="function-syntax">StarTemplates::record_to_spool</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::record_line</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::record_line</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP8" class="function-link"><span class="function-syntax">StarTemplates::record_to_spool</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::end</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::end</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::end</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::end</span></span>:<br/>Neptune Syntax - <a href="4-ns.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no stt currently recording"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP7" class="function-link"><span class="function-syntax">StarTemplates::close_spool</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP8" class="function-link"><span class="function-syntax">StarTemplates::close_spool</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_kind_template</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>So much for recording a template. To "play back", we need to take its text
and squeeze it into the main source text.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>So much for recording a template. To "play back", we need to take its text
and squeeze it into the main source text. This happens in two stages: first,
we simply record the user's intention:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::transcribe</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::transcribe</span></span>:<br/>Kind Commands - <a href="4-kc.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">star_invention</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">template</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apropos</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">origin</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">star_invention</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::note</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::note</span></span>:<br/>Kind Commands - <a href="4-kc.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ttd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">star_invention</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">star_invention</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ttd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">apropos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">con</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">origin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure star_invention is accessed in 4/ns, 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Later on, we act on these intentions. Note that a template applied to a
protocol is applied to all of the base kinds conforming to that protocol.
(Inform's standard installation uses this to construct variables of the
"K understood" variety for each understandable kind K.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::transcribe_all</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">star_invention</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">star_invention</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">apropos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_BASE_KINDS</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="2-uk.html#SP4" class="function-link"><span class="function-syntax">Kinds::Behaviour::definite</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-knd.html#SP24" class="function-link"><span class="function-syntax">Kinds::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-knd.html#SP24" class="function-link"><span class="function-syntax">Kinds::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_void</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-knd.html#SP25" class="function-link"><span class="function-syntax">Kinds::conforms_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><a href="2-knd.html#SP6" class="function-link"><span class="function-syntax">Kinds::base_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">apropos</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP5" class="function-link"><span class="function-syntax">StarTemplates::transcribe</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">construct</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP5" class="function-link"><span class="function-syntax">StarTemplates::transcribe</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">template</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">apropos</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>So this applies a single template to a definitely known kind constructor.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::transcribe</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::transcribe</span></span>:<br/><a href="4-st.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ttd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ttd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tried to transcribe missing source text template"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
@ -190,7 +191,7 @@ and squeeze it into the main source text.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">' '</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">terminator</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe one line of the template into the line buffer</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe one line of the template into the line buffer</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">terminator</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">Sentences::make_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">, </span><span class="identifier-syntax">terminator</span><span class="plain-syntax">);</span>
@ -199,7 +200,7 @@ and squeeze it into the main source text.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>Inside template text, anything in angle brackets &lt;...&gt; is a wildcard.
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b>Inside template text, anything in angle brackets &lt;...&gt; is a wildcard.
These cannot be nested and cannot include newlines. All other material is
copied verbatim into the line buffer.
</p>
@ -209,7 +210,7 @@ particular we wouldn't recognise a stop inside quoted matter. This does
not matter, since such things never come into kind definitions.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe one line of the template into the line buffer</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe one line of the template into the line buffer</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -221,7 +222,7 @@ not matter, since such things never come into kind definitions.
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) != </span><span class="character-syntax">'&gt;'</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">++));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe the template wildcard</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe the template wildcard</span><span class="named-paragraph-number">5.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">++));</span>
<span class="plain-syntax"> }</span>
@ -232,69 +233,69 @@ not matter, since such things never come into kind definitions.
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">); </span><span class="identifier-syntax">terminator</span><span class="plain-syntax"> = </span><span class="character-syntax">':'</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1" class="paragraph-anchor"></a><b>&#167;4.1.1. </b>Only five wildcards are recognised:
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1" class="paragraph-anchor"></a><b>&#167;5.1.1. </b>Only five wildcards are recognised:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the template wildcard</span><span class="named-paragraph-number">4.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the template wildcard</span><span class="named-paragraph-number">5.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"kind"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's name</span><span class="named-paragraph-number">4.1.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's name</span><span class="named-paragraph-number">5.1.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"lower-case-kind"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's name in lower case</span><span class="named-paragraph-number">4.1.1.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's name in lower case</span><span class="named-paragraph-number">5.1.1.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"kind-weak-ID"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's weak ID</span><span class="named-paragraph-number">4.1.1.3</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's weak ID</span><span class="named-paragraph-number">5.1.1.3</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"printing-routine"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's I6 printing routine</span><span class="named-paragraph-number">4.1.1.4</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's I6 printing routine</span><span class="named-paragraph-number">5.1.1.4</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"comparison-routine"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP4_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's I6 comparison routine</span><span class="named-paragraph-number">4.1.1.5</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-st.html#SP5_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Transcribe the kind's I6 comparison routine</span><span class="named-paragraph-number">5.1.1.5</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_wildcard_buffer</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"no such source text template wildcard"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1">&#167;4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_1" class="paragraph-anchor"></a><b>&#167;4.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's name</span><span class="named-paragraph-number">4.1.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1">&#167;5.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1_1" class="paragraph-anchor"></a><b>&#167;5.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's name</span><span class="named-paragraph-number">5.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-st.html#SP5" class="function-link"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP6" class="function-link"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_2" class="paragraph-anchor"></a><b>&#167;4.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's name in lower case</span><span class="named-paragraph-number">4.1.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1_2" class="paragraph-anchor"></a><b>&#167;5.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's name in lower case</span><span class="named-paragraph-number">5.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-st.html#SP5" class="function-link"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-st.html#SP6" class="function-link"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_3" class="paragraph-anchor"></a><b>&#167;4.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's weak ID</span><span class="named-paragraph-number">4.1.1.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1_3" class="paragraph-anchor"></a><b>&#167;5.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's weak ID</span><span class="named-paragraph-number">5.1.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">weak_kind_ID</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_4" class="paragraph-anchor"></a><b>&#167;4.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's I6 printing routine</span><span class="named-paragraph-number">4.1.1.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1_4" class="paragraph-anchor"></a><b>&#167;5.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's I6 printing routine</span><span class="named-paragraph-number">5.1.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">print_identifier</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_5" class="paragraph-anchor"></a><b>&#167;4.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's I6 comparison routine</span><span class="named-paragraph-number">4.1.1.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1_1_5" class="paragraph-anchor"></a><b>&#167;5.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe the kind's I6 comparison routine</span><span class="named-paragraph-number">5.1.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">template_line_buffer</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">comparison_routine</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Where:
<ul class="endnotetexts"><li>This code is used in <a href="4-st.html#SP5_1_1">&#167;5.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Where:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::transcribe_constructor_name</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></span>:<br/><a href="4-st.html#SP4_1_1_1">&#167;4.1.1.1</a>, <a href="4-st.html#SP4_1_1_2">&#167;4.1.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::transcribe_constructor_name</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::transcribe_constructor_name</span></span>:<br/><a href="4-st.html#SP5_1_1_1">&#167;5.1.1.1</a>, <a href="4-st.html#SP5_1_1_2">&#167;5.1.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">lower_case</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dt_tag</span><span class="plain-syntax">) </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="4-kc2.html#SP10" class="function-link"><span class="function-syntax">Kinds::Constructors::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
@ -316,7 +317,7 @@ not matter, since such things never come into kind definitions.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Large chunks of the text in the template will need to exist permanently in
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Large chunks of the text in the template will need to exist permanently in
memory, and we go into recording mode to accept a series of them,
concatenated with newlines dividing them, in a text stream.
</p>
@ -324,28 +325,28 @@ concatenated with newlines dividing them, in a text stream.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>And here is recording mode:
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>And here is recording mode:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::open_spool</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::open_spool</span></span>:<br/><a href="4-st.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">StarTemplates::open_spool</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::open_spool</span></span>:<br/><a href="4-st.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::record_to_spool</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::record_to_spool</span></span>:<br/><a href="4-st.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::record_to_spool</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::record_to_spool</span></span>:<br/><a href="4-st.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"can't record outside recording"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::close_spool</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::close_spool</span></span>:<br/><a href="4-st.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">StarTemplates::close_spool</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">StarTemplates::close_spool</span></span>:<br/><a href="4-st.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ns.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresscurrent">st</li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-kc.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-mcr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresssection"><a href="4-ns.html">ns</a></li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresscurrent">st</li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-kc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -137,7 +137,7 @@ prevent this from being issued to the terminal as an error message: see
for a new base kind with the lexicon itself. See <a href="2-knd.html#SP20" class="internal">Kinds::new_base</a>.
</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">&#10094;</a></li><li class="progresscurrentchapter">P</li><li class="progresssection"><a href="P-wtmd.html">wtmd</a></li><li class="progresscurrent">htitm</li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="1-km.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">&#10094;</a></li><li class="progresscurrentchapter">P</li><li class="progresssection"><a href="P-wtmd.html">wtmd</a></li><li class="progresscurrent">htitm</li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="1-km.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -368,7 +368,8 @@ which determines whether \(K\) is definite.
the process of reading in "Neptune files".<sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup> New constructors can only
be made the latter way. See <a href="4-nf.html#SP1" class="internal">NeptuneFiles::load</a>, which sends individual commands
to <a href="4-nf.html#SP1" class="internal">NeptuneFiles::read_command</a>, which in turn deals with the low-level code in
the <a href="4-kc2.html" class="internal">Kind Constructors</a> section.<sup id="fnref:8"><a href="#fn:8" rel="footnote">8</a></sup>
the <a href="4-kc2.html" class="internal">Kind Constructors</a> section.<sup id="fnref:8"><a href="#fn:8" rel="footnote">8</a></sup> See <a href="4-abgtn.html" class="internal">A Brief Guide to Neptune</a> for a
manual to the syntax.
</li><li>&#9679; It is possible to move kinds within the lattice of kinds, i.e., to change
their hierarchical relationship, even after creation. See <a href="2-knd.html#SP21" class="internal">Kinds::make_subkind</a>.
Inform does this very sparingly and only with kinds of object.<sup id="fnref:9"><a href="#fn:9" rel="footnote">9</a></sup>
@ -391,7 +392,7 @@ when it had been created as a subkind of <span class="extract"><span class="extr
allowing this is a bad idea, but that ship has sailed.
<a href="#fnref:9" title="return to text"> &#x21A9;</a></p></li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-nf.html">4</a></li><li class="progressnext"><a href="P-htitm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresschapter"><a href="4-abgtn.html">4</a></li><li class="progressnext"><a href="P-htitm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -139,21 +139,26 @@
<p class="chapterentry"><a name="4"></a>
<span class="chaptertitle">Chapter 4: Constructors</span></p>
<ul class="sectionlist">
<li>
<p class="sectionentry"><a href="4-abgtn.html">
<spon class="sectiontitle">A Brief Guide to Neptune</span></a> -
<span class="sectionpurpose">A manual for the mini-language used in Neptune files.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-nf.html">
<spon class="sectiontitle">Neptune Files</span></a> -
<span class="sectionpurpose">To read in details of built-in kind constructors from so-called Neptune files, setting them up ready for use.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-mcr.html">
<spon class="sectiontitle">Macros</span></a> -
<span class="sectionpurpose">Neptune supports named macros, though they are only lists of kind commands.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-ns.html">
<spon class="sectiontitle">Neptune Syntax</span></a> -
<span class="sectionpurpose">To parse individual commands from Neptune files.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-mcr.html">
<spon class="sectiontitle">Macros</span></a> -
<span class="sectionpurpose">Neptune supports named macros, though they are only lists of kind commands.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-st.html">
<spon class="sectiontitle">Star Templates</span></a> -

View file

@ -220,8 +220,8 @@ sentence. In effect, this is a read-evaluate-print loop.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../kinds-module/2-uk.html#SP8" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_unit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../kinds-module/2-uk.html#SP8" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_unit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"'%&lt;W': ok\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-dcl.html#SP5">&#167;5</a>.</li></ul>
@ -229,8 +229,8 @@ sentence. In effect, this is a read-evaluate-print loop.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../kinds-module/2-uk.html#SP9" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../kinds-module/2-uk.html#SP9" class="function-link"><span class="function-syntax">Kinds::Behaviour::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"'%&lt;W': ok\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-dcl.html#SP5">&#167;5</a>.</li></ul>
@ -239,7 +239,7 @@ sentence. In effect, this is a read-evaluate-print loop.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="../kinds-module/2-knd.html#SP20" class="function-link"><span class="function-syntax">Kinds::new_base</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;declaration-line&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_relationship</span><span class="plain-syntax"> *</span><span class="identifier-syntax">KR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_relationship</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KR</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sub</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KR</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">super</span><span class="plain-syntax"> = </span><span class="identifier-syntax">X</span><span class="plain-syntax">;</span>

View file

@ -102,7 +102,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">DL</span><span class="plain-syntax"> = </span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/2-str.html#SP20" class="function-link"><span class="function-syntax">Streams::enable_debugging</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOAD_CLSW:</span><span class="plain-syntax"> </span><a href="../kinds-module/4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::load</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><a href="../../../inweb/docs/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOAD_CLSW:</span><span class="plain-syntax"> </span><a href="../kinds-module/4-nf.html#SP1" class="function-link"><span class="function-syntax">NeptuneFiles::load</span></a><span class="plain-syntax">(</span><a href="../../../inweb/docs/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INTERPRET_CLSW:</span><span class="plain-syntax"> </span><a href="1-dcl.html#SP2" class="function-link"><span class="function-syntax">Declarations::load_from_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DL</span><span class="plain-syntax"> = </span><span class="identifier-syntax">save_DL</span><span class="plain-syntax">;</span>

View file

@ -44,7 +44,7 @@
<ul class="toc"><li><a href="S-act.html#SP2">&#167;2. Issuing responses</a></li><li><a href="S-act.html#SP3">&#167;3. Naming and listing</a></li><li><a href="S-act.html#SP10">&#167;10. Parsing activites</a></li><li><a href="S-act.html#SP15">&#167;15. Posthumous activities</a></li><li><a href="S-act.html#SP22">&#167;22. Locale activities</a></li><li><a href="S-act.html#SP23">&#167;23. Locale Implementation</a></li><li><a href="S-act.html#SP24">&#167;24. Printing the Locale Description</a></li><li><a href="S-act.html#SP25">&#167;25. Choosing Notable Locale Objects</a></li><li><a href="S-act.html#SP26">&#167;26. Printing a Locale Paragraph</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b>These must not be created until the basic rulebooks are in place, because
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>These must not be created until the basic rulebooks are in place, because
creating any activity automatically creates three rulebooks as well.
</p>
@ -58,7 +58,7 @@ concern implementation.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Part</span><span class="plain-syntax"> </span><span class="identifier-syntax">Four</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Activities</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. Issuing responses. </b>Responses are textual replies made by rules, and while one could imagine
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Issuing responses. </b>Responses are textual replies made by rules, and while one could imagine
uses for them outside of an IF-like dialogue, they belong better in the
Standard Rules (i.e., as an aspect of IF) than in the general-purpose
language. So <span class="extract"><span class="extract-syntax">STANDARD_RESPONSE_ISSUING_R</span></span> is in <span class="extract"><span class="extract-syntax">srules</span></span>, not <span class="extract"><span class="extract-syntax">basicinform</span></span>,
@ -77,7 +77,7 @@ and we define:
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">issuing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span>
<span class="string-syntax">"STANDARD_RESPONSE_ISSUING_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. Naming and listing. </b>We start with a piece of unfinished business. The "printing the name"
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Naming and listing. </b>We start with a piece of unfinished business. The "printing the name"
activity was created by Basic Inform, but we need to add a rule to its
before rule which marks any item whose name is being printed with
the "mentioned" property, for reasons to be found below.
@ -100,7 +100,7 @@ the "mentioned" property, for reasons to be found below.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span>
<span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b>When they occur in room descriptions, names of things are sometimes
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>When they occur in room descriptions, names of things are sometimes
supplemented by details:
</p>
@ -108,7 +108,7 @@ supplemented by details:
<span class="identifier-syntax">Printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">details</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_details</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">inventory</span><span class="plain-syntax"> </span><span class="identifier-syntax">details</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_idetails</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b>Names of things are often formed up into lists, in which they are sometimes
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Names of things are often formed up into lists, in which they are sometimes
grouped together:
</p>
@ -118,7 +118,7 @@ grouped together:
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">contents</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"STANDARD_CONTENTS_LISTING_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Grouping</span><span class="plain-syntax"> </span><span class="identifier-syntax">together</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_gt</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. </b>And such lists of names are formed up in turn into room descriptions.
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>And such lists of names are formed up in turn into room descriptions.
Something which is visible in a room can either have a paragraph of its own
or can be relegated to the list of "nondescript" items at the end.
</p>
@ -126,7 +126,7 @@ or can be relegated to the list of "nondescript" items at the end.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Writing</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">paragraph</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_wpa</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>When these paragraphs have all gone by, the nondescript items left over are
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>When these paragraphs have all gone by, the nondescript items left over are
more briefly listed: the following activity gets the chance to change how
this is done.
</p>
@ -134,7 +134,7 @@ this is done.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">nondescript</span><span class="plain-syntax"> </span><span class="identifier-syntax">items</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_lni</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>Darkness behaves, for room description purposes, a little as if it were a
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Darkness behaves, for room description purposes, a little as if it were a
room in its own right. Until the 1990s that was almost always how darkness
was implemented in IF programs: this persists in I6, but not I7, where the
existence of a room-which-is-not-a-room would break type safety.
@ -153,7 +153,7 @@ existence of a room-which-is-not-a-room would break type safety.
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">look</span><span class="plain-syntax"> </span><span class="identifier-syntax">around</span><span class="plain-syntax"> </span><span class="identifier-syntax">once</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax"> </span><span class="identifier-syntax">available</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">try</span><span class="plain-syntax"> </span><span class="identifier-syntax">looking</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b>Two special forms of printing: the status line at the top of the screen,
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Two special forms of printing: the status line at the top of the screen,
refreshed every turn during play, and the banner which appears at or close
to the start of play:
</p>
@ -162,7 +162,7 @@ to the start of play:
<span class="identifier-syntax">Constructing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">status</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_csl</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">banner</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_banner</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. Parsing activites. </b>Now a brace of activities to intervene in how the command parser does its
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Parsing activites. </b>Now a brace of activities to intervene in how the command parser does its
parsing, arranged roughly in chronological order of their typical use
during a single turn of a typed command, its parsing, and final conversion
into an action.
@ -193,7 +193,7 @@ what it might be.
<span class="identifier-syntax">Supplying</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">missing</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_smn</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Implicitly</span><span class="plain-syntax"> </span><span class="identifier-syntax">taking</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">act_implicitly</span><span class="plain-syntax">) </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. </b>Here are the default rules for the behaviour of ALL:
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Here are the default rules for the behaviour of ALL:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -211,7 +211,7 @@ what it might be.
<span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">inserting</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">putting</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">exclude</span><span class="plain-syntax"> </span><span class="identifier-syntax">people</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">drop</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">does</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>The supplying activities are linguistically interesting, for reasons gone
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>The supplying activities are linguistically interesting, for reasons gone
into in the paper "Interactive Fiction, Natural Language and Semantic
Analysis": English verbs do not naturally seem to feature optional nouns.
Indeed, we say "it rained on Tuesday" where "it" refers to nothing at all,
@ -233,7 +233,7 @@ defocused.
<span class="identifier-syntax">Rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">supplying</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">missing</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">while</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">listening</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">ambient</span><span class="plain-syntax"> </span><span class="identifier-syntax">sound</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">touchability</span><span class="plain-syntax"> </span><span class="identifier-syntax">ceiling</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </b>The following rule is something of a dodge to provide a better parser
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The following rule is something of a dodge to provide a better parser
response to commands like GO or BRETT, GO. (Putting the rule here, and giving
it a name, allows the user to override it and thus accept the idea of vague
going after all.)
@ -243,7 +243,7 @@ going after all.)
<span class="identifier-syntax">Rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">supplying</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">missing</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">while</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">block</span><span class="plain-syntax"> </span><span class="identifier-syntax">vaguely</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"You'll have to say which compass direction to go in."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. </b>Implicit taking is delegated to the I6 template:
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Implicit taking is delegated to the I6 template:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -253,7 +253,7 @@ going after all.)
<span class="plain-syntax"> </span><span class="string-syntax">"(first taking [the noun])[command clarification break]"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"([the second noun] first taking [the noun])[command clarification break]"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. Posthumous activities. </b>The very last rules of all. The obituary is a rare example of a
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Posthumous activities. </b>The very last rules of all. The obituary is a rare example of a
sequence of events in the I6 library having been rolled up into an
activity, partly because it's one of the few clear-cut moments where
several unconnected things happen in succession.
@ -276,7 +276,7 @@ several unconnected things happen in succession.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"PRINT_FINAL_SCORE_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">display</span><span class="plain-syntax"> </span><span class="identifier-syntax">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">status</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"DISPLAY_FINAL_STATUS_LINE_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16"></a><b>&#167;16. </b>There is one last question: the one which usually reads "Would you like to
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>There is one last question: the one which usually reads "Would you like to
RESTART, RESTORE a saved game, or QUIT?", but which sometimes provides other
options too. The "ask the final question rule" handles this, and does so
by repeatedly calling the following activity:
@ -285,7 +285,7 @@ by repeatedly calling the following activity:
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Handling</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">question</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17"></a><b>&#167;17. </b>It follows that this activity must at least sometimes do something dramatic
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>It follows that this activity must at least sometimes do something dramatic
to the execution state: perform a quit, for instance. Four primitive rules are
available for the drastic things which the activity might wish to do, but
these are not placed in any rulebook: instead they are available for anyone
@ -305,7 +305,7 @@ references to them into a table.)
<span class="plain-syntax"> </span><span class="string-syntax">"[bracket]Previous turn undone.[close bracket]"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'Undo' capacity exhausted. Sorry!"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18"></a><b>&#167;18. </b>We structure the activity so that the printing of the question and typing
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>We structure the activity so that the printing of the question and typing
of the answer take place at the "before" stage, and then the parsing and
acting upon this answer take place at the "for" stage. Reading the keyboard
is the last rule in "before". With the "for" stage, the idea is that any
@ -323,7 +323,7 @@ implementation, so the latter is the last there, too.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">read</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"READ_FINAL_ANSWER_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19"></a><b>&#167;19. </b>That clears away the underbrush and reduces us to two matching tasks: (i)
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>That clears away the underbrush and reduces us to two matching tasks: (i)
to print the question, (ii) to parse the answer, given that we want to be
able to vary the set of choices available.
</p>
@ -369,7 +369,7 @@ recognised as an answer.)
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">", "</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20"></a><b>&#167;20. </b>And the matching rule to parse and respond to the answer:
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And the matching rule to parse and respond to the answer:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -384,7 +384,7 @@ recognised as an answer.)
<span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"Please give one of the answers above."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21"></a><b>&#167;21. </b>The table of final options is the only material under the following heading
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>The table of final options is the only material under the following heading
to make it easier for users to replace with entirely different tables.
</p>
@ -405,7 +405,7 @@ offered the chance to reverse it: death, where is thy sting?
<span class="string-syntax">"QUIT"</span><span class="plain-syntax"> </span><span class="identifier-syntax">false</span><span class="plain-syntax"> </span><span class="string-syntax">"quit"</span><span class="plain-syntax"> </span><span class="identifier-syntax">immediately</span><span class="plain-syntax"> </span><span class="identifier-syntax">quit</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> --</span>
<span class="string-syntax">"UNDO the last command"</span><span class="plain-syntax"> </span><span class="identifier-syntax">false</span><span class="plain-syntax"> </span><span class="string-syntax">"undo"</span><span class="plain-syntax"> </span><span class="identifier-syntax">immediately</span><span class="plain-syntax"> </span><span class="identifier-syntax">undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> --</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22"></a><b>&#167;22. Locale activities. </b>A "locale description" is a segment of the text produced by LOOK: the
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. Locale activities. </b>A "locale description" is a segment of the text produced by LOOK: the
"locale" is a clutch of objects at a given level in the object tree. Most
room descriptions consist of a top line, a description of the place, and
then a single (though often, as here, multi-paragraph) locale:
@ -447,7 +447,7 @@ the carry out looking rules) followed by one or more locale descriptions
(produced by the activity below).
</p>
<p class="commentary firstcommentary"><a id="SP23"></a><b>&#167;23. Locale Implementation. </b>When describing a locale, we keep a Table of interesting objects, each
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. Locale Implementation. </b>When describing a locale, we keep a Table of interesting objects, each
associated with a priority &mdash; a number indicating how important, and
therefore how near to the top of the description, the object is. A special
syntax allows us to create the Table with exactly the same number of rows
@ -486,7 +486,7 @@ representation of objects.)
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">notable</span><span class="plain-syntax">-</span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">O</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">locale</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">priority</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24"></a><b>&#167;24. Printing the Locale Description. </b>This is handled by the "printing the locale description" activity. The
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. Printing the Locale Description. </b>This is handled by the "printing the locale description" activity. The
before stage works out which objects might be of interest; the for stage
actually prints paragraphs; the after stage is initially empty, but can be
used to insert all kinds of interesting information into a room description.
@ -593,7 +593,7 @@ list is not in fact a list of the contents of anything.
<span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">nondescript</span><span class="plain-syntax"> </span><span class="identifier-syntax">items</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">domain</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP25"></a><b>&#167;25. Choosing Notable Locale Objects. </b>By default, the notable objects are exactly the children of the domain, and
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. Choosing Notable Locale Objects. </b>By default, the notable objects are exactly the children of the domain, and
they all have equal priority (1). Since table sorting is stable, and thus
preserves the row order of rows with equal priority, the eventual order of
listing is by default the same as the order in which things are added to the
@ -611,7 +611,7 @@ table, which in turn is the object-tree traversal order.
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">held</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">next</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">held</span><span class="plain-syntax"> </span><span class="identifier-syntax">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">held</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26"></a><b>&#167;26. Printing a Locale Paragraph. </b>By default there are four kinds of "interesting" locale paragraph, and
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. Printing a Locale Paragraph. </b>By default there are four kinds of "interesting" locale paragraph, and
the following setup is fairly complicated because it implements conventions
gradually built up between 1978 and 2008.
</p>

File diff suppressed because it is too large Load diff

View file

@ -42,7 +42,7 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Extensions</a></li><li><a href="index.html">srules</a></li><li><b>Command Grammar</b></li></ul></div>
<p class="purpose">The default grammar for parsing typed commands in play.</p>
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b>Inform comes with no command grammar built in, and Basic Inform defines
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Inform comes with no command grammar built in, and Basic Inform defines
none either.
</p>
@ -270,7 +270,7 @@ none either.
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"notify"</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="string-syntax">"notify on"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">switching</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> </span><span class="identifier-syntax">notification</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"notify off"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">switching</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> </span><span class="identifier-syntax">notification</span><span class="plain-syntax"> </span><span class="identifier-syntax">off</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The following provides for the token "[a time period]", which is not in
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The following provides for the token "[a time period]", which is not in
fact used in the default grammar above, but is available for authors.
</p>

View file

@ -58,7 +58,7 @@ MathJax = {
<ul class="toc"><li><a href="S-pd.html#SP5">&#167;5. Using the list-writer</a></li><li><a href="S-pd.html#SP7">&#167;7. Grouping in the list-writer</a></li><li><a href="S-pd.html#SP8">&#167;8. Filtering in the list-writer</a></li><li><a href="S-pd.html#SP9">&#167;9. Figures and sound effects</a></li><li><a href="S-pd.html#SP10">&#167;10. Actions, activities and rules</a></li><li><a href="S-pd.html#SP14">&#167;14. The model world</a></li><li><a href="S-pd.html#SP26">&#167;26. Understanding</a></li><li><a href="S-pd.html#SP31">&#167;31. Message support</a></li><li><a href="S-pd.html#SP32">&#167;32. Deprecated or private-API-like phrases</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b>The following is inevitably a bit of a miscellany. Firstly, there's no
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The following is inevitably a bit of a miscellany. Firstly, there's no
model of the passage of time in Basic Inform, so:
</p>
@ -79,7 +79,7 @@ model of the passage of time in Basic Inform, so:
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">phs_now</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[if story tense is present tense]now[otherwise]then"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The ability to put up a dinky reverse-video quotation as an epigraph
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The ability to put up a dinky reverse-video quotation as an epigraph
has somehow survived for 36 years. The decision to continue to support it
even in Inform 6 was critiqued as being an unnecessary throwback by Jimmy
Maher in 2019; he was clearly right; and yet here we are, and it survives
@ -93,7 +93,7 @@ even the 2020 restructuring of Inform's language design.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_boxed</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DisplayBoxedQuotation</span><span class="plain-syntax">({-</span><span class="identifier-syntax">box</span><span class="plain-syntax">-</span><span class="identifier-syntax">quotation</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">:</span><span class="identifier-syntax">Q</span><span class="plain-syntax">}); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>And now some oddball special texts which must sometimes be said.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And now some oddball special texts which must sometimes be said.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -118,7 +118,7 @@ even the 2020 restructuring of Inform's language design.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">phs_clarifbreak</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">CommandClarificationBreak</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b>Recall that this activity exists only in the Standard Rules, and therefore
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Recall that this activity exists only in the Standard Rules, and therefore
this phrase definition must similarly be here, not in Basic Inform.
</p>
@ -129,7 +129,7 @@ this phrase definition must similarly be here, not in Basic Inform.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">phs_response</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">carry</span><span class="plain-syntax"> </span><span class="identifier-syntax">out</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">issuing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. Using the list-writer. </b>One of the most powerful features of Inform 6 was its list-writer, a lengthy
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Using the list-writer. </b>One of the most powerful features of Inform 6 was its list-writer, a lengthy
piece of I6 code wbich now lives on as Inter code, in the <span class="extract"><span class="extract-syntax">srules</span></span> template:
see "ListWriter.i6t". The following phrases control it:
</p>
@ -156,7 +156,7 @@ see "ListWriter.i6t". The following phrases control it:
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_listcontents</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">WriteListFrom</span><span class="plain-syntax">(</span><span class="identifier-syntax">child</span><span class="plain-syntax">({</span><span class="identifier-syntax">O</span><span class="plain-syntax">}), {</span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</span><span class="plain-syntax">}); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. </b>These text substitutions all look (and are) repetitive. We want to avoid
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>These text substitutions all look (and are) repetitive. We want to avoid
passing a description value to some routine, because that's tricky if the
description needs to refer to a value local to the current stack frame. (There
are ways round that, but it minimises nuisance to avoid the need.) So we mark
@ -251,7 +251,7 @@ attribute.
<span class="plain-syntax"> </span><span class="identifier-syntax">TERSE_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">CONCEAL_BIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. Grouping in the list-writer. </b>See the specifications of <span class="extract"><span class="extract-syntax">list_together</span></span> and <span class="extract"><span class="extract-syntax">c_style</span></span> in the DM4, which are
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Grouping in the list-writer. </b>See the specifications of <span class="extract"><span class="extract-syntax">list_together</span></span> and <span class="extract"><span class="extract-syntax">c_style</span></span> in the DM4, which are
still broadly accurate.
</p>
@ -283,7 +283,7 @@ still broadly accurate.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_omit</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">c_style</span><span class="plain-syntax"> = </span><span class="identifier-syntax">c_style</span><span class="plain-syntax"> &amp;~ (</span><span class="identifier-syntax">RECURSE_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">FULLINV_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">PARTINV_BIT</span><span class="plain-syntax">); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. Filtering in the list-writer. </b>Something of a last resort, which is intentionally not documented.
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Filtering in the list-writer. </b>Something of a last resort, which is intentionally not documented.
It's needed by the Standard Rules to tidy up an implementation and
avoid I6, but is not an ideal trick and may be dropped in later
builds. Recursion occurs when the list-writer descends to the contents
@ -299,7 +299,7 @@ just those contents, or supportees, matching a description <span class="extract"
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">unfilter</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">recursion</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">list_filter_routine</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. Figures and sound effects. </b></p>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Figures and sound effects. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Chapter</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Multimedia</span>
@ -322,7 +322,7 @@ just those contents, or supportees, matching a description <span class="extract"
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_soundid</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">ResourceIDsOfSounds</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">SFX</span><span class="plain-syntax">} -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. Actions, activities and rules. </b>We begin with the firing off of new actions. The current action runs silently
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Actions, activities and rules. </b>We begin with the firing off of new actions. The current action runs silently
if the I6 global variable <span class="extract"><span class="extract-syntax">keep_silent</span></span> is set, so the result of the
definitions below is that one can go into silence mode, using "try silently",
but not climb out of it again. This is done because many actions try other
@ -347,7 +347,7 @@ silently, then any action \(X\) itself tries should also be tried silently.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">whether</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">silent</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">keep_silent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">false</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. </b>The requirements of the current action can be tested. The following
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The requirements of the current action can be tested. The following
may be reimplemented using a verb "to require" at some future point.
</p>
@ -392,7 +392,7 @@ may be reimplemented using a verb "to require" at some future point.
<span class="plain-syntax"> </span><span class="identifier-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } -) - </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>Within the rulebooks to do with an action, returning <span class="extract"><span class="extract-syntax">true</span></span> from a rule
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Within the rulebooks to do with an action, returning <span class="extract"><span class="extract-syntax">true</span></span> from a rule
is sufficient to stop the rulebook early: there is no need to specify
success or failure because that is determined by the rulebook itself. (For
instance, if the check taking rules stop for any reason, the action failed;
@ -412,7 +412,7 @@ prevents this.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_continueaction</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">rfalse</span><span class="plain-syntax">; -) - </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </b></p>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Section</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Actions</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">values</span>
@ -439,7 +439,7 @@ prevents this.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_actorpart</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">STORED_ACTION_TY_Part</span><span class="plain-syntax">({-</span><span class="identifier-syntax">by</span><span class="plain-syntax">-</span><span class="identifier-syntax">reference</span><span class="plain-syntax">:</span><span class="identifier-syntax">act</span><span class="plain-syntax">}, </span><span class="identifier-syntax">STORA_ACTOR_F</span><span class="plain-syntax">)) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. The model world. </b>Phrase definitions with wordings like "the story has ended" are a
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. The model world. </b>Phrase definitions with wordings like "the story has ended" are a
necessary evil. The "has" here is parsed literally, not as the present
tense of "to have", so inflected forms like "the story had ended" are
not available: nor is there any value "the story" for the subject noun
@ -480,7 +480,7 @@ so as to avoid the verbs, but natural language just doesn't work that way.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_resume</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">resurrect_please</span><span class="plain-syntax"> = </span><span class="identifier-syntax">true</span><span class="plain-syntax">; -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. </b>Times of day.
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>Times of day.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -493,7 +493,7 @@ so as to avoid the verbs, but natural language just doesn't work that way.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_hourspart</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- ({</span><span class="identifier-syntax">t</span><span class="plain-syntax">}/</span><span class="identifier-syntax">ONE_HOUR</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16"></a><b>&#167;16. </b>Comparing times of day is inherently odd, because the day is
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>Comparing times of day is inherently odd, because the day is
circular. Every 2 PM comes after a 1 PM, but it also comes before
another 1 PM. Where do we draw the meridian on this circle? The legal
day divides at midnight but for other purposes (daylight savings time,
@ -519,7 +519,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_shiftafter</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (({</span><span class="identifier-syntax">t2</span><span class="plain-syntax">}+{</span><span class="identifier-syntax">t</span><span class="plain-syntax">}+</span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax">)%(</span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax">)) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17"></a><b>&#167;17. </b>Durations are in effect casts from "number" to "time".
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>Durations are in effect casts from "number" to "time".
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -532,7 +532,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_durationhours</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (({</span><span class="identifier-syntax">n</span><span class="plain-syntax">}*</span><span class="identifier-syntax">ONE_HOUR</span><span class="plain-syntax">)%(</span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax">)) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18"></a><b>&#167;18. </b>Timed events.
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Timed events.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -548,7 +548,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_timefromnow</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">SetTimedEvent</span><span class="plain-syntax">({-</span><span class="identifier-syntax">mark</span><span class="plain-syntax">-</span><span class="identifier-syntax">event</span><span class="plain-syntax">-</span><span class="identifier-syntax">used</span><span class="plain-syntax">:</span><span class="identifier-syntax">R</span><span class="plain-syntax">}, (</span><span class="identifier-syntax">the_time</span><span class="plain-syntax">+{</span><span class="identifier-syntax">t</span><span class="plain-syntax">})%(</span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax">), </span><span class="constant-syntax">1</span><span class="plain-syntax">); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19"></a><b>&#167;19. </b>Scenes.
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Scenes.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -567,7 +567,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_hasnotended</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">scene_endings</span><span class="plain-syntax">--&gt;({</span><span class="identifier-syntax">sc</span><span class="plain-syntax">}-1) &lt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20"></a><b>&#167;20. </b>Timing of scenes.
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>Timing of scenes.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -586,7 +586,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_scenetimewhenended</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">SceneUtility</span><span class="plain-syntax">({</span><span class="identifier-syntax">sc</span><span class="plain-syntax">}, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21"></a><b>&#167;21. </b>Player's identity and location.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>Player's identity and location.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -596,7 +596,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_indarkness</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">location</span><span class="plain-syntax">==</span><span class="identifier-syntax">thedark</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22"></a><b>&#167;22. </b>Moving and removing things.
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Moving and removing things.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -618,7 +618,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_updatebackdrop</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">MoveFloatingObjects</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23"></a><b>&#167;23. </b>The map.
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>The map.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -655,7 +655,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_backside</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">BackSideOfDoor</span><span class="plain-syntax">({</span><span class="identifier-syntax">D</span><span class="plain-syntax">}) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24"></a><b>&#167;24. </b>Route-finding.
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>Route-finding.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -680,7 +680,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_bestroutethroughlength</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">MapRouteTo</span><span class="plain-syntax">({</span><span class="identifier-syntax">R1</span><span class="plain-syntax">},{</span><span class="identifier-syntax">R2</span><span class="plain-syntax">},{</span><span class="identifier-syntax">RS</span><span class="plain-syntax">},{</span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</span><span class="plain-syntax">},</span><span class="identifier-syntax">true</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP25"></a><b>&#167;25. </b>The object tree.
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>The object tree.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -696,7 +696,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_firstheld</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">child</span><span class="plain-syntax">({</span><span class="identifier-syntax">something</span><span class="plain-syntax">})) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26"></a><b>&#167;26. Understanding. </b>First, asking yes/no questions.
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. Understanding. </b>First, asking yes/no questions.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -708,7 +708,7 @@ day, the latter at the very beginning.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_consents</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">YesOrNo</span><span class="plain-syntax">() -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27"></a><b>&#167;27. </b>Support for snippets, which are substrings of the player's command. This
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>Support for snippets, which are substrings of the player's command. This
is a kind of value which doesm't exist in Basic Inform.
</p>
@ -728,7 +728,7 @@ is a kind of value which doesm't exist in Basic Inform.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_snippetdoesnotinclude</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">SnippetIncludes</span><span class="plain-syntax">({</span><span class="identifier-syntax">T</span><span class="plain-syntax">},{</span><span class="identifier-syntax">S</span><span class="plain-syntax">})==0) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP28"></a><b>&#167;28. </b>Changing the player's command.
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Changing the player's command.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -747,7 +747,7 @@ is a kind of value which doesm't exist in Basic Inform.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_rejectcommand</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">RulebookFails</span><span class="plain-syntax">(); </span><span class="identifier-syntax">rtrue</span><span class="plain-syntax">; -) - </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP29"></a><b>&#167;29. </b>Scope and pronouns.
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>Scope and pronouns.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -763,7 +763,7 @@ is a kind of value which doesm't exist in Basic Inform.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_setpronouns</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">PronounNotice</span><span class="plain-syntax">({</span><span class="identifier-syntax">O</span><span class="plain-syntax">}); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP30"></a><b>&#167;30. </b>The multiple object list is a data structure used in the parser when
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. </b>The multiple object list is a data structure used in the parser when
processing commands like TAKE ALL.
</p>
@ -777,7 +777,7 @@ processing commands like TAKE ALL.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_altermultipleobjectlist</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">LIST_OF_TY_Set_Mol</span><span class="plain-syntax">({-</span><span class="identifier-syntax">by</span><span class="plain-syntax">-</span><span class="identifier-syntax">reference</span><span class="plain-syntax">:</span><span class="identifier-syntax">L</span><span class="plain-syntax">}); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP31"></a><b>&#167;31. Message support. </b>"Unindexed" here is a euphemism for "undocumented". This is where
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. Message support. </b>"Unindexed" here is a euphemism for "undocumented". This is where
experimental or intermediate phrases go: things we don't want people
to use because we will probably revise them heavily in later builds of
Inform. For now, the Standard Rules do make use of these phrases, but
@ -803,7 +803,7 @@ log.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">parser</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">so</span><span class="plain-syntax"> </span><span class="identifier-syntax">far</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">PrintCommand</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP32"></a><b>&#167;32. Deprecated or private-API-like phrases. </b>None of these are part of Inform's public specification, and they should be
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>&#167;32. Deprecated or private-API-like phrases. </b>None of these are part of Inform's public specification, and they should be
used only by extensions built in to Inform; they may change at any time.
</p>
@ -812,7 +812,7 @@ used only by extensions built in to Inform; they may change at any time.
<span class="identifier-syntax">Section</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Spatial</span><span class="plain-syntax"> </span><span class="identifier-syntax">modelling</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Unindexed</span>
</pre>
<p class="commentary firstcommentary"><a id="SP33"></a><b>&#167;33. </b>These are actually sensible concepts in the world model, and could even
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>&#167;33. </b>These are actually sensible concepts in the world model, and could even
be opened to public use, but they're quite complicated to explain.
</p>
@ -831,7 +831,7 @@ be opened to public use, but they're quite complicated to explain.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">touchability</span><span class="plain-syntax"> </span><span class="identifier-syntax">ceiling</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (</span><span class="identifier-syntax">O</span><span class="plain-syntax"> - </span><span class="identifier-syntax">object</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">TouchabilityCeiling</span><span class="plain-syntax">({</span><span class="identifier-syntax">O</span><span class="plain-syntax">}) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP34"></a><b>&#167;34. </b>These are in effect global variables, but aren't defined as such, to
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>&#167;34. </b>These are in effect global variables, but aren't defined as such, to
prevent people using them. Their contents are only very briefly meaningful,
and they would be dangerous friends to know.
</p>
@ -842,7 +842,7 @@ and they would be dangerous friends to know.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">ceiling</span><span class="plain-syntax"> </span><span class="identifier-syntax">calculated</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">visibility_ceiling</span><span class="plain-syntax"> -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP35"></a><b>&#167;35. </b>This is a unique quasi-action, using the secondary action processing
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>&#167;35. </b>This is a unique quasi-action, using the secondary action processing
stage only. A convenience, but also an anomaly, and let's not encourage
its further use.
</p>
@ -853,7 +853,7 @@ its further use.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">produce</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax"> </span><span class="identifier-syntax">spacing</span><span class="plain-syntax"> </span><span class="identifier-syntax">conventions</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">LookAfterGoing</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP36"></a><b>&#167;36. </b>An ugly little trick needed because of the mismatch between I6 and I7
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>&#167;36. </b>An ugly little trick needed because of the mismatch between I6 and I7
property implementation, and because of legacy code from the old I6 library.
Please don't touch.
</p>
@ -862,7 +862,7 @@ Please don't touch.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">PrintOrRun</span><span class="plain-syntax">(</span><span class="identifier-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">description</span><span class="plain-syntax">); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP37"></a><b>&#167;37. </b>The following cries out for an enumerated kind of value, but for historical
<p class="commentary firstcommentary"><a id="SP37" class="paragraph-anchor"></a><b>&#167;37. </b>The following cries out for an enumerated kind of value, but for historical
reasons it isn't one.
</p>
@ -874,7 +874,7 @@ reasons it isn't one.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">set</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">abbreviated</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">descriptions</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">lookmode</span><span class="plain-syntax"> == </span><span class="constant-syntax">3</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP38"></a><b>&#167;38. </b>Action conversion is a trick used in the Standard Rules to simplify the
<p class="commentary firstcommentary"><a id="SP38" class="paragraph-anchor"></a><b>&#167;38. </b>Action conversion is a trick used in the Standard Rules to simplify the
implementation of actions: it allows one action to become another one
mid-way, without causing spurious action failures. (There are better ways
to make user-defined actions convert, and some of the examples show this.)
@ -891,7 +891,7 @@ to make user-defined actions convert, and some of the examples show this.)
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">convert</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">special</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax">-</span><span class="identifier-syntax">with</span><span class="plain-syntax">-</span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ConvertToGoingWithPush</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP39"></a><b>&#167;39. </b>The "surreptitiously" phrases shouldn't be used except in the Standard Rules
<p class="commentary firstcommentary"><a id="SP39" class="paragraph-anchor"></a><b>&#167;39. </b>The "surreptitiously" phrases shouldn't be used except in the Standard Rules
because they temporarily violate invariants for the object tree and the
light variables; the SR uses them carefully in situations where it's known to
work out all right.
@ -907,7 +907,7 @@ work out all right.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">surreptitiously</span><span class="plain-syntax"> </span><span class="identifier-syntax">reckon</span><span class="plain-syntax"> </span><span class="identifier-syntax">darkness</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">SilentlyConsiderLight</span><span class="plain-syntax">(); -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP40"></a><b>&#167;40. </b>These are text substitutions needed to make the capitalised lists work.
<p class="commentary firstcommentary"><a id="SP40" class="paragraph-anchor"></a><b>&#167;40. </b>These are text substitutions needed to make the capitalised lists work.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -920,7 +920,7 @@ work out all right.
<span class="plain-syntax"> </span><span class="identifier-syntax">WriteListOfMarkedObjects</span><span class="plain-syntax">(</span><span class="identifier-syntax">ENGLISH_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">DEFART_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">CFIRSTART_BIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP41"></a><b>&#167;41. </b>This avoids "mentioned" being given to items printed only internally for
<p class="commentary firstcommentary"><a id="SP41" class="paragraph-anchor"></a><b>&#167;41. </b>This avoids "mentioned" being given to items printed only internally for
the sake of a string comparison, and not shown on screen.
</p>
@ -930,7 +930,7 @@ the sake of a string comparison, and not shown on screen.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">expanding</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">comparison</span><span class="plain-syntax"> </span><span class="identifier-syntax">purposes</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">say__comp</span><span class="plain-syntax"> -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP42"></a><b>&#167;42. </b>This is a bit trickier than it looks, because it isn't always set when
<p class="commentary firstcommentary"><a id="SP42" class="paragraph-anchor"></a><b>&#167;42. </b>This is a bit trickier than it looks, because it isn't always set when
one thinks it is. (And since first typing that sentence, I've forgotten
when that would be.)
</p>
@ -941,7 +941,7 @@ when that would be.)
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">whether</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">I6</span><span class="plain-syntax"> </span><span class="identifier-syntax">parser</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple</span><span class="plain-syntax"> </span><span class="identifier-syntax">actions</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">multiflag</span><span class="plain-syntax">==1) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP43"></a><b>&#167;43. </b>The antique forms "yes" and "no" are now somewhat to be regretted, with
<p class="commentary firstcommentary"><a id="SP43" class="paragraph-anchor"></a><b>&#167;43. </b>The antique forms "yes" and "no" are now somewhat to be regretted, with
"decide yes" and "decide no" being clearer ways to write the same thing.
But we seem to be stuck with them.
</p>
@ -956,7 +956,7 @@ But we seem to be stuck with them.
<span class="plain-syntax"> (</span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_no</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">rfalse</span><span class="plain-syntax">; -) - </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP44"></a><b>&#167;44. </b>This is convenient for debugging Inform, but for no other purpose. It
<p class="commentary firstcommentary"><a id="SP44" class="paragraph-anchor"></a><b>&#167;44. </b>This is convenient for debugging Inform, but for no other purpose. It
toggles verbose logging of the type-checker.
</p>
@ -968,13 +968,13 @@ toggles verbose logging of the type-checker.
<span class="identifier-syntax">To</span><span class="plain-syntax"> *** (</span><span class="identifier-syntax">T</span><span class="plain-syntax"> - </span><span class="identifier-syntax">text</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- {-</span><span class="identifier-syntax">primitive</span><span class="plain-syntax">-</span><span class="identifier-syntax">definition</span><span class="plain-syntax">:</span><span class="identifier-syntax">verbose</span><span class="plain-syntax">-</span><span class="identifier-syntax">checking</span><span class="plain-syntax">} -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP45"></a><b>&#167;45. </b>And so, at last...
<p class="commentary firstcommentary"><a id="SP45" class="paragraph-anchor"></a><b>&#167;45. </b>And so, at last...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">Standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">Rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP46"></a><b>&#167;46. </b>...except that this is not quite true, because like most extensions they
<p class="commentary firstcommentary"><a id="SP46" class="paragraph-anchor"></a><b>&#167;46. </b>...except that this is not quite true, because like most extensions they
then quote some documentation for Inform to weave into index pages: though
here it's more of a polite refusal than a manual, since the entire system
documentation is really the description of what was defined in this

View file

@ -44,7 +44,7 @@
<ul class="toc"><li><a href="S-prm.html#SP1">&#167;1. Title</a></li><li><a href="S-prm.html#SP2">&#167;2. Verbs</a></li><li><a href="S-prm.html#SP4">&#167;4. Use Options</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Title. </b>Every Inform 7 extension begins with a standard titling line and a
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Title. </b>Every Inform 7 extension begins with a standard titling line and a
rubric text, and the Standard Rules are no exception:
</p>
@ -56,7 +56,7 @@ rubric text, and the Standard Rules are no exception:
<span class="identifier-syntax">Part</span><span class="plain-syntax"> </span><span class="identifier-syntax">One</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Preamble</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. Verbs. </b>This continues the built-in verbs (i.e. those with meaning built in to the
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Verbs. </b>This continues the built-in verbs (i.e. those with meaning built in to the
Inform compiler), adding those which are relevant only to IF.
</p>
@ -69,7 +69,7 @@ phrase, and is thus only useful for built-in meanings.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">built</span><span class="plain-syntax">-</span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax">-</span><span class="identifier-syntax">ends</span><span class="plain-syntax">-</span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> + </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">built</span><span class="plain-syntax">-</span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax">-</span><span class="identifier-syntax">ends</span><span class="plain-syntax">-</span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>Verbs used as imperatives: "Understand ... as ...", for example.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Verbs used as imperatives: "Understand ... as ...", for example.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -77,7 +77,7 @@ phrase, and is thus only useful for built-in meanings.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax"> </span><span class="identifier-syntax">along</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">imperative</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">built</span><span class="plain-syntax">-</span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax">-</span><span class="identifier-syntax">along</span><span class="plain-syntax">-</span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> </span><span class="identifier-syntax">map</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">imperative</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">built</span><span class="plain-syntax">-</span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">-</span><span class="identifier-syntax">map</span><span class="plain-syntax">-</span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. Use Options. </b>In fact, many of the definitions below are handled slightly differently in
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Use Options. </b>In fact, many of the definitions below are handled slightly differently in
the <span class="extract"><span class="extract-syntax">srules</span></span> template files, to avoid the need for conditional compilatipn
(and thus to enable the template to be assimilated just once); but we
continue to give them the traditional constant names, for the sake of any
@ -96,7 +96,7 @@ third-party extensions using these.
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">BRIEF</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">descriptions</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> (- </span><span class="identifier-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFAULT_BRIEF_DESCRIPTIONS</span><span class="plain-syntax">; -).</span>
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">SUPERBRIEF</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">descriptions</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> (- </span><span class="identifier-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFAULT_SUPERBRIEF_DESCRIPTIONS</span><span class="plain-syntax">; -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b>This setting is to do with the command parser's handling of multiple objects.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>This setting is to do with the command parser's handling of multiple objects.
Essentially it means that "take all" can pick up at most 100 items.
</p>

View file

@ -58,7 +58,7 @@ MathJax = {
<ul class="toc"><li><a href="S-pwm.html#SP1">&#167;1. Verbs and Relations</a></li><li><a href="S-pwm.html#SP9">&#167;9. Kinds</a></li><li><a href="S-pwm.html#SP11">&#167;11. Rooms</a></li><li><a href="S-pwm.html#SP16">&#167;16. Things</a></li><li><a href="S-pwm.html#SP22">&#167;22. Directions</a></li><li><a href="S-pwm.html#SP25">&#167;25. Doors</a></li><li><a href="S-pwm.html#SP28">&#167;28. Containers and supporters</a></li><li><a href="S-pwm.html#SP30">&#167;30. Kinds vs patterns</a></li><li><a href="S-pwm.html#SP31">&#167;31. The openability pattern</a></li><li><a href="S-pwm.html#SP32">&#167;32. The lockability pattern</a></li><li><a href="S-pwm.html#SP34">&#167;34. Backdrops</a></li><li><a href="S-pwm.html#SP35">&#167;35. People</a></li><li><a href="S-pwm.html#SP37">&#167;37. Non-fundamental kinds</a></li><li><a href="S-pwm.html#SP38">&#167;38. Men, women and animals</a></li><li><a href="S-pwm.html#SP40">&#167;40. Devices</a></li><li><a href="S-pwm.html#SP41">&#167;41. Vehicles</a></li><li><a href="S-pwm.html#SP43">&#167;43. Player's holdalls</a></li><li><a href="S-pwm.html#SP44">&#167;44. Correspondence between I6 and I7 property and attribute names</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Verbs and Relations. </b>We first extend our suite of verbs and meanings to cover standard
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Verbs and Relations. </b>We first extend our suite of verbs and meanings to cover standard
world-modelling terms.
</p>
@ -87,7 +87,7 @@ world-modelling terms.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax"> </span><span class="identifier-syntax">incorporation</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">parts</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax"> </span><span class="identifier-syntax">incorporation</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The enclosure relation, indirectly defined in terms of the above more
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The enclosure relation, indirectly defined in terms of the above more
fundamental ones, has a verb but no prepositions (though of course "to be
enclosed by" is in effect a prepositional expression of this).
</p>
@ -95,7 +95,7 @@ enclosed by" is in effect a prepositional expression of this).
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">enclose</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">enclosure</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>Those three relations expressed how the inanimate world is arranged, on
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Those three relations expressed how the inanimate world is arranged, on
the small scale: the relationships become a little more complicated once
living beings are involved.
</p>
@ -105,7 +105,7 @@ living beings are involved.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">hold</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">holding</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">wear</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">wearing</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b>One living being is special to our language &mdash; the protagonist character,
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>One living being is special to our language &mdash; the protagonist character,
that is, the "player" &mdash; and so these three verbs all have adjectival forms
which imply the player as the missing term.
</p>
@ -115,7 +115,7 @@ which imply the player as the missing term.
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">carried</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">carrying</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">held</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">holding</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b>Animate beings also have the ability to see and touch their surroundings,
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Animate beings also have the ability to see and touch their surroundings,
but note that we only model the ability to do these things &mdash; we do not attempt
to track what they actually do see or touch at any given moment, so there are
no built-in verbs "to see" or "to touch".
@ -125,7 +125,7 @@ no built-in verbs "to see" or "to touch".
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">able</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">see</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">able</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">touch</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">touchability</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. </b>The special status of the player as the sensory focus, so to speak, is
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The special status of the player as the sensory focus, so to speak, is
again shown in the adjectives defined here:
</p>
@ -133,7 +133,7 @@ again shown in the adjectives defined here:
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">Something</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">visible</span><span class="plain-syntax"> </span><span class="identifier-syntax">rather</span><span class="plain-syntax"> </span><span class="identifier-syntax">than</span><span class="plain-syntax"> </span><span class="identifier-syntax">invisible</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">see</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">Something</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">touchable</span><span class="plain-syntax"> </span><span class="identifier-syntax">rather</span><span class="plain-syntax"> </span><span class="identifier-syntax">than</span><span class="plain-syntax"> </span><span class="identifier-syntax">untouchable</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">touch</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>While many of the world-modelling assumptions in I7 are carried over from
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>While many of the world-modelling assumptions in I7 are carried over from
those tried and tested by I6, the idea of concealment is an exception. The
old I6 attribute <span class="extract"><span class="extract-syntax">concealed</span></span> simply marked some objects (which we would
call "things") as being hidden from view in some way, but was never very
@ -152,7 +152,7 @@ long gone.
<span class="identifier-syntax">he</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">concealing</span><span class="plain-syntax">) </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">concealment</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">Something</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">concealed</span><span class="plain-syntax"> </span><span class="identifier-syntax">rather</span><span class="plain-syntax"> </span><span class="identifier-syntax">than</span><span class="plain-syntax"> </span><span class="identifier-syntax">unconcealed</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">conceals</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>A final sort of pseudo-containment: does the entire world contain
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>A final sort of pseudo-containment: does the entire world contain
something, or not? (For things destroyed during play, or not yet created, the
answer would be no.)
</p>
@ -165,7 +165,7 @@ answer would be no.)
<span class="identifier-syntax">Definition</span><span class="plain-syntax">: </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">happening</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">I6</span><span class="plain-syntax"> </span><span class="identifier-syntax">condition</span><span class="plain-syntax"> </span><span class="string-syntax">"scene_status--&gt;(*1-1)==1"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">says</span><span class="plain-syntax"> </span><span class="identifier-syntax">so</span><span class="plain-syntax"> (</span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">currently</span><span class="plain-syntax"> </span><span class="identifier-syntax">taking</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. Kinds. </b>Basic Imform provides the kind "object", but no specialisations of it. We
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Kinds. </b>Basic Imform provides the kind "object", but no specialisations of it. We
will use objects to represent physical objects and locations, with the
hierarchy given below. (The template code assumes these kinds will be
declared in this order, so be careful rearranging them.)
@ -192,7 +192,7 @@ correct, but "people" is more idiomatically usual.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">region</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b>At this point, then, the hierarchy looks like so:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>At this point, then, the hierarchy looks like so:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -226,7 +226,7 @@ those are merely design choices, and Inform would not be troubled by their
absence.
</p>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. Rooms. </b>We now detail each of the fundamental kinds in turn, in order of their
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Rooms. </b>We now detail each of the fundamental kinds in turn, in order of their
declaration, and thus beginning with rooms.
</p>
@ -238,7 +238,7 @@ declaration, and thus beginning with rooms.
<span class="string-syntax">room is mostly unable to sense, or interact with, anything in a different room.</span>
<span class="string-syntax">Rooms are arranged in a map."</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>Rooms have rather few properties built in; this reflects their usual role
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Rooms have rather few properties built in; this reflects their usual role
in IF as ambient environments in which interesting things happen, rather
than being direct participants.
</p>
@ -250,7 +250,7 @@ than being direct participants.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </b>Note that the "map region" property here is created with the type
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Note that the "map region" property here is created with the type
"object", not "region", even though we think of it as always being a
region. This is because of I7's type-checking rule: the type "object" can
legally hold 0, meaning "nothing", but more specific object types &mdash; in
@ -264,7 +264,7 @@ specific.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">map</span><span class="plain-syntax"> </span><span class="identifier-syntax">region</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">map</span><span class="plain-syntax"> </span><span class="identifier-syntax">region</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. </b>Rooms have two specialised spatial relationships of their own, which again
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Rooms have two specialised spatial relationships of their own, which again
we need verbal forms of:
</p>
@ -274,7 +274,7 @@ we need verbal forms of:
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">regionally</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax"> </span><span class="identifier-syntax">regional</span><span class="plain-syntax">-</span><span class="identifier-syntax">containment</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. </b>There's no detailed writeup of regions, since they have no properties
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>There's no detailed writeup of regions, since they have no properties
in the usual setup. So let's add this here for the Kinds index:
</p>
@ -289,7 +289,7 @@ in the usual setup. So let's add this here for the Kinds index:
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">region</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">privately</span><span class="plain-syntax">-</span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">publicly</span><span class="plain-syntax">-</span><span class="identifier-syntax">named</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">region</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">publicly</span><span class="plain-syntax">-</span><span class="identifier-syntax">named</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16"></a><b>&#167;16. Things. </b>Things are ubiquitous:
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. Things. </b>Things are ubiquitous:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -300,7 +300,7 @@ in the usual setup. So let's add this here for the Kinds index:
<span class="string-syntax">mislaid umbrellas might all be examples, and so might more surprising things</span>
<span class="string-syntax">like the sound of birdsong or a shaft of sunlight."</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17"></a><b>&#167;17. </b>The large number of either/or properties things can have reflects the
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>The large number of either/or properties things can have reflects the
flexibility of the I6 world model, which we largely adopt for I7 too. That
is, you can have any combination of lit/unlit, edible/inedible, fixed in
place/portable, and so on. We can divide them into three broad categories:
@ -322,7 +322,7 @@ from the world model entirely.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">wearable</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushable</span><span class="plain-syntax"> </span><span class="identifier-syntax">between</span><span class="plain-syntax"> </span><span class="identifier-syntax">rooms</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18"></a><b>&#167;18. </b>Second, status properties, which in effect refer to the past history of an
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Second, status properties, which in effect refer to the past history of an
item without our needing to use the past tenses, which can be tricky or
inefficient. "Handled" means that the player has at some time carried the
thing in question. (We used to have "initially carried" here, too, but that's
@ -332,7 +332,7 @@ now considered a part of the verb "to carry" rather than an adjective.)
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">handled</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19"></a><b>&#167;19. </b>Third, linguistic properties, influencing when and how the thing's name
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Third, linguistic properties, influencing when and how the thing's name
will be included in lists. ("Mentioned" goes here rather than as a status
property because it refers only to the current room description, so it carries
no long-term historic information. "Marked for listing", similarly, carries
@ -347,7 +347,7 @@ also by some of the I7 template routines.)
<span class="identifier-syntax">unmarked</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">mentioned</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">unmentioned</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">mentioned</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20"></a><b>&#167;20. </b>We now have a mixed bag of value properties, all descriptive &mdash; it's an
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>We now have a mixed bag of value properties, all descriptive &mdash; it's an
interesting reflection on how qualitative English text usually is that the
world model so seldom needs quantitative properties (sizes, weights, distances,
and so on).
@ -357,7 +357,7 @@ and so on).
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">initial</span><span class="plain-syntax"> </span><span class="identifier-syntax">appearance</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21"></a><b>&#167;21. </b>Lastly on things: an implication about scenery. The following sentence looks
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>Lastly on things: an implication about scenery. The following sentence looks
like an assertion much like others above ("A thing is usually inedible", for
instance) &mdash; but in fact it is an "implication": it says that an object having
one property also probably has another. The Standard Rules make only very
@ -374,7 +374,7 @@ just as every sentence qualified by "usually" can.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Scenery</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">fixed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax">. </span><span class="comment-syntax">n implication.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22"></a><b>&#167;22. Directions. </b>The first important point about directions is that they are not things and
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. Directions. </b>The first important point about directions is that they are not things and
not rooms. They are not positions in the world, but imaginary arrows pointing
in different ways one could go from those positions. In the language of
geometry, we could call them tangent vectors which can be taken anywhere
@ -404,7 +404,7 @@ an Inform 7 work, too.) More concisely:
<span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">unmarked</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">direction</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">scenery</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">direction</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">scenery</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23"></a><b>&#167;23. </b>The following value property expresses that all directions in I7 come in
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>The following value property expresses that all directions in I7 come in
matched, diametrically opposing pairs &mdash; north/south, up/down and so on.
This is a concept we need to provide so that I7 can apply its assumption
that if room X is north of room Y, then probably room Y is also south of
@ -416,7 +416,7 @@ not "object": a value of 0, meaning "there's no opposite", is illegal.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">direction</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">direction</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">opposite</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24"></a><b>&#167;24. </b>The Standard Rules define only thirteen I7 objects, and here we go with
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>The Standard Rules define only thirteen I7 objects, and here we go with
twelve of them: the standard set of directions, which come in six pairs
of opposites.
</p>
@ -500,7 +500,7 @@ the traditional order is N, NE, NW, S, SE, SW, E, W, U, D, IN, OUT.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">below</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax"> </span><span class="identifier-syntax">mapping</span><span class="plain-syntax"> </span><span class="identifier-syntax">down</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">mapped</span><span class="plain-syntax"> </span><span class="identifier-syntax">below</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax"> </span><span class="identifier-syntax">mapping</span><span class="plain-syntax"> </span><span class="identifier-syntax">down</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP25"></a><b>&#167;25. Doors. </b>Doors are, literally, a difficult edge case for the world model of IF, since
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. Doors. </b>Doors are, literally, a difficult edge case for the world model of IF, since
they occupy the awkward junction between the two different ways of dividing
up space: the "vertical" model of objects containing and supporting each
other, all within a tree rooted by the room which represents, for the moment,
@ -522,7 +522,7 @@ to be in?
<span class="string-syntax">sometimes only one-way (for instance if you write 'East of the Ballroom is</span>
<span class="string-syntax">the long slide. Through the long slide is the cellar.')."</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26"></a><b>&#167;26. </b>This is the first kind we have declared to be a kind of something else:
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>This is the first kind we have declared to be a kind of something else:
a door is a kind of thing. That means a door inherits all of the properties
of a thing, but in a way which allows us to change the normal expectations.
So here we see the first case of assertions which contradict earlier ones,
@ -538,7 +538,7 @@ if we allowed anybody to move them around during play. So:
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">door</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">fixed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">door</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">never</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushable</span><span class="plain-syntax"> </span><span class="identifier-syntax">between</span><span class="plain-syntax"> </span><span class="identifier-syntax">rooms</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27"></a><b>&#167;27. </b>"Every exit is an entrance somewhere else," as Stoppard's play
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>"Every exit is an entrance somewhere else," as Stoppard's play
"Rosencrantz and Guildenstern are Dead" puts it: and though not all
I7 doors are present on both sides, they do nevertheless have two sides.
The representation of this is quite tricky because, as Stoppard implies,
@ -561,7 +561,7 @@ the relation data is stored at run-time.
<span class="identifier-syntax">Leading</span><span class="plain-syntax">-</span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">relates</span><span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">other</span><span class="plain-syntax"> </span><span class="identifier-syntax">side</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">various</span><span class="plain-syntax"> </span><span class="identifier-syntax">doors</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">leading</span><span class="plain-syntax">-</span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP28"></a><b>&#167;28. Containers and supporters. </b>The carrying capacity property is the exception to the remarks above about
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. Containers and supporters. </b>The carrying capacity property is the exception to the remarks above about
the qualitative nature of the world model: here for the first and only time
we have a value which can be meaningfully compared.
</p>
@ -579,7 +579,7 @@ we have a value which can be meaningfully compared.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">carrying</span><span class="plain-syntax"> </span><span class="identifier-syntax">capacity</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">carrying</span><span class="plain-syntax"> </span><span class="identifier-syntax">capacity</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP29"></a><b>&#167;29. </b>The most interesting thing to note here (and we will see it again in the
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>The most interesting thing to note here (and we will see it again in the
definition of "people") is that "transparent" the I7 property is not
a direct match onto <span class="extract"><span class="extract-syntax">transparent</span></span> the I6 attribute. In I7, the term is
applicable only to containers (a reform made in January 2008, but clarifying
@ -606,7 +606,7 @@ these things, and expect the user to write activity rules instead.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">fixed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP30"></a><b>&#167;30. Kinds vs patterns. </b>A problem faced by all object-oriented systems is "fear of the diamond",
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Kinds vs patterns. </b>A problem faced by all object-oriented systems is "fear of the diamond",
the problematic diagram of inheritance which results when we have two
different subclasses B and C of a class A, which represent quite different
ideas, but then we also turn out to want some behaviour D which is shared
@ -639,7 +639,7 @@ between rooms, whereas containers do it for the "vertical" spatial model
of objects enclosing each other.)
</p>
<p class="commentary firstcommentary"><a id="SP31"></a><b>&#167;31. The openability pattern. </b>To satisfy the openability pattern, a thing has to provide both of the
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. The openability pattern. </b>To satisfy the openability pattern, a thing has to provide both of the
either/or properties "open" and "openable". This entitles it to be
opened and closed by the opening and closing actions, defined below.
Note that I7 has no formal concept of patterns as part of its type-checking:
@ -661,7 +661,7 @@ don't share the pattern.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">open</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">closed</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">open</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">openable</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">unopenable</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">unopenable</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP32"></a><b>&#167;32. The lockability pattern. </b>And similarly for lockability, because a principle of the world model is
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>&#167;32. The lockability pattern. </b>And similarly for lockability, because a principle of the world model is
that any spatial barrier can be given a lock if the designer so chooses. To
satisfy this pattern, a thing must
</p>
@ -693,7 +693,7 @@ addition.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">locked</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">closed</span><span class="plain-syntax">. </span><span class="comment-syntax">n implication.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">lockable</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">openable</span><span class="plain-syntax">. </span><span class="comment-syntax">n implication.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP33"></a><b>&#167;33. </b>Note that the lock-fitting relation has, as its domains, "thing" and
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>&#167;33. </b>Note that the lock-fitting relation has, as its domains, "thing" and
"thing". That means that compile-time typechecking will not reject an
attempt to apply the relation to (say) two vehicles. At run time, evaluating
"if X unlocks P" where P is a peculiar thing with no possibility of a lock
@ -706,7 +706,7 @@ not at compile-time.
<span class="identifier-syntax">Lock</span><span class="plain-syntax">-</span><span class="identifier-syntax">fitting</span><span class="plain-syntax"> </span><span class="identifier-syntax">relates</span><span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">matching</span><span class="plain-syntax"> </span><span class="identifier-syntax">key</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">various</span><span class="plain-syntax"> </span><span class="identifier-syntax">things</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">unlock</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">lock</span><span class="plain-syntax">-</span><span class="identifier-syntax">fitting</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP34"></a><b>&#167;34. Backdrops. </b>The true subtlety of backdrops is not visible in the brief description here:
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>&#167;34. Backdrops. </b>The true subtlety of backdrops is not visible in the brief description here:
but they require careful handling both in Inform and in the template layer code,
because they can be in many rooms at once.
</p>
@ -722,7 +722,7 @@ because they can be in many rooms at once.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">backdrop</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">fixed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">backdrop</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">never</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushable</span><span class="plain-syntax"> </span><span class="identifier-syntax">between</span><span class="plain-syntax"> </span><span class="identifier-syntax">rooms</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP35"></a><b>&#167;35. People. </b>From a compilation point of view, people are surprisingly easy to deal with.
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>&#167;35. People. </b>From a compilation point of view, people are surprisingly easy to deal with.
It may well be argued that this is because the I6 world model is so sketchy
in modelling them, but that may actually be a good thing, because it's not at
all obvious that any single model will be sensible for what different
@ -764,7 +764,7 @@ and the valued property <span class="extract"><span class="extract-syntax">befor
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP36"></a><b>&#167;36. </b>One among the people is special: the enigmatic default protagonist, whose
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>&#167;36. </b>One among the people is special: the enigmatic default protagonist, whose
name is not "player" but "yourself". (The I6 library requires this object to
be created as <span class="extract"><span class="extract-syntax">selfobj</span></span>, but that's not a name that is ever printed or parsed:
it's a constant value used only in I6 source code.)
@ -798,7 +798,7 @@ that property for the "yourself" object, so we need do nothing here.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">yourself</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"selfobj"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP37"></a><b>&#167;37. Non-fundamental kinds. </b>We have now finished defining the nine fundamental kinds which Inform requires
<p class="commentary firstcommentary"><a id="SP37" class="paragraph-anchor"></a><b>&#167;37. Non-fundamental kinds. </b>We have now finished defining the nine fundamental kinds which Inform requires
in order for it to function. There are six more to define, but it's worth
emphasising that none of these is required or assumed by either Inform or
its template layer of I6 code. So any of them could be changed drastically
@ -819,7 +819,7 @@ white paper, "Natural Language, Semantic Analysis and Interactive Fiction"
(2005), but briefly: we are minimalist but not puritanically so.
</p>
<p class="commentary firstcommentary"><a id="SP38"></a><b>&#167;38. Men, women and animals. </b>Of these discretionary kinds, so to speak, "man" and "woman" are perhaps
<p class="commentary firstcommentary"><a id="SP38" class="paragraph-anchor"></a><b>&#167;38. Men, women and animals. </b>Of these discretionary kinds, so to speak, "man" and "woman" are perhaps
the least challengeable. They are not obviously the domains of any
natural relation (unless one takes a very old-fashioned idea of gender
identity and supposes that, oh, "X keeps Y" implies that X is a wealthy
@ -866,7 +866,7 @@ purely in terms of gender: they have no distinguishing behaviour.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">specification</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">woman</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="string-syntax">"Represents a woman or girl."</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">woman</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">female</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">woman</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">never</span><span class="plain-syntax"> </span><span class="identifier-syntax">neuter</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP39"></a><b>&#167;39. </b>But what about "animal"? Animals turn up often in IF, and of course
<p class="commentary firstcommentary"><a id="SP39" class="paragraph-anchor"></a><b>&#167;39. </b>But what about "animal"? Animals turn up often in IF, and of course
domestic animals have been part of human society since prehistoric times:
but then again, the same can be said for stoves and larders, and we aren't
declaring kinds for those.
@ -894,7 +894,7 @@ not even any implication for gender.
<span class="string-syntax">non-human living creature reasonably large and possible to interact with: a</span>
<span class="string-syntax">giant Venus fly-trap might qualify, but not a patch of lichen."</span>
</pre>
<p class="commentary firstcommentary"><a id="SP40"></a><b>&#167;40. Devices. </b>The justification for providing a "device" kind is much thinner. It's done
<p class="commentary firstcommentary"><a id="SP40" class="paragraph-anchor"></a><b>&#167;40. Devices. </b>The justification for providing a "device" kind is much thinner. It's done
largely for traditional reasons &mdash; such a concept existed in the I6 library,
which in turn followed Infocom conventions dating from the early 1980s.
The inclusion is defensible as representing a common linguistic category
@ -917,7 +917,7 @@ from a mousetrap to a nuclear reactor.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">specification</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">device</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="string-syntax">"Represents a machine or contrivance of some</span>
<span class="string-syntax">kind which can be switched on or off."</span>
</pre>
<p class="commentary firstcommentary"><a id="SP41"></a><b>&#167;41. Vehicles. </b>Here again the justification boils down to tradition. Vehicles were a
<p class="commentary firstcommentary"><a id="SP41" class="paragraph-anchor"></a><b>&#167;41. Vehicles. </b>Here again the justification boils down to tradition. Vehicles were a
staple ingredient of the Infocom classics, largely because of code
originally written for the inflatable boat in the 1978-79 mainframe version
of "Zork", which was then copied through into later titles. Unlike
@ -968,7 +968,7 @@ property of (for instance) a door or a person.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">vehicle</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">enterable</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP42"></a><b>&#167;42. </b>The part about vehicles not usually being portable is simply for realism's
<p class="commentary firstcommentary"><a id="SP42" class="paragraph-anchor"></a><b>&#167;42. </b>The part about vehicles not usually being portable is simply for realism's
sake: generally speaking if something can hold human weight it's pretty
large and heavy. (A bicycle is an edge case, and a skateboard is clearly
an exception, but that's why the rule is only "usually".)
@ -984,7 +984,7 @@ boats or spacecraft between rooms.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">vehicle</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">portable</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP43"></a><b>&#167;43. Player's holdalls. </b>This is the final kind created in the Standard Rules, and probably the most
<p class="commentary firstcommentary"><a id="SP43" class="paragraph-anchor"></a><b>&#167;43. Player's holdalls. </b>This is the final kind created in the Standard Rules, and probably the most
doubtful of all. It simply provides a hook to a cute and traditional feature
of the I6 library whereby spare possessions are automatically cleared out
of the player's way: it derives from the rucksack in the 1993 IF title "Curses".
@ -1002,7 +1002,7 @@ of the player's way: it derives from the rucksack in the 1993 IF title "Curses".
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">holdall</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">always</span><span class="plain-syntax"> </span><span class="identifier-syntax">portable</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">holdall</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">openable</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP44"></a><b>&#167;44. Correspondence between I6 and I7 property and attribute names. </b>All of the kinds, objects and properties which make up the standard kit
<p class="commentary firstcommentary"><a id="SP44" class="paragraph-anchor"></a><b>&#167;44. Correspondence between I6 and I7 property and attribute names. </b>All of the kinds, objects and properties which make up the standard kit
provided to every source text are now complete. We conclude Section SR1 by
giving the Inform compiler a dictionary to tell it how I7's names for
properties &mdash; some value properties, some either/or &mdash; mesh with those
@ -1032,7 +1032,7 @@ dictionary of equivalents, and here it is. (Any I7 property not named is
handled purely by I7 source text in the remainder of the Standard Rules.)
</p>
<p class="commentary firstcommentary"><a id="SP45"></a><b>&#167;45. </b>First, equivalents where I7 either/or properties map directly onto
<p class="commentary firstcommentary"><a id="SP45" class="paragraph-anchor"></a><b>&#167;45. </b>First, equivalents where I7 either/or properties map directly onto
I6 attributes. Note the way "lit" (for things) and "lighted" (for rooms)
both map onto the same I6 attribute, <span class="extract"><span class="extract-syntax">light</span></span>. Attributes were in scarce
supply in I6 (with a limit of 32 in the early days, later raised to 48) and
@ -1067,7 +1067,7 @@ meanings were basically similar.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">marked</span><span class="plain-syntax"> </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"workflag"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">grouping</span><span class="plain-syntax"> </span><span class="identifier-syntax">key</span><span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"list_together"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP46"></a><b>&#167;46. </b>Second, the I7 value properties mapping onto I6 properties. Again,
<p class="commentary firstcommentary"><a id="SP46" class="paragraph-anchor"></a><b>&#167;46. </b>Second, the I7 value properties mapping onto I6 properties. Again,
<span class="extract"><span class="extract-syntax">map_region</span></span> is a new I6 property of our own, while the rest are I6 staples.
And see also "other side", which is translated above for timing reasons.
</p>

View file

@ -58,7 +58,7 @@ MathJax = {
<ul class="toc"><li><a href="S-var.html#SP1">&#167;1. The player's situation</a></li><li><a href="S-var.html#SP11">&#167;11. Rulebooks</a></li><li><a href="S-var.html#SP21">&#167;21. Rules</a></li><li><a href="S-var.html#SP22">&#167;22. Startup</a></li><li><a href="S-var.html#SP24">&#167;24. The turn sequence</a></li><li><a href="S-var.html#SP29">&#167;29. Shutdown</a></li><li><a href="S-var.html#SP30">&#167;30. Scene changing</a></li><li><a href="S-var.html#SP32">&#167;32. Action-processing</a></li><li><a href="S-var.html#SP37">&#167;37. Specific action-processing</a></li><li><a href="S-var.html#SP41">&#167;41. Player's action awareness</a></li><li><a href="S-var.html#SP42">&#167;42. Accessibility</a></li><li><a href="S-var.html#SP43">&#167;43. Reaching inside</a></li><li><a href="S-var.html#SP44">&#167;44. Reaching outside</a></li><li><a href="S-var.html#SP45">&#167;45. Visibility</a></li><li><a href="S-var.html#SP46">&#167;46. Does the player mean</a></li><li><a href="S-var.html#SP48">&#167;48. Adjectives applied to values</a></li><li><a href="S-var.html#SP49">&#167;49. Scene descriptions</a></li><li><a href="S-var.html#SP50">&#167;50. Command parser errors</a></li><li><a href="S-var.html#SP51">&#167;51. Internal rules</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. The player's situation. </b>A set of global variables defines the player's current situation in
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. The player's situation. </b>A set of global variables defines the player's current situation in
space and time.
</p>
@ -84,7 +84,7 @@ has a "translates into Inter" sentence.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"player"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The I7 variable "location" corresponds to I6's <span class="extract"><span class="extract-syntax">real_location</span></span>, not
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The I7 variable "location" corresponds to I6's <span class="extract"><span class="extract-syntax">real_location</span></span>, not
<span class="extract"><span class="extract-syntax">location</span></span>. Its value is never equal to a pseudo-room representing darkness:
it is always an actual room, and I7 has nothing corresponding to I6's
<span class="extract"><span class="extract-syntax">thedark</span></span> "room". Similarly, we use an I7 variable "darkness witnessed" for a
@ -112,7 +112,7 @@ and this cannot be changed at run-time.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"turns"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">day</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"the_time"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>It is arguable that "noun", "second noun" and "person asked" ought
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>It is arguable that "noun", "second noun" and "person asked" ought
to be rulebook variables belonging to the action-processing rules, so that
they essentially did not exist outside of the context of an ongoing action.
The reason this isn't done is partly historical (rulebook variables were a
@ -146,7 +146,7 @@ meanings from sentence to sentence.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">failed</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"reason_the_action_failed"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">described</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"self"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b>"Person reaching" turns out to have exactly the same meaning as "person
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>"Person reaching" turns out to have exactly the same meaning as "person
asked" &mdash; they are both the <span class="extract"><span class="extract-syntax">actor</span></span>, in Inter terms, but are used in different
situations.
</p>
@ -164,21 +164,16 @@ situations.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">question</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"parameter_object"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">particular</span><span class="plain-syntax"> </span><span class="identifier-syntax">possession</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"particular_possession"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b>Parsing variables follow. The I6 parser tends to put any data read as part
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Parsing variables follow. The I6 parser tends to put any data read as part
of a command into the variable <span class="extract"><span class="extract-syntax">parsed_number</span></span>, but then, Inter is typeless:
we can't have a single I7 variable for all these possibilities since it could
then have no legal type. We solve this as follows. Whenever a kind of value
\(K\) is created which can be parsed as part of a command, an I7 variable "the
\(K\) understood" is also created, as a \(K\) that varies. All of these variables
are translated into Inter's <span class="extract"><span class="extract-syntax">parsed_number</span></span>, so in effect they provide aliases
of each possible type for the same underlying memory location. The four
exceptional kinds of value not parsed by the systematic approaches in Inform
for enumerated KOVs and units are "number", "time", "snippet" and "truth
state": because of their exceptional status, they don't get "the \(K\)
understood" variables created automatically for them, so we must construct
those by hand. Hence "the number understood", "the time understood", "the
topic understood" (for historical reasons this one is not called "the snippet
understood"), "the truth state understood" but no others.
of each possible type for the same underlying memory location. The one exception
is for "the topic understood" (for historical reasons this one is not called
"the snippet understood", and so we make it by hand).
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -186,11 +181,7 @@ understood"), "the truth state understood" but no others.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">var_command</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">snippet</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">matched</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">snippet</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">var_understood</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">real</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">var_understood</span><span class="plain-syntax"> -- </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">real</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">topic</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">snippet</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">truth</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">truth</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">current</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"players_command"</span><span class="plain-syntax">.</span>
@ -199,7 +190,7 @@ understood"), "the truth state understood" but no others.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">current</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span>
<span class="plain-syntax"> </span><span class="string-syntax">"multiple_object_item"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. </b></p>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Section</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Presentation</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">screen</span>
@ -216,7 +207,7 @@ understood"), "the truth state understood" but no others.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"listing_size"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>Now some linguistic variables:
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Now some linguistic variables:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -226,7 +217,7 @@ understood"), "the truth state understood" but no others.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">prior</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"prior_named_noun"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">An</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">grouping</span><span class="plain-syntax"> </span><span class="identifier-syntax">key</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>...but they are not the last global variables created by the Standard Rules.
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>...but they are not the last global variables created by the Standard Rules.
</p>
<p class="commentary">These bibliographic data variables are concealed because they are under a
@ -268,7 +259,7 @@ can be sure that we are first, so everything works.
<span class="identifier-syntax">Figure</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">cover</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">file</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">cover</span><span class="plain-syntax"> </span><span class="identifier-syntax">art</span><span class="plain-syntax"> (</span><span class="string-syntax">"The cover art."</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b>And we finish out the set with some "secret" variables used only by the
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>And we finish out the set with some "secret" variables used only by the
Standard Rules or by Inform, and which are therefore also unindexed. Their
names are all hyphenated, to reduce the chance of anyone stumbling into
them in a namespace clash.
@ -317,7 +308,7 @@ run-time for what is in the end only a label.)
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">I6</span><span class="plain-syntax">-</span><span class="identifier-syntax">varying</span><span class="plain-syntax">-</span><span class="identifier-syntax">global</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">I6</span><span class="plain-syntax">-</span><span class="identifier-syntax">varying</span><span class="plain-syntax">-</span><span class="identifier-syntax">global</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"nothing"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b>The remaining secret variables are:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The remaining secret variables are:
</p>
<ul class="items"><li>(1) The "item-pushed-between-rooms" is needed to get the identity of
@ -342,7 +333,7 @@ preambles to rules in object-based rulebooks.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">being</span><span class="plain-syntax"> </span><span class="identifier-syntax">changed</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">. </span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">being</span><span class="plain-syntax"> </span><span class="identifier-syntax">changed</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"parameter_value"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. Rulebooks. </b>Whereas Basic Inform equips the language with only a handful of rulebooks
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Rulebooks. </b>Whereas Basic Inform equips the language with only a handful of rulebooks
to start out, the Standard Rules are replete with them.
</p>
@ -358,7 +349,7 @@ Rulebooks of the Inform source code.
</li><li>(c) The I6 <span class="extract"><span class="extract-syntax">Constant</span></span> definitions in the form <span class="extract"><span class="extract-syntax">TURN_SEQUENCE_RB</span></span> in the file
<span class="extract"><span class="extract-syntax">Definitions.i6t</span></span> of the <span class="extract"><span class="extract-syntax">basicinform</span></span> template.
</li></ul>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>When an interactive fiction project using the Standard Rules starts up,
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>When an interactive fiction project using the Standard Rules starts up,
it does the following:
</p>
@ -383,7 +374,7 @@ about quitting or restarting.
<span class="identifier-syntax">Turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequence</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </b>Now a set of rulebooks to do with the passage of time.
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Now a set of rulebooks to do with the passage of time.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -394,7 +385,7 @@ about quitting or restarting.
<span class="identifier-syntax">When</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">ends</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">based</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Every</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. </b>The action machinery requires some 16 rulebooks to work, though that is
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>The action machinery requires some 16 rulebooks to work, though that is
the result of gradual simplification &mdash; in 2006 it required 25, for instance.
The "action-processing" rulebook, like the turn sequence rulebook, is a
master of ceremonies: it belongs to the Standard Rules and is only rarely if
@ -426,7 +417,7 @@ what rulebooks we consult next depends on what the action is (hence "specific")
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">truth</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">within</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">sight</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">awareness</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. </b>The rules on accessibility and visibility, which control whether an action
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>The rules on accessibility and visibility, which control whether an action
is physically possible, have named outcomes as a taste of syntactic sugar.
</p>
@ -440,7 +431,7 @@ is physically possible, have named outcomes as a taste of syntactic sugar.
<span class="identifier-syntax">Visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">have</span><span class="plain-syntax"> </span><span class="identifier-syntax">outcomes</span><span class="plain-syntax"> </span><span class="identifier-syntax">there</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">sufficient</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax"> (</span><span class="identifier-syntax">failure</span><span class="plain-syntax">) </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">there</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span>
<span class="identifier-syntax">insufficient</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax"> (</span><span class="identifier-syntax">success</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16"></a><b>&#167;16. </b>Two rulebooks govern the processing of asking other people to carry out actions:
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>Two rulebooks govern the processing of asking other people to carry out actions:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -448,7 +439,7 @@ is physically possible, have named outcomes as a taste of syntactic sugar.
<span class="identifier-syntax">Persuasion</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">have</span><span class="plain-syntax"> </span><span class="identifier-syntax">outcomes</span><span class="plain-syntax"> </span><span class="identifier-syntax">persuasion</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax"> (</span><span class="identifier-syntax">success</span><span class="plain-syntax">) </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">persuasion</span><span class="plain-syntax"> </span><span class="identifier-syntax">fails</span><span class="plain-syntax"> (</span><span class="identifier-syntax">failure</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">Unsuccessful</span><span class="plain-syntax"> </span><span class="identifier-syntax">attempt</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17"></a><b>&#167;17. </b>Next, the six classic rulebooks best known to users of Inform. It's
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>Next, the six classic rulebooks best known to users of Inform. It's
perhaps an unfortunate point of the design that there are so many as six:
that seems rather a lot of stages to go through, and indeed means that there
is sometimes some ambiguity about which rulebook to use if one wants to
@ -510,7 +501,7 @@ have to be forbidden.
<span class="identifier-syntax">After</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Report</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18"></a><b>&#167;18. </b>The next rulebook in this roundup is one used for parsing ambiguous
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>The next rulebook in this roundup is one used for parsing ambiguous
commands during play. This looks like the job of an activity rather than a
rulebook, but (i) we want information in the form of a nicely-named five point
scale of responses, rather than wanting something to be done, and (ii) it
@ -531,7 +522,7 @@ change the names of these outcomes.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">does</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">mean</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">have</span><span class="plain-syntax"> </span><span class="identifier-syntax">outcomes</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">very</span><span class="plain-syntax"> </span><span class="identifier-syntax">likely</span><span class="plain-syntax">, </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">likely</span><span class="plain-syntax">, </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">possible</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">unlikely</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">very</span><span class="plain-syntax"> </span><span class="identifier-syntax">unlikely</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19"></a><b>&#167;19. </b>The following rulebook was added at the (implied) suggestion of John
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>The following rulebook was added at the (implied) suggestion of John
Clemens, whose Consolidated Multiple Actions extension made use of
something similar.
</p>
@ -539,14 +530,14 @@ something similar.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20"></a><b>&#167;20. </b>And that's it: all of the named rulebooks now exist. There will, of
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And that's it: all of the named rulebooks now exist. There will, of
course, be hundreds more rulebooks soon, created automatically as activities
and actions are created &mdash; when we create the "dropping" action, for
instance, we also create the "check dropping", "carry out dropping" and
"report dropping" rulebooks &mdash; but there are no more stand-alone rulebooks.
</p>
<p class="commentary firstcommentary"><a id="SP21"></a><b>&#167;21. Rules. </b>At run-time, the value of a rule is the (packed) address of an I6 routine.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Rules. </b>At run-time, the value of a rule is the (packed) address of an I6 routine.
In the case of rules created in I7 source text, the body of the rule
definition is compiled by Inform to a new I6 routine which carries it out.
But there are also primitive rules which are implemented in the template
@ -567,7 +558,7 @@ automatically to a safely neutral default value. It makes no decision.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">little</span><span class="plain-syntax">-</span><span class="identifier-syntax">used</span><span class="plain-syntax"> </span><span class="identifier-syntax">do</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"LITTLE_USED_DO_NOTHING_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22"></a><b>&#167;22. Startup. </b>Every rulebook contains a (possibly empty) run of "first" rules, then
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. Startup. </b>Every rulebook contains a (possibly empty) run of "first" rules, then
a (possibly empty) run of miscellaneous rules, then a (possibly empty)
run of "last" rules. It's unusual to have more than one rule anchored
to either end as "first" or "last", but entirely legal, and we make
@ -634,7 +625,7 @@ ordinary I7 rules can be run.
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">start</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">correct</span><span class="plain-syntax"> </span><span class="identifier-syntax">scenes</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">follow</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">changing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23"></a><b>&#167;23. </b>The remaining rules, though, are fair game for alteration, and as if to
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>The remaining rules, though, are fair game for alteration, and as if to
prove the point they are all written in standard I7 source text. Note that
the baseline score is set only after the when play begins rulebook has
finished, because games starting with a non-zero score normally do this
@ -657,7 +648,7 @@ action.
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">initial</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">try</span><span class="plain-syntax"> </span><span class="identifier-syntax">looking</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24"></a><b>&#167;24. The turn sequence. </b>In each turn, a command is read and parsed from the keyboard, and any
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. The turn sequence. </b>In each turn, a command is read and parsed from the keyboard, and any
action(s) that requested is or are processed. (And may in turn cause
other actions, which must also be processed.) There is then a fair
amount of business needed to end one turn and get ready for another.
@ -672,7 +663,7 @@ fully processed. All the same, play basically consists of running down
this list of rules over and over again.
</p>
<p class="commentary firstcommentary"><a id="SP25"></a><b>&#167;25. </b>The "first" rules in the turn sequence cover us up to the end of the
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>The "first" rules in the turn sequence cover us up to the end of the
events which take place in the model world during this turn's action(s).
</p>
@ -716,7 +707,7 @@ read and no consequent actions generated.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">declare</span><span class="plain-syntax"> </span><span class="identifier-syntax">everything</span><span class="plain-syntax"> </span><span class="identifier-syntax">initially</span><span class="plain-syntax"> </span><span class="identifier-syntax">unmentioned</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequence</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">nd.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequence</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">st.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26"></a><b>&#167;26. </b>Three miscellaneous things then happen, all implemented by primitives
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>Three miscellaneous things then happen, all implemented by primitives
in the template I6 layer:
</p>
@ -738,7 +729,7 @@ points", which are strategic moments during play, and this is one of them.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">advance</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequence</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">update</span><span class="plain-syntax"> </span><span class="identifier-syntax">chronological</span><span class="plain-syntax"> </span><span class="identifier-syntax">records</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">turn</span><span class="plain-syntax"> </span><span class="identifier-syntax">sequence</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27"></a><b>&#167;27. </b>We now come to the rules anchored at the end, using "last". This part of
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>We now come to the rules anchored at the end, using "last". This part of
the rulebook is reserved for book-keeping which has to happen positively
at the end of the turn.
</p>
@ -777,7 +768,7 @@ out-of-world actions are not supposed to do that sort of thing.)
<span class="plain-syntax"> </span><span class="identifier-syntax">issue</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> </span><span class="identifier-syntax">notification</span><span class="plain-syntax"> </span><span class="identifier-syntax">message</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">notified</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP28"></a><b>&#167;28. </b>That's it, but we need to map these I7 rule names onto the names of their
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>That's it, but we need to map these I7 rule names onto the names of their
I6 primitives in the template layer.
</p>
@ -794,7 +785,7 @@ I6 primitives in the template layer.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"PARSE_COMMAND_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">timed</span><span class="plain-syntax"> </span><span class="identifier-syntax">events</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"TIMED_EVENTS_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP29"></a><b>&#167;29. Shutdown. </b>Goodbye is not the hardest word to say, but it does involve a little bit of
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. Shutdown. </b>Goodbye is not the hardest word to say, but it does involve a little bit of
work. It might not actually be goodbye, for one thing: if this rulebook ends
in success, then we go back to repeating the turn sequence rulebook just as
if nothing had happened.
@ -827,7 +818,7 @@ current execution context entirely.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">resurrect</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">asked</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"RESURRECT_PLAYER_IF_ASKED_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">ask</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">question</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"ASK_FINAL_QUESTION_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP30"></a><b>&#167;30. Scene changing. </b>Scene changing is handled by a routine called <span class="extract"><span class="extract-syntax">DetectSceneChange</span></span> which is
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Scene changing. </b>Scene changing is handled by a routine called <span class="extract"><span class="extract-syntax">DetectSceneChange</span></span> which is
compiled directly by Inform: this is so primitive that it can't even be handled
at the template layer. The rulebook is all a little elaborate given that
it contains only one rule, but it's possible to imagine extensions which
@ -840,7 +831,7 @@ use of this opportunity.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">change</span><span class="plain-syntax"> </span><span class="identifier-syntax">machinery</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"SCENE_CHANGE_MACHINERY_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP31"></a><b>&#167;31. </b>We couldn't do this earlier (because creating a scene automatically generates
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. </b>We couldn't do this earlier (because creating a scene automatically generates
two rulebooks, and that would have thrown the rulebook numbering), so let's
take this opportunity to define the "Entire Game" scene:
</p>
@ -852,7 +843,7 @@ take this opportunity to define the "Entire Game" scene:
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">Entire</span><span class="plain-syntax"> </span><span class="identifier-syntax">Game</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">story</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">ended</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">Entire</span><span class="plain-syntax"> </span><span class="identifier-syntax">Game</span><span class="plain-syntax"> </span><span class="identifier-syntax">ends</span><span class="plain-syntax"> </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">story</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">ended</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP32"></a><b>&#167;32. Action-processing. </b>Action-processing happens on two levels: an upper level, handled by the main
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>&#167;32. Action-processing. </b>Action-processing happens on two levels: an upper level, handled by the main
"action-processing" rulebook, and a lower level, "specific action-processing".
This division clearly complicates matters, so why do we do it? It turns out be
convenient for several reasons:
@ -885,7 +876,7 @@ after the check stage (say) will fail &mdash; the before and check stages happen
in different rulebooks, so no amount of rearranging will do this.
</p>
<p class="commentary firstcommentary"><a id="SP33"></a><b>&#167;33. </b>The upper level of action-processing consists of seeing whether the actor's
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>&#167;33. </b>The upper level of action-processing consists of seeing whether the actor's
current situation forbids the action from being tried: does anybody or
anything intervene to stop it? Are there are any basic reasons of physical
realism why nobody could possibly try it? Does it require somebody else
@ -928,7 +919,7 @@ rules created by the user or by extensions will go.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">descend</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">success</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">listed</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">. </span><span class="comment-syntax">ast.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP34"></a><b>&#167;34. </b>As we shall see, most of these rules are primitives implemented by the
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>&#167;34. </b>As we shall see, most of these rules are primitives implemented by the
template I6 layer, but five are very straightforward.
</p>
@ -944,7 +935,7 @@ template I6 layer, but five are very straightforward.
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">abide</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">instead</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">abide</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">instead</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP35"></a><b>&#167;35. </b>The final rule in the rulebook always succeeds: this ensures that
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>&#167;35. </b>The final rule in the rulebook always succeeds: this ensures that
action-processing always makes a decision. (I7's doctrine is that an
action "succeeds" if and only if its carry-out stage is reached, so
any action getting right to the end of this rulebook must have
@ -954,7 +945,7 @@ succeeded.)
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">This</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">success</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP36"></a><b>&#167;36. </b>The action-processing rulebook contains six primitives:
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>&#167;36. </b>The action-processing rulebook contains six primitives:
</p>
<ul class="items"><li>(1) The "basic visibility rule" checks the action to see if it requires
@ -1004,7 +995,7 @@ the names aren't so visible).
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">descend</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span>
<span class="string-syntax">"DESCEND_TO_SPECIFIC_ACTION_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP37"></a><b>&#167;37. Specific action-processing. </b>And now we descend to the lower level, which is much easier to understand.
<p class="commentary firstcommentary"><a id="SP37" class="paragraph-anchor"></a><b>&#167;37. Specific action-processing. </b>And now we descend to the lower level, which is much easier to understand.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1038,7 +1029,7 @@ the names aren't so visible).
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">-</span><span class="identifier-syntax">processing</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP38"></a><b>&#167;38. </b>The unusual use of "anonymously abide by" above is a form of "abide
<p class="commentary firstcommentary"><a id="SP38" class="paragraph-anchor"></a><b>&#167;38. </b>The unusual use of "anonymously abide by" above is a form of "abide
by" which may be worth explaining. Suppose rule \(X\) consists of an
instruction to abide by rulebook \(Y\), and suppose that \(Y\) in fact fails
when it reaches \(Y_k\). If the ordinary "abide by" is used then the action
@ -1050,7 +1041,7 @@ fail the action. (The after stage is allowed to end it, but not in
failure.)
</p>
<p class="commentary firstcommentary"><a id="SP39"></a><b>&#167;39. </b>The specific action-processing rulebook is probably more fruitful than the
<p class="commentary firstcommentary"><a id="SP39" class="paragraph-anchor"></a><b>&#167;39. </b>The specific action-processing rulebook is probably more fruitful than the
main one if we want to modify what happens. For instance:
</p>
@ -1066,7 +1057,7 @@ main one if we want to modify what happens. For instance:
will succeed, but before anything has been done.
</p>
<p class="commentary firstcommentary"><a id="SP40"></a><b>&#167;40. </b>The only rule not spelled out was the primitive "work out details of
<p class="commentary firstcommentary"><a id="SP40" class="paragraph-anchor"></a><b>&#167;40. </b>The only rule not spelled out was the primitive "work out details of
specific action rule", which initialises the rulebook variables so that
they record the action's specific check, carry out and report rulebooks,
and whether or not it is in world.
@ -1076,7 +1067,7 @@ and whether or not it is in world.
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">work</span><span class="plain-syntax"> </span><span class="identifier-syntax">out</span><span class="plain-syntax"> </span><span class="identifier-syntax">details</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span>
<span class="string-syntax">"WORK_OUT_DETAILS_OF_SPECIFIC_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP41"></a><b>&#167;41. Player's action awareness. </b>This rulebook decides whether or not an action by somebody should be routinely
<p class="commentary firstcommentary"><a id="SP41" class="paragraph-anchor"></a><b>&#167;41. Player's action awareness. </b>This rulebook decides whether or not an action by somebody should be routinely
reported to the player: is he aware of it having taken place? If the rulebook
positively succeeds then he is, and otherwise not.
</p>
@ -1095,7 +1086,7 @@ positively succeeds then he is, and otherwise not.
<span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">aware</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">actions</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">visible</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax"> </span><span class="identifier-syntax">nouns</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">see</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP42"></a><b>&#167;42. Accessibility. </b>The "accessibility" rulebook is not very visible to users: it's another
<p class="commentary firstcommentary"><a id="SP42" class="paragraph-anchor"></a><b>&#167;42. Accessibility. </b>The "accessibility" rulebook is not very visible to users: it's another
behind-the-scenes rulebook for managing the decision as to whether the actor
can touch any items which the intended action requires him to be able to
reach.
@ -1119,7 +1110,7 @@ we expect most users to work with one of the two reaching rulebooks instead.
<span class="plain-syntax"> </span><span class="string-syntax">"ACCESS_THROUGH_BARRIERS_R"</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[regarding the noun][Those] [aren't] available."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP43"></a><b>&#167;43. Reaching inside. </b>What the access through barriers rule does is to try to construct a path
<p class="commentary firstcommentary"><a id="SP43" class="paragraph-anchor"></a><b>&#167;43. Reaching inside. </b>What the access through barriers rule does is to try to construct a path
through the object containment tree from the actor to the item needed, and
to apply the reaching inside or reaching outside rulebooks each time this
path passes inside or outside of a container (or room). (Supporters never
@ -1138,7 +1129,7 @@ form barriers.)
<span class="plain-syntax"> </span><span class="string-syntax">"CANT_REACH_INSIDE_ROOMS_R"</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[We] [can't] reach into [the noun]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP44"></a><b>&#167;44. Reaching outside. </b>And, not quite symmetrically since we don't need to block room-to-room
<p class="commentary firstcommentary"><a id="SP44" class="paragraph-anchor"></a><b>&#167;44. Reaching outside. </b>And, not quite symmetrically since we don't need to block room-to-room
reaching on both the inbound and outbound directions,
</p>
@ -1149,7 +1140,7 @@ reaching on both the inbound and outbound directions,
<span class="plain-syntax"> </span><span class="string-syntax">"CANT_REACH_OUTSIDE_CLOSED_R"</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[The noun] [aren't] open."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP45"></a><b>&#167;45. Visibility. </b>The visibility rulebook actually has the opposite sense to the one the name
<p class="commentary firstcommentary"><a id="SP45" class="paragraph-anchor"></a><b>&#167;45. Visibility. </b>The visibility rulebook actually has the opposite sense to the one the name
might suggest. It is applied only when the player (not any other actor) tries
to perform an action which requires light to see by; the action is blocked
if the rulebook succeeds. (Well, but we could hardly call it the invisibility
@ -1163,7 +1154,7 @@ is being applied: rather the way cricket matches end with a declaration that
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">act</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">): </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">darkness</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">succeeds</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP46"></a><b>&#167;46. Does the player mean. </b>This rulebook is akin to a set of preferences about how to interpret the
<p class="commentary firstcommentary"><a id="SP46" class="paragraph-anchor"></a><b>&#167;46. Does the player mean. </b>This rulebook is akin to a set of preferences about how to interpret the
player's commands in cases of ambiguity. No two Inform users are likely to
agree about the best way to decide these, so we are fairly hands-off, and
make only one rule as standard:
@ -1174,14 +1165,14 @@ make only one rule as standard:
<span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">very</span><span class="plain-syntax"> </span><span class="identifier-syntax">unlikely</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">mean</span><span class="plain-syntax"> </span><span class="identifier-syntax">taking</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">already</span><span class="plain-syntax"> </span><span class="identifier-syntax">carried</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">it</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">very</span><span class="plain-syntax"> </span><span class="identifier-syntax">unlikely</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP47"></a><b>&#167;47. </b>And that completes the creation and stocking of the 25 rulebooks. More than
<p class="commentary firstcommentary"><a id="SP47" class="paragraph-anchor"></a><b>&#167;47. </b>And that completes the creation and stocking of the 25 rulebooks. More than
half of them are initially empty, including before, instead and after &mdash; at the
end of the day, these rulebooks are hooks allowing the user to change the
ordinary behaviour of things, but ordinariness is exactly what the Standard
Rules is all about.
</p>
<p class="commentary firstcommentary"><a id="SP48"></a><b>&#167;48. Adjectives applied to values. </b>There is a small stock of built-in adjectives for values.
<p class="commentary firstcommentary"><a id="SP48" class="paragraph-anchor"></a><b>&#167;48. Adjectives applied to values. </b>There is a small stock of built-in adjectives for values.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1190,7 +1181,7 @@ Rules is all about.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">recurring</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">recurring</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">scene</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">recurring</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">Entire</span><span class="plain-syntax"> </span><span class="identifier-syntax">Game</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">recurring</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP49"></a><b>&#167;49. Scene descriptions. </b>And there is one build-in value property for values.
<p class="commentary firstcommentary"><a id="SP49" class="paragraph-anchor"></a><b>&#167;49. Scene descriptions. </b>And there is one build-in value property for values.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1201,7 +1192,7 @@ Rules is all about.
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">event</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[description of the event][paragraph break]"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP50"></a><b>&#167;50. Command parser errors. </b>This abstracts a set of return codes from the I6 parser, which are written
<p class="commentary firstcommentary"><a id="SP50" class="paragraph-anchor"></a><b>&#167;50. Command parser errors. </b>This abstracts a set of return codes from the I6 parser, which are written
there as constants with the notation <span class="extract"><span class="extract-syntax">*_ETYPE</span></span>.
</p>
@ -1238,7 +1229,7 @@ there as constants with the notation <span class="extract"><span class="extract-
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">latest</span><span class="plain-syntax"> </span><span class="identifier-syntax">parser</span><span class="plain-syntax"> </span><span class="identifier-syntax">error</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">parser</span><span class="plain-syntax"> </span><span class="identifier-syntax">error</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">latest</span><span class="plain-syntax"> </span><span class="identifier-syntax">parser</span><span class="plain-syntax"> </span><span class="identifier-syntax">error</span><span class="plain-syntax"> </span><span class="identifier-syntax">variable</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"etype"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP51"></a><b>&#167;51. Internal rules. </b>These rules do nothing in themselves, and are really just hooks on which
<p class="commentary firstcommentary"><a id="SP51" class="paragraph-anchor"></a><b>&#167;51. Internal rules. </b>These rules do nothing in themselves, and are really just hooks on which
some response texts can be hung.
</p>

View file

@ -1,6 +1,6 @@
<preform-nonterminal> internal nti 19 constraint (none) extremes [1, 1]
<if-start-of-paragraph> internal hits 1088/5520 nti 20 constraint (none) extremes [0, 0]
<if-start-of-paragraph> internal hits 1088/5528 nti 20 constraint (none) extremes [0, 0]
<if-not-cap> internal hits 3873/7958 nti 21 constraint (none) extremes [0, 0]
@ -16,7 +16,7 @@
<any-integer> internal nti 23 constraint (none) extremes [1, 1]
<quoted-text> internal hits 2894/22706 nti 24 constraint (none) extremes [1, 1]
<quoted-text> internal hits 2894/22686 nti 24 constraint (none) extremes [1, 1]
<quoted-text-with-subs> internal nti 25 constraint (none) extremes [1, 1]
@ -24,7 +24,7 @@
<empty-text> internal nti 27 constraint (none) extremes [1, 1]
<if-start-of-source-text> internal hits 2/12966 nti 28 constraint (none) extremes [0, 0]
<if-start-of-source-text> internal hits 2/12958 nti 28 constraint (none) extremes [0, 0]
<list-or-division> hits 0/18 nti 16 constraint DS = {16} extremes [3, infinity)
English:
@ -4750,21 +4750,21 @@
{...}
constraint (none) extremes [1, infinity)
<optional-article> hits 81392/162784 nti 16 constraint (none) extremes [1, infinity)
<optional-article> hits 81396/162792 nti 16 constraint (none) extremes [1, infinity)
English:
<article> {...}
(hits 15779/46528) (matched long text) constraint (none) extremes [2, infinity)
(hits 15779/46532) (matched long text) constraint (none) extremes [2, infinity)
{...}
(hits 65613/65613) (matched long text) constraint (none) extremes [1, infinity)
(hits 65617/65617) (matched long text) constraint (none) extremes [1, infinity)
<compulsory-article> nti 17 constraint (none) extremes [2, infinity)
English:
<article> {...}
constraint (none) extremes [2, infinity)
<article> internal hits 16202/96578 nti r2 constraint (none) extremes [1, 1]
<article> internal hits 16202/96586 nti r2 constraint (none) extremes [1, 1]
<definite-article> internal hits 21519/254086 nti r2 constraint (none) extremes [1, 1]
<definite-article> internal hits 21511/254038 nti r2 constraint (none) extremes [1, 1]
<indefinite-article> internal hits 2090/40276 nti r2 constraint (none) extremes [1, 1]
@ -4830,7 +4830,7 @@
<negated-clause> hits 16/21706 nti 29 constraint DS = {29} extremes [2, infinity)
English:
not {...}
(hits 16/3794) (matched long text) constraint DS = {29} extremes [2, infinity)
(hits 16/3790) (matched long text) constraint DS = {29} extremes [2, infinity)
<determination-of> hits 79/158 nti 30 constraint (none) extremes [1, infinity)
English:
@ -4844,7 +4844,7 @@
<excluded-from-determiners> hits 0/21422 nti 31 constraint DS = {31} extremes [2, infinity)
English:
no one {***}
(hits 0/5384) constraint DS = {31} extremes [2, infinity)
(hits 0/5380) constraint DS = {31} extremes [2, infinity)
<agent-pronoun> internal hits 92/1190 nti 18 constraint (none) extremes [1, 1]
@ -4915,7 +4915,7 @@
<copular-verb> internal hits 16/128 nti 7 constraint FS = {7} extremes [1, infinity)
<negated-noncopular-verb-present> internal hits 1/8754 nti 8 constraint FS = {8} extremes [1, infinity)
<negated-noncopular-verb-present> internal hits 1/8738 nti 8 constraint FS = {8} extremes [1, infinity)
<universal-verb> internal hits 0/720 nti 9 constraint FS = {9} extremes [1, infinity)
@ -4935,7 +4935,7 @@
<preposition> internal nti 12 constraint DS = {12} extremes [1, infinity)
<copular-preposition> internal hits 635/18720 nti 13 constraint DS = {13} extremes [1, infinity)
<copular-preposition> internal hits 635/18700 nti 13 constraint DS = {13} extremes [1, infinity)
<permitted-preposition> internal hits 258/8096 nti 14 constraint DS = {14} extremes [1, infinity)
@ -5031,7 +5031,7 @@
<np-unparsed>
(hits 60/60) (matched: 'fixed in place') constraint (none) extremes [1, infinity)
<np-existential> hits 33/107738 nti 19 constraint CS = {19} extremes [1, 1]
<np-existential> hits 33/107786 nti 19 constraint CS = {19} extremes [1, 1]
English:
there
(hits 33/44) (matched: 'there') constraint CS = {19} extremes [1, 1]
@ -5043,9 +5043,9 @@
<if-not-cap> <indefinite-article> <np-unparsed>
(hits 322/1417) (matched long text) constraint (none) extremes [2, infinity)
<if-not-cap> <definite-article> <np-unparsed>
(hits 665/1095) (matched long text) constraint (none) extremes [2, infinity)
(hits 661/1095) (matched long text) constraint (none) extremes [2, infinity)
<np-unparsed>
(hits 995/995) (matched long text) constraint (none) extremes [1, infinity)
(hits 999/999) (matched long text) constraint (none) extremes [1, infinity)
<np-articled-bal> hits 255/510 nti 10 constraint (none) extremes [0, infinity)
English:
@ -5123,7 +5123,7 @@
thing/something
(hits 61/61) (matched: 'thing') constraint CS = {29} extremes [1, 1]
<probable-participle> internal hits 388/16706 nti 17 constraint (none) extremes [1, 1]
<probable-participle> internal hits 388/16686 nti 17 constraint (none) extremes [1, 1]
<np-relative-phrase-implicit> nti 22 constraint CS = {22} extremes [1, 2]
English:
@ -5137,9 +5137,9 @@
<np-relative-phrase-explicit> hits 0/2686 nti 28 constraint DS = {14} extremes [2, infinity)
English:
<permitted-preposition> _,/and {...}
(hits 0/404) constraint DS = {14, 28} extremes [3, infinity)
(hits 0/402) constraint DS = {14, 28} extremes [3, infinity)
<permitted-preposition> _,/and
(hits 0/451) constraint DS = {14, 28} extremes [2, infinity)
(hits 0/449) constraint DS = {14, 28} extremes [2, infinity)
<permitted-preposition> <np-nonrelative>
(hits 0/866) constraint DS = {14} extremes [2, infinity)
@ -5150,9 +5150,9 @@
<np-operand> {called} <np-articled-bal>
(hits 57/409) (matched long text) constraint DS = {27} extremes [1, infinity)
<np-operand> <np-with-or-having-tail>
(hits 0/719) constraint DS = {24} extremes [2, infinity)
(hits 0/715) constraint DS = {24} extremes [2, infinity)
<np-operand> <np-and-tail>
(hits 87/458) (matched long text) constraint DS = {25} extremes [1, infinity)
(hits 87/456) (matched long text) constraint DS = {25} extremes [1, infinity)
<np-kind-phrase>
(hits 30/212) (matched: 'a kind of supporter that is portable') constraint DS = {26} extremes [1, infinity)
<agent-pronoun>
@ -5171,7 +5171,7 @@
<np-nonrelative>
(hits 431/431) (matched long text) constraint (none) extremes [1, infinity)
<np-with-or-having-tail> hits 0/10808 nti 24 constraint DS = {24} extremes [2, infinity)
<np-with-or-having-tail> hits 0/10768 nti 24 constraint DS = {24} extremes [2, infinity)
English:
it with action {***}
(hits 0/3836) constraint DS = {24} extremes [3, infinity)
@ -5203,12 +5203,12 @@
{...}
constraint (none) extremes [1, infinity)
<np-and-tail> hits 174/3544 nti 25 constraint DS = {25} extremes [1, infinity)
<np-and-tail> hits 174/3514 nti 25 constraint DS = {25} extremes [1, infinity)
English:
, _{and} <np-operand>
(hits 8/1142) (matched: ', and didn't understand addressee's last name error') constraint DS = {25} extremes [2, infinity)
(hits 8/1131) (matched: ', and didn't understand addressee's last name error') constraint DS = {25} extremes [2, infinity)
_{,/and} <np-operand>
(hits 166/1277) (matched long text) constraint DS = {25} extremes [1, infinity)
(hits 166/1266) (matched long text) constraint DS = {25} extremes [1, infinity)
<np-kind-phrase> hits 30/424 nti 21 constraint DS = {26} extremes [1, infinity)
English:
@ -5238,7 +5238,7 @@
<certainty> {...}
(hits 67/1202) (matched: 'usually table of general chitchat') constraint DS = {13} extremes [2, infinity)
<rc-marker> hits 605/24648 nti 30 constraint CS = {30} extremes [1, 1]
<rc-marker> hits 605/24640 nti 30 constraint CS = {30} extremes [1, 1]
English:
which/who/that
(hits 605/6165) (matched: 'which') constraint CS = {30} extremes [1, 1]
@ -5246,17 +5246,17 @@
<pre-verb-rc-marker> hits 2/2742 nti 26 constraint DS = {30} extremes [2, infinity)
English:
{...} <rc-marker>
(hits 2/722) (matched: 'answering it that') constraint DS = {30} extremes [2, infinity)
(hits 2/718) (matched: 'answering it that') constraint DS = {30} extremes [2, infinity)
<phrase-with-calling> nti 31 constraint DS = {31} extremes [3, infinity)
English:
{...} called {...}
constraint DS = {31} extremes [3, infinity)
<np-x-of-y> hits 196/9102 nti 6 constraint DS = {6} extremes [2, infinity)
<np-x-of-y> hits 196/9062 nti 6 constraint DS = {6} extremes [2, infinity)
English:
of {...}
(hits 196/2734) (matched: 'of day -- documented at var_time --') constraint DS = {6} extremes [2, infinity)
(hits 196/2714) (matched: 'of day -- documented at var_time --') constraint DS = {6} extremes [2, infinity)
<notable-linguistic-kinds> hits 5/60 nti 7 constraint CS = {7} extremes [2, 2]
English:
@ -5297,7 +5297,7 @@
<k-kind>
(hits 5/5) (matched: 'value of kind k') constraint (none) extremes [1, infinity)
<k-kind> hits 5771/102296 nti r5 constraint (none) extremes [1, infinity)
<k-kind> hits 5771/102256 nti r5 constraint (none) extremes [1, infinity)
English:
( <k-kind> )
(hits 0/2032) constraint DS = {r5} & CW = {r2, r5} extremes [3, infinity)
@ -5339,7 +5339,7 @@
stored actions
(hits 0/976) constraint CS = {r5} extremes [2, 2]
object-based rulebook producing <indefinite-article> <k-kind>
(hits 0/4905) constraint DS = {r5} extremes [5, infinity)
(hits 0/4897) constraint DS = {r5} extremes [5, infinity)
object-based rulebook producing <k-kind>
(hits 0/1073) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity)
object-based rulebook
@ -5347,7 +5347,7 @@
action-based rulebook
(hits 0/974) constraint CS = {r5} extremes [2, 2]
object-based rule producing <indefinite-article> <k-kind>
(hits 0/4905) constraint DS = {r5} extremes [5, infinity)
(hits 0/4897) constraint DS = {r5} extremes [5, infinity)
object-based rule producing <k-kind>
(hits 0/1073) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity)
object-based rule
@ -5475,7 +5475,7 @@
<dividing-sentence> hits 199/10188 nti 6 constraint DW = {11, 12} extremes [2, infinity)
English:
<if-start-of-paragraph> <heading>
(hits 191/2746) (matched long text) constraint DS = {11} extremes [2, infinity)
(hits 191/2750) (matched long text) constraint DS = {11} extremes [2, infinity)
<extension-end-marker-sentence>
(hits 8/3856) (matched long text) constraint DS = {12} extremes [3, infinity)
@ -5499,28 +5499,28 @@
{...} end/ends here
(hits 4/3852) (matched: 'the standard rules end here') constraint DS = {12} extremes [3, infinity)
<structural-sentence> hits 32/12966 nti 14 constraint (none) extremes [1, infinity)
<structural-sentence> hits 32/12958 nti 14 constraint (none) extremes [1, infinity)
English:
<if-start-of-source-text> <quoted-text>
(hits 0/20) constraint (none) extremes [1, 1]
<if-start-of-source-text> <quoted-text> {...}
(hits 0/6463) constraint (none) extremes [2, infinity)
(hits 0/6459) constraint (none) extremes [2, infinity)
<language-modifying-sentence>
(hits 0/6352) constraint DS = {13} extremes [4, infinity)
(hits 0/6348) constraint DS = {13} extremes [4, infinity)
*
constraint CS = {14} extremes [1, 1]
* <quoted-text-without-subs>
constraint DS = {14} extremes [2, 2]
<if-start-of-paragraph> table {...}
(hits 14/6325) (matched long text) constraint DS = {14} extremes [2, infinity)
(hits 14/6321) (matched long text) constraint DS = {14} extremes [2, infinity)
<if-start-of-paragraph> equation {...}
(hits 0/6311) constraint DS = {14} extremes [2, infinity)
(hits 0/6307) constraint DS = {14} extremes [2, infinity)
include the {...} by {...}
(hits 0/6230) constraint DS = {14} extremes [5, infinity)
(hits 0/6226) constraint DS = {14} extremes [5, infinity)
include {...} by {...}
(hits 18/6311) (matched long text) constraint DS = {14} extremes [4, infinity)
(hits 18/6307) (matched long text) constraint DS = {14} extremes [4, infinity)
include (- {...}
(hits 0/6293) constraint DS = {14} extremes [3, infinity)
(hits 0/6289) constraint DS = {14} extremes [3, infinity)
<comma-divisible-sentence> hits 9/2788 nti 15 constraint DS = {15} extremes [2, infinity)
English:
@ -5535,12 +5535,12 @@
when {...}
(hits 4/1026) (matched: 'when scene begins is a scene based rulebook') constraint DS = {15} extremes [2, infinity)
<language-modifying-sentence> hits 0/12704 nti 13 constraint DS = {13} extremes [4, infinity)
<language-modifying-sentence> hits 0/12696 nti 13 constraint DS = {13} extremes [4, infinity)
English:
include (- {###} in the preform grammar
(hits 0/135) constraint DS = {13} extremes [7, 7]
(hits 0/137) constraint DS = {13} extremes [7, 7]
use {...} language element/elements
(hits 0/6352) constraint DS = {13} extremes [4, infinity)
(hits 0/6348) constraint DS = {13} extremes [4, infinity)
<heading-qualifier> hits 30/442 nti 22 constraint DS = {22} extremes [2, infinity)
English:
@ -6050,16 +6050,16 @@
{...}
(hits 30/466) (matched long text) constraint (none) extremes [1, infinity)
<nounphrase-rule> <np-rule-tail>
(hits 0/112) constraint DS = {11, 12} extremes [4, infinity)
(hits 0/109) constraint DS = {11, 12} extremes [4, infinity)
<nounphrase-rule>
(hits 83/146) (matched long text) constraint DS = {11} extremes [2, infinity)
<np-rule-tail> hits 30/1436 nti 12 constraint DS = {12} extremes [2, infinity)
<np-rule-tail> hits 30/1400 nti 12 constraint DS = {12} extremes [2, infinity)
English:
, _{and} <nounphrase-rule-list>
(hits 1/374) (matched: ', and the library') constraint DS = {12} extremes [3, infinity)
(hits 1/362) (matched: ', and the library') constraint DS = {12} extremes [3, infinity)
_{,/and} <nounphrase-rule-list>
(hits 29/404) (matched long text) constraint DS = {12} extremes [2, infinity)
(hits 29/389) (matched long text) constraint DS = {12} extremes [2, infinity)
<nounphrase-rule> hits 83/352 nti 11 constraint DS = {11} extremes [2, infinity)
English:
@ -6501,7 +6501,7 @@
variable
(hits 0/42) constraint CS = {28} extremes [1, 1]
action of <s-explicit-action>
(hits 0/81) constraint DS = {28} extremes [3, infinity)
(hits 0/79) constraint DS = {28} extremes [3, infinity)
<s-descriptive-type-expression>
(hits 728/978) (matched: 'action name based rule producing nothing that varies') constraint (none) extremes [1, infinity)
<s-global-variable>
@ -6526,11 +6526,11 @@
<article>
(hits 0/73) constraint (none) extremes [1, 1]
(/)/(- {***}
(hits 0/61) constraint DS = {31} extremes [1, infinity)
(hits 0/59) constraint DS = {31} extremes [1, infinity)
{***} (/)/(-
(hits 0/61) constraint DS = {31} extremes [1, infinity)
(hits 0/59) constraint DS = {31} extremes [1, infinity)
{...} (/)/(- {...}
(hits 0/48) constraint DS = {31} extremes [3, infinity)
(hits 0/46) constraint DS = {31} extremes [3, infinity)
ni--crash--1
constraint CS = {31} extremes [1, 1]
ni--crash--10
@ -6538,11 +6538,11 @@
ni--crash--11
constraint CS = {31} extremes [1, 1]
, {...}
(hits 0/61) constraint DS = {31} extremes [2, infinity)
(hits 0/59) constraint DS = {31} extremes [2, infinity)
{...} ,
(hits 0/61) constraint DS = {31} extremes [2, infinity)
(hits 0/59) constraint DS = {31} extremes [2, infinity)
{...} when/while {...}
(hits 0/48) constraint DS = {31} extremes [3, infinity)
(hits 0/46) constraint DS = {31} extremes [3, infinity)
{***} <quoted-text> {***}
(hits 0/273) constraint (none) extremes [1, infinity)
condition
@ -6793,7 +6793,7 @@
<cardinal-number>
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
minus <cardinal-number>
(hits 0/1233) constraint DS = {6} extremes [2, 2]
(hits 0/1235) constraint DS = {6} extremes [2, 2]
<quoted-text> ( <response-letter> )
(hits 273/815) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {6} extremes [4, 4]
<quoted-text>
@ -6806,7 +6806,7 @@
<s-literal-truth-state>
(hits 78/103) (matched: 'false') constraint CS = {26} extremes [1, 1]
<s-literal-list>
(hits 0/1572) constraint DS = {28} extremes [2, infinity)
(hits 0/1568) constraint DS = {28} extremes [2, infinity)
unicode <s-unicode-character>
(hits 0/3241) constraint DS = {6} extremes [2, infinity)
<s-literal-time>
@ -6855,7 +6855,7 @@
verb <instance-of-verb>
(hits 1/1734) (matched: 'verb are') constraint DS = {18} extremes [2, infinity)
<s-rule-name> response ( <response-letter> )
(hits 0/701) constraint DS = {18} extremes [5, infinity)
(hits 0/699) constraint DS = {18} extremes [5, infinity)
<s-miscellaneous-proper-noun> internal hits 446/17004 nti 11 constraint (none) extremes [1, infinity)
@ -6905,10 +6905,10 @@
<s-adjective> internal hits 2217/18908 nti r3 constraint CS = {r3} extremes [1, infinity)
<s-qualifiable-noun> hits 3590/89706 nti 20 constraint (none) extremes [1, infinity)
<s-qualifiable-noun> hits 3590/89666 nti 20 constraint (none) extremes [1, infinity)
English:
<k-kind>
(hits 2593/44853) (matched: 'value of kind k') constraint (none) extremes [1, infinity)
(hits 2593/44833) (matched: 'value of kind k') constraint (none) extremes [1, infinity)
<s-instance-name>
(hits 997/1932) (matched: 'the alfred cralle pool hall') constraint CW = {r2, r4} extremes [1, infinity)
@ -6934,7 +6934,7 @@
<s-description-uncomposite-inner>
(hits 1392/19321) (matched long text) constraint (none) extremes [1, infinity)
<s-np-with-relative-clause>
(hits 260/4814) (matched long text) constraint (none) extremes [3, infinity)
(hits 260/4813) (matched long text) constraint (none) extremes [3, infinity)
<s-description-uncomposite> hits 257/2044 nti 25 constraint (none) extremes [1, infinity)
English:
@ -6944,7 +6944,7 @@
<s-description-uncomposite-inner> hits 1649/40686 nti 22 constraint (none) extremes [1, infinity)
English:
<s-description-uncalled> ( called <s-calling-name> )
(hits 118/823) (matched long text) constraint DS = {22} extremes [5, infinity)
(hits 118/819) (matched long text) constraint DS = {22} extremes [5, infinity)
<s-description-uncalled>
(hits 1531/20225) (matched: 'the alfred cralle pool hall') constraint (none) extremes [1, infinity)
@ -7251,19 +7251,19 @@
<s-noun-phrase> to <s-noun-phrase>
constraint DS = {28} extremes [3, infinity)
<s-np-with-relative-clause> hits 260/9968 nti 31 constraint (none) extremes [3, infinity)
<s-np-with-relative-clause> hits 260/9966 nti 31 constraint (none) extremes [3, infinity)
English:
<s-noun-phrase-nounless> <s-implied-relative-verb-tail>
(hits 169/4203) (matched long text) constraint DS = {13} extremes [3, infinity)
(hits 169/4202) (matched long text) constraint DS = {13} extremes [3, infinity)
<s-noun-phrase> <s-relative-verb-tail>
(hits 91/2792) (matched long text) constraint DS = {30} extremes [4, infinity)
<s-implied-relative-verb-tail> hits 448/30796 nti 27 constraint DS = {13} extremes [2, infinity)
<s-implied-relative-verb-tail> hits 448/30774 nti 27 constraint DS = {13} extremes [2, infinity)
English:
<copular-preposition> <s-noun-phrase-nounless>
(hits 447/9334) (matched long text) constraint DS = {13} extremes [2, infinity)
(hits 447/9324) (matched long text) constraint DS = {13} extremes [2, infinity)
not <copular-preposition> <s-noun-phrase-nounless>
(hits 1/5353) (matched: 'not carried by the person asked') constraint DS = {13, 27} extremes [3, infinity)
(hits 1/5350) (matched: 'not carried by the person asked') constraint DS = {13, 27} extremes [3, infinity)
<s-relative-verb-tail> hits 183/23866 nti 6 constraint DS = {30} extremes [3, infinity)
English:
@ -7657,12 +7657,12 @@
{...}
constraint (none) extremes [1, infinity)
<s-literal-list> hits 0/3144 nti 28 constraint DS = {28} extremes [2, infinity)
<s-literal-list> hits 0/3136 nti 28 constraint DS = {28} extremes [2, infinity)
English:
{ }
(hits 0/3) constraint CS = {28} extremes [2, 2]
{ <literal-list-contents> }
(hits 0/1249) constraint DS = {28} extremes [3, infinity)
(hits 0/1245) constraint DS = {28} extremes [3, infinity)
<literal-list-contents> nti 27 constraint (none) extremes [1, infinity)
English:
@ -8696,7 +8696,7 @@
<episode-sentence-subject> hits 0/688 nti 9 constraint DS = {9} extremes [1, 2]
English:
<definite-article> story
(hits 0/5) constraint DS = {9} extremes [2, 2]
(hits 0/7) constraint DS = {9} extremes [2, 2]
this story
constraint CS = {9} extremes [2, 2]
story
@ -8820,23 +8820,23 @@
<spatial-specifying-nouns> hits 336/61212 nti 17 constraint DS = {17} extremes [1, infinity)
English:
_something/anything {***}
(hits 255/5743) (matched long text) constraint DS = {17} extremes [1, infinity)
(hits 255/5735) (matched long text) constraint DS = {17} extremes [1, infinity)
_somewhere/anywhere {***}
(hits 0/5488) constraint DS = {17} extremes [1, infinity)
(hits 0/5480) constraint DS = {17} extremes [1, infinity)
_someone/anyone/somebody/anybody {***}
(hits 57/5488) (matched: 'someone') constraint DS = {17} extremes [1, infinity)
(hits 57/5480) (matched: 'someone') constraint DS = {17} extremes [1, infinity)
_everything {***}
(hits 0/5431) constraint DS = {17} extremes [1, infinity)
(hits 0/5423) constraint DS = {17} extremes [1, infinity)
_everywhere {***}
(hits 0/5431) constraint DS = {17} extremes [1, infinity)
(hits 0/5423) constraint DS = {17} extremes [1, infinity)
_everyone/everybody {***}
(hits 0/5431) constraint DS = {17} extremes [1, infinity)
(hits 0/5423) constraint DS = {17} extremes [1, infinity)
_nowhere {***}
(hits 24/5431) (matched: 'nowhere') constraint DS = {17} extremes [1, infinity)
(hits 24/5423) (matched: 'nowhere') constraint DS = {17} extremes [1, infinity)
_nobody/no-one {***}
(hits 0/5407) constraint DS = {17} extremes [1, infinity)
(hits 0/5399) constraint DS = {17} extremes [1, infinity)
_no _one {***}
(hits 0/5208) constraint DS = {17} extremes [2, infinity)
(hits 0/5200) constraint DS = {17} extremes [2, infinity)
<notable-spatial-noun-phrases> hits 0/2166 nti 18 constraint CS = {18} extremes [1, 1]
English:
@ -9360,20 +9360,20 @@
<anl-entry-with-action> internal hits 958/2310 nti 12 constraint (none) extremes [1, infinity)
<action-pattern> hits 556/21216 nti 9 constraint (none) extremes [1, infinity)
<action-pattern> hits 556/21224 nti 9 constraint (none) extremes [1, infinity)
English:
asking <action-parameter> to try <action-pattern-core>
(hits 0/966) constraint DS = {9} extremes [5, infinity)
(hits 0/964) constraint DS = {9} extremes [5, infinity)
<action-parameter> trying <action-pattern-core>
(hits 23/2099) (matched long text) constraint DS = {9} extremes [3, infinity)
(hits 23/2100) (matched long text) constraint DS = {9} extremes [3, infinity)
an actor trying <action-pattern-core>
(hits 0/1627) constraint DS = {9} extremes [4, infinity)
(hits 0/1625) constraint DS = {9} extremes [4, infinity)
an actor <action-pattern-core>
(hits 408/2076) (matched long text) constraint DS = {9} extremes [3, infinity)
(hits 408/2077) (matched long text) constraint DS = {9} extremes [3, infinity)
trying <action-pattern-core>
(hits 0/2091) constraint DS = {9} extremes [2, infinity)
(hits 0/2095) constraint DS = {9} extremes [2, infinity)
<action-pattern-core-actor>
(hits 125/10177) (matched long text) constraint (none) extremes [1, infinity)
(hits 125/10181) (matched long text) constraint (none) extremes [1, infinity)
<we-are-action-pattern> hits 28/2746 nti 12 constraint (none) extremes [1, infinity)
English:
@ -9447,16 +9447,16 @@
we have not <action-pattern-past-core>
(hits 0/1002) constraint DS = {11} extremes [4, infinity)
<action-pattern-core-actor> hits 150/23094 nti 13 constraint (none) extremes [1, infinity)
<action-pattern-core-actor> hits 150/23102 nti 13 constraint (none) extremes [1, infinity)
English:
<action-pattern-core>
(hits 85/11547) (matched long text) constraint (none) extremes [1, infinity)
(hits 85/11551) (matched long text) constraint (none) extremes [1, infinity)
<actor-description> <action-pattern-core>
(hits 65/6514) (matched long text) constraint (none) extremes [2, infinity)
(hits 65/6518) (matched long text) constraint (none) extremes [2, infinity)
<actor-description> internal hits 76/13028 nti 14 constraint (none) extremes [1, infinity)
<actor-description> internal hits 76/13036 nti 14 constraint (none) extremes [1, infinity)
<action-pattern-core> internal hits 584/24114 nti 15 constraint (none) extremes [1, infinity)
<action-pattern-core> internal hits 584/24122 nti 15 constraint (none) extremes [1, infinity)
<action-pattern-past-core> internal nti 16 constraint (none) extremes [1, infinity)
@ -9857,23 +9857,23 @@
{...}
constraint (none) extremes [1, infinity)
<external-file-sentence-subject> hits 0/1078 nti 15 constraint (none) extremes [2, infinity)
<external-file-sentence-subject> hits 0/1070 nti 15 constraint (none) extremes [2, infinity)
English:
<definite-article> <external-file-sentence-subject>
(hits 0/513) constraint (none) extremes [2, infinity)
(hits 0/509) constraint (none) extremes [2, infinity)
text <external-file-name>
(hits 0/273) constraint DS = {14, 15} extremes [3, infinity)
(hits 0/268) constraint DS = {14, 15} extremes [3, infinity)
binary <external-file-name>
(hits 0/273) constraint DS = {14, 15} extremes [3, infinity)
(hits 0/268) constraint DS = {14, 15} extremes [3, infinity)
<external-file-name>
(hits 0/440) constraint DS = {14} extremes [2, infinity)
(hits 0/436) constraint DS = {14} extremes [2, infinity)
<external-file-name> hits 0/880 nti 14 constraint DS = {14} extremes [2, infinity)
<external-file-name> hits 0/872 nti 14 constraint DS = {14} extremes [2, infinity)
English:
{file ...} ( owned by <external-file-owner> )
(hits 0/81) constraint DS = {14} extremes [7, infinity)
(hits 0/77) constraint DS = {14} extremes [7, infinity)
{file ...}
(hits 0/440) constraint DS = {14} extremes [2, infinity)
(hits 0/436) constraint DS = {14} extremes [2, infinity)
<external-file-owner> nti 13 constraint (none) extremes [1, infinity)
English:
@ -9908,15 +9908,15 @@
<external-file-sentence-subject>
(hits 0/330) constraint (none) extremes [2, infinity)
<documentation-symbol-tail> hits 451/2552 nti 17 constraint DS = {16, 17} extremes [6, infinity)
<documentation-symbol-tail> hits 447/2552 nti 17 constraint DS = {16, 17} extremes [6, infinity)
English:
{...} ( <documentation-symbol> )
(hits 424/874) (matched long text) constraint DS = {16, 17} extremes [6, infinity)
(hits 424/870) (matched long text) constraint DS = {16, 17} extremes [6, infinity)
{...} -- <documentation-symbol> --
(hits 27/450) (matched long text) constraint DS = {16, 17} extremes [6, infinity)
(hits 23/446) (matched long text) constraint DS = {16, 17} extremes [6, infinity)
<documentation-symbol> hits 484/1196 nti 16 constraint DS = {16} extremes [3, 3]
<documentation-symbol> hits 480/1188 nti 16 constraint DS = {16} extremes [3, 3]
English:
documented at {###}
(hits 484/504) (matched: 'documented at act_startvm') constraint DS = {16} extremes [3, 3]
(hits 480/500) (matched: 'documented at act_startvm') constraint DS = {16} extremes [3, 3]

View file

@ -5221,26 +5221,10 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'matched text' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'matched text' {nonlocal: 'matched text'(var)snippet}} {created here}
COMMON_NOUN_NT'snippet that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=snippets variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the number understood -- documented at var_understood -- is '
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'number understood' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'number understood' {nonlocal: 'number understood'(var)number}} {created here}
COMMON_NOUN_NT'number that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the real number understood -- documented at var_understood -'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'real number understood' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'real number understood' {nonlocal: 'real number understood'(var)real number}} {created here}
COMMON_NOUN_NT'real number that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=real numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the time understood is a time that varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'time understood' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'time understood' {nonlocal: 'time understood'(var)time}} {created here}
COMMON_NOUN_NT'time that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=times variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the topic understood is a snippet that varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'topic understood' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'topic understood' {nonlocal: 'topic understood'(var)snippet}} {created here}
COMMON_NOUN_NT'snippet that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=snippets variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the truth state understood is a truth state that varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'truth state understood' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'truth state understood' {nonlocal: 'truth state understood'(var)truth state}} {created here}
COMMON_NOUN_NT'truth state that varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=truth states variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'the current item from the multiple object list is an object '
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'current item from the multiple object list' {definite 'the' n/m/f s/p nom/acc} {eval: NONLOCAL_VARIABLE_NT'current item from the multiple object list' {nonlocal: 'current item from the multiple object list'(var)object}} {created here}
@ -21048,10 +21032,26 @@ ROOT_NT
VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}
UNPARSED_NOUN_NT'fast route-finding'
HEADING_NT'invented sentences' {under: H0'invented sentences'} {heading 0} {implied}
SENTENCE_NT'number understood is a number which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'number understood' {eval: NONLOCAL_VARIABLE_NT'number understood' {nonlocal: 'number understood'(var)number}} {created here}
COMMON_NOUN_NT'number which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'real number understood is a real number which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'real number understood' {eval: NONLOCAL_VARIABLE_NT'real number understood' {nonlocal: 'real number understood'(var)real number}} {created here}
COMMON_NOUN_NT'real number which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=real numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'truth state understood is a truth state which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'truth state understood' {eval: NONLOCAL_VARIABLE_NT'truth state understood' {nonlocal: 'truth state understood'(var)truth state}} {created here}
COMMON_NOUN_NT'truth state which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=truth states variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'external file understood is a external file which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'external file understood' {eval: NONLOCAL_VARIABLE_NT'external file understood' {nonlocal: 'external file understood'(var)external file}} {created here}
COMMON_NOUN_NT'external file which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=external files variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'time understood is a time which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'time understood' {eval: NONLOCAL_VARIABLE_NT'time understood' {nonlocal: 'time understood'(var)time}} {created here}
COMMON_NOUN_NT'time which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=times variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'scene understood is a scene which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'scene understood' {eval: NONLOCAL_VARIABLE_NT'scene understood' {nonlocal: 'scene understood'(var)scene}} {created here}

View file

@ -1,13 +1,13 @@
Total memory consumption was 257166K = 251 MB
Total memory consumption was 256343K = 250 MB
62.5% was used for 1330253 objects, in 273349 frames in 201 x 800K = 160800K = 157 MB:
62.4% was used for 1330154 objects, in 273349 frames in 200 x 800K = 160000K = 156 MB:
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.4% text_stream_array 2568 x 100 = 256800 objects, 14462976 bytes
5.5% text_stream_array 2567 x 100 = 256700 objects, 14457344 bytes
3.9% parse_node 129994 objects, 10399520 bytes
2.8% verb_conjugation 160 objects, 7425280 bytes
2.6% parse_node_annotation_array 431 x 500 = 215500 objects, 6909792 bytes
2.3% inter_symbol_array 70 x 1024 = 71680 objects, 6310080 bytes
2.4% inter_symbol_array 70 x 1024 = 71680 objects, 6310080 bytes
1.8% linked_list 8904 objects, 4986240 bytes
1.3% pcalc_prop_array 24 x 1000 = 24000 objects, 3648768 bytes
1.2% map_data 668 objects, 3168992 bytes
@ -63,9 +63,9 @@ Total memory consumption was 257166K = 251 MB
---- booking 860 objects, 61920 bytes
---- grammar_verb 130 objects, 57200 bytes
---- property_permission 96 objects, 56832 bytes
---- kind_constructor 77 objects, 56056 bytes
---- pcalc_func_array 1 x 1000 objects, 56032 bytes
---- ph_stack_frame_box 577 objects, 55392 bytes
---- kind_constructor 77 objects, 54824 bytes
---- text_substitution 436 objects, 48832 bytes
---- grammar_line 230 objects, 46000 bytes
---- table 7 objects, 45528 bytes
@ -126,16 +126,16 @@ Total memory consumption was 257166K = 251 MB
---- property_of_value_storage 93 objects, 2976 bytes
---- submodule_request 72 objects, 2880 bytes
---- inter_construct 32 objects, 2560 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- semver_range 22 objects, 2288 bytes
---- use_option 29 objects, 1856 bytes
---- method_set 56 objects, 1792 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- table_contribution_array 1 x 100 objects, 1632 bytes
---- activity_crossref_array 1 x 100 objects, 1632 bytes
---- plugin_call_array 1 x 100 objects, 1632 bytes
---- activity_crossref_array 1 x 100 objects, 1632 bytes
---- kind_interaction 39 objects, 1560 bytes
---- inter_annotation_form 37 objects, 1480 bytes
---- pipeline_step 12 objects, 1440 bytes
@ -149,38 +149,38 @@ Total memory consumption was 257166K = 251 MB
---- quantifier 16 objects, 1024 bytes
---- table_column 16 objects, 896 bytes
---- inbuild_requirement 22 objects, 880 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- code_generation 1 object, 864 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- runtime_kind_structure 13 objects, 832 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
---- pipeline_stage 17 objects, 816 bytes
---- target_vm 6 objects, 816 bytes
---- pipeline_stage 17 objects, 816 bytes
---- generated_segment 25 objects, 800 bytes
---- inter_data_type 14 objects, 784 bytes
---- submodule_identity 23 objects, 736 bytes
---- implication 13 objects, 728 bytes
---- rulebook_outcome 17 objects, 680 bytes
---- inform_language 6 objects, 672 bytes
---- relation_guard 5 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- inter_warehouse_room 10 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- nascent_array 7 objects, 616 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- named_rulebook_outcome 15 objects, 600 bytes
---- label_namespace 10 objects, 560 bytes
---- small_word_set 11 objects, 528 bytes
---- inform_kit 5 objects, 520 bytes
---- equation 4 objects, 416 bytes
---- i6_memory_setting 13 objects, 416 bytes
---- module_package 10 objects, 400 bytes
---- equation 4 objects, 416 bytes
---- dval_written 10 objects, 400 bytes
---- module_package 10 objects, 400 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- inbuild_genre 7 objects, 336 bytes
---- grammatical_category 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- build_step 4 objects, 288 bytes
---- door_to_notice 5 objects, 280 bytes
---- inform_pipeline 4 objects, 256 bytes
@ -191,12 +191,12 @@ Total memory consumption was 257166K = 251 MB
---- kit_dependency 4 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inform_project 1 object, 176 bytes
---- inter_architecture 4 objects, 160 bytes
---- pointer_allocation 2 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- code_generation_target 4 objects, 160 bytes
---- codegen_pipeline 1 object, 128 bytes
---- inter_architecture 4 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- element_activation 4 objects, 128 bytes
---- codegen_pipeline 1 object, 128 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_kit_ittt 2 objects, 96 bytes
---- article 2 objects, 80 bytes
@ -205,14 +205,15 @@ Total memory consumption was 257166K = 251 MB
---- inter_warehouse 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- blorb_figure 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- parse_name_notice 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- parse_name_notice 1 object, 40 bytes
37.4% was used for memory not allocated for objects:
37.5% was used for memory not allocated for objects:
15.8% text stream storage 41864300 bytes in 263198 claims
15.9% text stream storage 41840328 bytes in 263037 claims
3.5% dictionary storage 9265664 bytes in 16347 claims
---- sorting 1048 bytes in 3 claims
2.7% source text 7200000 bytes in 3 claims
@ -220,7 +221,7 @@ Total memory consumption was 257166K = 251 MB
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
0.8% inter symbols storage 2277376 bytes in 13914 claims
6.3% inter bytecode storage 16802820 bytes in 14 claims
6.4% inter bytecode storage 16802820 bytes in 14 claims
3.3% inter links storage 8750208 bytes in 246 claims
0.5% instance-of-kind counting 1468944 bytes in 1 claim
---- lists for type-checking invocations 16000 bytes in 1 claim
@ -229,5 +230,5 @@ Total memory consumption was 257166K = 251 MB
---- emitter array storage 14368 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
20.3% was overhead - 53603200 bytes = 52346K = 51 MB
20.1% was overhead - 52790816 bytes = 51553K = 50 MB

View file

@ -3,7 +3,7 @@
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/1233) constraint DS = {6} extremes [2, 2]
(hits 0/1235) constraint DS = {6} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 273/815) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {6} extremes [4, 4]
(@1)<quoted-text>=1
@ -16,7 +16,7 @@
(@1)<s-literal-truth-state>=1
(hits 78/103) (matched: 'false') constraint CS = {26} extremes [1, 1]
<s-literal-list>=1
(hits 0/1572) constraint DS = {28} extremes [2, infinity)
(hits 0/1568) constraint DS = {28} extremes [2, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/3241) constraint DS = {6} extremes [2, infinity)
<s-literal-time>=1

View file

@ -1083,10 +1083,26 @@ ROOT_NT
VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}
UNPARSED_NOUN_NT'fast route-finding'
HEADING_NT'invented sentences' {under: H0'invented sentences'} {heading 0} {implied}
SENTENCE_NT'number understood is a number which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'number understood' {eval: NONLOCAL_VARIABLE_NT'number understood' {nonlocal: 'number understood'(var)number}} {created here}
COMMON_NOUN_NT'number which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'real number understood is a real number which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'real number understood' {eval: NONLOCAL_VARIABLE_NT'real number understood' {nonlocal: 'real number understood'(var)real number}} {created here}
COMMON_NOUN_NT'real number which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=real numbers variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'truth state understood is a truth state which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'truth state understood' {eval: NONLOCAL_VARIABLE_NT'truth state understood' {nonlocal: 'truth state understood'(var)truth state}} {created here}
COMMON_NOUN_NT'truth state which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=truth states variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'external file understood is a external file which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'external file understood' {eval: NONLOCAL_VARIABLE_NT'external file understood' {nonlocal: 'external file understood'(var)external file}} {created here}
COMMON_NOUN_NT'external file which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=external files variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'time understood is a time which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'time understood' {eval: NONLOCAL_VARIABLE_NT'time understood' {nonlocal: 'time understood'(var)time}} {created here}
COMMON_NOUN_NT'time which varies' {indefinite 'a' n/m/f nom/acc s} {creation: [ kind=times variable-pointer(x) ]} {eval: TEST_VALUE_NT}
SENTENCE_NT'scene understood is a scene which varies'
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'scene understood' {eval: NONLOCAL_VARIABLE_NT'scene understood' {nonlocal: 'scene understood'(var)scene}} {created here}

View file

@ -1,11 +1,11 @@
100.0% in inform7 run
66.9% in compilation to Inter
66.6% in compilation to Inter
25.1% in //Phrases::Manager::compile_first_block//
8.4% in //Phrases::Manager::compile_as_needed//
6.9% in //Strings::compile_responses//
6.3% in //World::Compile::compile//
8.2% in //Phrases::Manager::compile_as_needed//
7.3% in //Strings::compile_responses//
6.0% in //World::Compile::compile//
4.4% in //MajorNodes::pre_pass//
3.1% in //MajorNodes::pass_1//
3.2% in //MajorNodes::pass_1//
2.1% in //Phrases::Manager::RulePrintingRule_routine//
1.9% in //Phrases::Manager::rulebooks_array//
1.0% in //VerbsAtRunTime::ConjugateVerb//
@ -18,11 +18,11 @@
0.1% in //Kinds::RunTime::compile_data_type_support_routines//
0.1% in //PL::Parsing::Verbs::compile_all//
0.1% in //Task::make_built_in_kind_constructors//
3.6% not specifically accounted for
30.7% in running Inter pipeline
10.0% in step preparation
9.9% in inter step 2/12: link
7.2% in inter step 12/12: generate inform6 -> auto.inf
3.3% not specifically accounted for
31.0% in running Inter pipeline
10.0% in inter step 2/12: link
9.6% in step preparation
7.3% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
@ -31,6 +31,6 @@
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
1.9% not specifically accounted for
2.5% not specifically accounted for
1.9% in supervisor
0.4% not specifically accounted for

View file

@ -4,13 +4,11 @@ builtin base OBJECT_TY {
plural: objects
default-value: 0
constant-compilation-method: special
printing-routine: PrintShortName
printing-routine-actions: DA_Name
constant-compilation-method: special
can-coincide-with-property: no
printing-routine-for-debugging: DA_Name
description: an object
index-priority: 1
index-default-value: nothing
specification-text: Objects are values intended to simulate physical things: places, people, things, and so on. They come in many kinds. The special value 'nothing' is also allowed, and can be used to mean 'no object at all'.
@ -22,15 +20,14 @@ builtin base NUMBER_TY {
plural: numbers
default-value: 0
comparison-routine: signed
can-exchange: yes
parsing-routine: DECIMAL_TOKEN
printing-routine: DecimalNumber
printing-routine-actions: DA_Number
constant-compilation-method: literal
description: a number
comparison-routine: signed
parsing-routine: DECIMAL_TOKEN
printing-routine: DecimalNumber
printing-routine-for-debugging: DA_Number
documentation-reference: kind_number
index-priority: 2
index-default-value: 0
@ -39,20 +36,19 @@ builtin base NUMBER_TY {
builtin base REAL_NUMBER_TY {
conforms-to: REAL_ARITHMETIC_VALUE_TY
compatible-with: NUMBER_TY
singular: real number
plural: real numbers
comparison-routine: REAL_NUMBER_TY_Compare
default-value: 0
can-exchange: yes
cast: NUMBER_TY
parsing-routine: FLOAT_TOKEN
printing-routine: REAL_NUMBER_TY_Say
printing-routine-actions: REAL_NUMBER_TY_Say
constant-compilation-method: literal
description: a real number
comparison-routine: REAL_NUMBER_TY_Compare
parsing-routine: FLOAT_TOKEN
printing-routine: REAL_NUMBER_TY_Say
printing-routine-for-debugging: REAL_NUMBER_TY_Say
documentation-reference: kind_real_number
index-priority: 2
index-default-value: 0
@ -66,14 +62,13 @@ builtin base TRUTH_STATE_TY {
default-value: false
can-exchange: yes
loop-domain-schema: for (*1=0: *1<=1: *1++)
parsing-routine: TRUTH_STATE_TOKEN
printing-routine: DA_TruthState
printing-routine-actions: DA_TruthState
constant-compilation-method: literal
description: something which is either true or false
parsing-routine: TRUTH_STATE_TOKEN
printing-routine: DA_TruthState
printing-routine-for-debugging: DA_TruthState
documentation-reference: kind_truthstate
index-default-value: false
specification-text: The state of whether something is 'true' or 'false'. (In other computing languages, this might be called 'boolean', after the 19th-century logician George Boole, who first realised this was a kind of value.)
@ -81,6 +76,7 @@ builtin base TRUTH_STATE_TY {
builtin base TEXT_TY {
conforms-to: POINTER_VALUE_TY
compatible-with: SNIPPET_TY
singular: text
plural: texts
@ -88,16 +84,14 @@ builtin base TEXT_TY {
multiple-block: yes
heap-size-estimate: 256
small-block-size: 2
cast: SNIPPET_TY
can-exchange: yes
recognition-only-GPR: TEXT_TY_ROGPR
distinguisher: TEXT_TY_Distinguish
comparison-routine: BlkValueCompare
printing-routine: TEXT_TY_Say
constant-compilation-method: special
description: some text
comparison-routine: BlkValueCompare
distinguishing-routine: TEXT_TY_Distinguish
printing-routine: TEXT_TY_Say
recognition-routine: TEXT_TY_ROGPR
index-default-value: ""
specification-text: Some text in double quotation marks, perhaps with substitutions written in square brackets.
}
@ -108,11 +102,10 @@ builtin base SNIPPET_TY {
plural: snippets
default-value: 101
printing-routine: PrintSnippet
constant-compilation-method: none
description: a snippet
printing-routine: PrintSnippet
documentation-reference: kind_snippet
index-default-value: <i>word 1 of command</i>
specification-text: A fragment of the player's most recent typed command, taking in a run of consecutive words.
@ -124,10 +117,8 @@ builtin base UNICODE_CHARACTER_TY {
plural: unicode characters
default-value: 32
constant-compilation-method: literal
description: a Unicode character
index-default-value: unicode 32 (<i>a space</i>)
specification-text: A single character - a letter or item of punctuation.
}
@ -138,12 +129,11 @@ builtin base USE_OPTION_TY {
plural: use options
default-value: 0
loop-domain-schema: for (*1=0: *1<NO_USE_OPTIONS: *1++)
printing-routine: PrintUseOption
constant-compilation-method: special
description: the name of a use option
printing-routine: PrintUseOption
index-priority: 6
index-default-value: the ineffectual option
specification-text: One of the optional ways to configure Inform, such as the 'authorial modesty option'.
@ -155,12 +145,11 @@ builtin base RESPONSE_TY {
plural: responses
default-value: 0
loop-domain-schema: for (*1=1: *1<=NO_RESPONSES: *1++)
printing-routine: PrintResponse
constant-compilation-method: special
description: the name of a response
printing-routine: PrintResponse
index-priority: 6
index-default-value: ?
specification-text: One of the standard responses issued by the Standard Rules or other extensions.
@ -172,12 +161,11 @@ builtin base VERB_TY {
plural: verbs
default-value: 0
loop-domain-schema: for (*2=0, *1=TableOfVerbs-->*2: *1: *2++, *1=TableOfVerbs-->*2)
printing-routine: PrintVerbAsValue
constant-compilation-method: special
description: the name of a verb
printing-routine: PrintVerbAsValue
documentation-reference: kind_verb
index-priority: 6
index-default-value: verb be
@ -190,12 +178,11 @@ builtin base TABLE_TY {
plural: table names
default-value: TheEmptyTable
loop-domain-schema: for (*2=0, *1=TableOfTables-->*2: *1: *2++, *1=TableOfTables-->*2)
printing-routine: PrintTableName
constant-compilation-method: special
description: the name of a table
printing-routine: PrintTableName
documentation-reference: kind_tablename
index-priority: 6
index-default-value: <i>a table with no rows or columns</i>
@ -209,11 +196,10 @@ builtin base EQUATION_TY {
plural: equation names
default-value: 0
printing-routine: DA_Number
constant-compilation-method: special
description: the name of an equation
printing-routine: DA_Number
index-priority: 6
index-default-value: <i>an equation doing nothing</i>
indexed-grey-if-empty: yes
@ -225,11 +211,11 @@ builtin base RULEBOOK_OUTCOME_TY {
singular: rulebook outcome
plural: rulebook outcomes
printing-routine: RulebookOutcomePrintingRule
constant-compilation-method: special
index-default-value: allow access
description: the name of a rulebook outcome
printing-routine: RulebookOutcomePrintingRule
index-default-value: allow access
index-priority: 6
}
@ -239,18 +225,18 @@ builtin constructor PHRASE_TY {
plural: phrases k -> l
terms: contravariant list, covariant optional
printing-routine: SayPhraseName
constant-compilation-method: special
printing-routine: SayPhraseName
index-default-value: <i>always the default value of L</i>
}
builtin constructor VARIABLE_TY {
conforms-to: STORED_VALUE_TY
terms: covariant
singular: variable-pointer | k variable-pointer
plural: variable-pointers | k variable-pointers
terms: covariant
index-priority: 0
! Represents a variable name
@ -266,29 +252,27 @@ builtin constructor RELATION_TY {
multiple-block: yes
heap-size-estimate: 8
can-exchange: yes
constant-compilation-method: special
comparison-routine: BlkValueCompare
constant-compilation-method: special
distinguisher: RELATION_TY_Distinguish
distinguishing-routine: RELATION_TY_Distinguish
printing-routine: RELATION_TY_Say
description: a relation of K to L
index-default-value: <i>a relation never holding</i>
}
builtin constructor RULE_TY {
conforms-to: SAYABLE_VALUE_TY
compatible-with: RULEBOOK_TY
singular: rule | k based rule | rule producing l | k based rule producing l
plural: rules | k based rules | rules producing l | k based rules producing l
terms: contravariant optional, covariant optional
cast: RULEBOOK_TY
default-value: LITTLE_USED_DO_NOTHING_R
printing-routine: RulePrintingRule
constant-compilation-method: special
description: the name of a rule
printing-routine: RulePrintingRule
documentation-reference: kind_rule
index-default-value: the little-used do nothing rule
indexed-grey-if-empty: yes
@ -302,11 +286,10 @@ builtin constructor RULEBOOK_TY {
terms: contravariant optional, covariant optional
default-value: 0
constant-compilation-method: special
printing-routine: RulePrintingRule
description: the name of a rulebook
documentation-reference: kind_rulebook
index-default-value: the action-processing rules
specification-text: A list of rules to follow, in sequence, to get something done. A rulebook is like a ring-binder, with the individual rules as sheets of paper. Inform normally sorts these into their 'natural' order, with the most specific rules first, but it's easy to shuffle the pages if you need to. When some task is carried out during play, Inform is normally working through a rulebook, turning the pages one by one.
@ -319,10 +302,8 @@ builtin constructor ACTIVITY_TY {
terms: contravariant optional
default-value: PRINTING_THE_NAME_ACT
constant-compilation-method: special
description: an activity
documentation-reference: kind_activity
index-default-value: printing the name
specification-text: An activity is something which Inform does as part of the mechanics of play - for instance, printing the name of an object, which Inform often has to do. An activity can happen by itself ('printing the banner text', for instance) or can be applied to an object ('printing the name of something', say).
@ -338,13 +319,12 @@ builtin constructor LIST_OF_TY {
multiple-block: yes
heap-size-estimate: 256
can-exchange: yes
constant-compilation-method: special
comparison-routine: BlkValueCompare
constant-compilation-method: special
distinguisher: LIST_OF_TY_Distinguish
distinguishing-routine: LIST_OF_TY_Distinguish
printing-routine: LIST_OF_TY_Say
description: a list of
documentation-reference: kind_listof
index-default-value: { }
specification-text: A flexible-length list of values, where all of the items have to have the same kind of value as each other - for instance, a list of rooms, or a list of lists of numbers. The empty list, with no items yet, is written { }, and a list with items in is written with commas dividing them - say {2, 5, 9}.
@ -357,10 +337,8 @@ builtin constructor DESCRIPTION_OF_TY {
terms: covariant
default-value: Prop_Falsity
constant-compilation-method: special
description: a description of
documentation-reference: kind_description
index-default-value: <i>matching nothing</i>
specification-text: A description of a set of values, where all of the items have to have the same kind of value as each other - for instance, 'even numbers' or 'open doors which are in lighted rooms'.
@ -373,9 +351,8 @@ builtin constructor PROPERTY_TY {
terms: covariant
constant-compilation-method: special
printing-routine: PROPERTY_TY_Say
description: a property of something
printing-routine: PROPERTY_TY_Say
}
builtin constructor TABLE_COLUMN_TY {
@ -385,8 +362,6 @@ builtin constructor TABLE_COLUMN_TY {
terms: covariant
constant-compilation-method: special
description: the name of a column
}
builtin constructor COMBINATION_TY {
@ -399,13 +374,12 @@ builtin constructor COMBINATION_TY {
multiple-block: yes
heap-size-estimate: 256
can-exchange: yes
constant-compilation-method: special
comparison-routine: BlkValueCompare
constant-compilation-method: special
distinguisher: COMBINATION_TY_Distinguish
distinguishing-routine: COMBINATION_TY_Distinguish
printing-routine: COMBINATION_TY_Say
description: a list of
documentation-reference: kind_listof
index-priority: 0
index-default-value: { }

View file

@ -3,14 +3,11 @@ new base EXTERNAL_FILE_TY {
singular: external file
plural: external files
created-with-assertions: yes
default-value: 0
printing-routine: PrintExternalFileName
invent-source-text: *UNDERSTOOD-VARIABLE
constant-compilation-method: quantitative
description: the name of a file
printing-routine: PrintExternalFileName
documentation-reference: kind_externalfile
index-priority: 6
index-default-value: <i>a non-file</i>

View file

@ -1,3 +1,10 @@
! Neptune files can create whatever macros they like, and use the apply-macro
! command to apply them; but the ones below are known to the compiler and are
! applied automatically in certain circumstances.
! If they exist, these four macros are run on each new base, constructor,
! protocol or punctuation before any other properties are set:
macro #BASE {
index-priority: 3
}
@ -11,55 +18,48 @@ macro #PROTOCOL {
index-priority: 0
}
! New kinds of value are initially given these settings:
invention *UNDERSTOOD-VARIABLE {
<kind> understood is a <kind> which varies.
}
! When a sentence like "A whatsit is a kind of value" is read, this is applied:
macro #NEW {
conforms-to: STORED_VALUE_TY
is-incompletely-defined: yes
created-with-assertions: yes
can-exchange: yes
can-coincide-with-property: yes
description: a designed type
comparison-routine: signed
}
! When the source text specifies either a named constant value, or a literal
! pattern, it decides whether the new type is to be an enumeration or a unit,
! at which point one of the following macros is applied to the type:
! pattern, it decides whether the new kind is to be an enumeration or a unit,
! at which point either #ENUMERATION or #UNIT is applied:
macro #ENUMERATION {
conforms-to: ENUMERATED_VALUE_TY
is-incompletely-defined: no
created-with-assertions: yes
default-value: 1
index-default-value: <first-constant>
index-priority: 5
comparison-routine: signed
can-exchange: yes
description: a designed type
constant-compilation-method: quantitative
invent-source-text: *UNDERSTOOD-VARIABLE
}
! #LINGUISTIC is applied immediately after #ENUMERATION if the kind is one
! of those used grammatically in the English Language extenstion.
macro #LINGUISTIC {
index-priority: 7
}
macro #UNIT {
conforms-to: ARITHMETIC_VALUE_TY
is-incompletely-defined: no
comparison-routine: signed
can-exchange: yes
created-with-assertions: no
default-value: 0
index-default-value: <0-in-literal-pattern>
index-priority: 2
constant-compilation-method: literal
invent-source-text: *UNDERSTOOD-VARIABLE
}
! #REAL is applied immediately after #UNIT if the kind needs to use real
! rather than integer arithmetic.
macro #REAL {
conforms-to: REAL_ARITHMETIC_VALUE_TY
}
macro #LINGUISTIC {
index-priority: 7
}

View file

@ -14,10 +14,18 @@ builtin protocol VALUE_TY {
plural: sayable values
}
! This invented sentence will be added, mutatum mutandis, for
! each understandable kind which is created:
invention *UNDERSTOOD-VARIABLE {
<kind> understood is a <kind> which varies.
}
builtin protocol UNDERSTANDABLE_VALUE_TY {
conforms-to: SAYABLE_VALUE_TY
singular: understandable value
plural: understandable values
invent-source-text: *UNDERSTOOD-VARIABLE
}
builtin protocol ARITHMETIC_VALUE_TY {

View file

@ -1,26 +1,22 @@
builtin punctuation INTERMEDIATE_TY {
! Represents intermediate results of arithmetic in dimensional formulae
conforms-to: ARITHMETIC_VALUE_TY
description: the intermediate result of some complex calculation
}
builtin punctuation NIL_TY {
description: nothing
}
builtin punctuation UNKNOWN_TY {
description: unknown
}
builtin punctuation VOID_TY {
description: nothing
}
builtin punctuation KIND_VARIABLE_TY {
description: a variable denoting a kind
}
builtin constructor TUPLE_ENTRY_TY {
terms: covariant, covariant
index-priority: 0
}

View file

@ -1,14 +1,13 @@
builtin base UNDERSTANDING_TY {
conforms-to: STORED_VALUE_TY
compatible-with: TEXT_TY
singular: topic
plural: topics
cast: TEXT_TY
default-value: DefaultTopic
printing-routine-actions: DA_Topic
constant-compilation-method: special
description: a topic
printing-routine-for-debugging: DA_Topic
index-priority: 0
}

View file

@ -5,7 +5,6 @@ new base DESCRIPTION_OF_ACTION_TY {
constant-compilation-method: special
description: a stored action
index-priority: 0
! To represent an action test implicitly cast as a conditional rvalue
}
@ -19,13 +18,12 @@ new base STORED_ACTION_TY {
multiple-block: no
heap-size-estimate: 16
can-exchange: yes
distinguisher: STORED_ACTION_TY_Distinguish
printing-routine: STORED_ACTION_TY_Say
comparison-routine: BlkValueCompare
constant-compilation-method: special
description: a stored action
distinguishing-routine: STORED_ACTION_TY_Distinguish
printing-routine: STORED_ACTION_TY_Say
comparison-routine: BlkValueCompare
documentation-reference: kind_storedaction
index-default-value: waiting
specification-text: A stored action, which can later be tried.
@ -37,12 +35,11 @@ new base ACTION_NAME_TY {
plural: action names
default-value: ##Wait
loop-domain-schema: for (*2=0,*1=ActionNumberIndexed(*2): *2<AD_RECORDS: *2++,*1=ActionNumberIndexed(*2))
printing-routine: SayActionName
constant-compilation-method: special
description: an action name
printing-routine: SayActionName
documentation-reference: kind_actionname
index-priority: 6
index-default-value: waiting action

View file

@ -3,14 +3,11 @@ new base FIGURE_NAME_TY {
singular: figure name
plural: figure names
created-with-assertions: yes
default-value: 1
printing-routine: PrintFigureName
invent-source-text: *UNDERSTOOD-VARIABLE
constant-compilation-method: quantitative
description: the name of a figure
printing-routine: PrintFigureName
documentation-reference: kind_figurename
index-priority: 6
index-default-value: figure of cover

View file

@ -3,15 +3,12 @@ new base SCENE_TY {
singular: scene
plural: scenes
created-with-assertions: yes
default-value: 0
loop-domain-schema: for (*1=1: *1<=NUMBER_SCENES_CREATED: *1++)
printing-routine: PrintSceneName
constant-compilation-method: quantitative
invent-source-text: *UNDERSTOOD-VARIABLE
description: a scene
printing-routine: PrintSceneName
documentation-reference: kind_scene
index-priority: 4
index-default-value: the Entire Game

View file

@ -3,14 +3,11 @@ new base SOUND_NAME_TY {
singular: sound name
plural: sound names
created-with-assertions: yes
default-value: 0
printing-routine: PrintSoundName
invent-source-text: *UNDERSTOOD-VARIABLE
constant-compilation-method: quantitative
description: the name of a sound effect
printing-routine: PrintSoundName
documentation-reference: kind_soundname
index-priority: 6
index-default-value: <i>a silent non-sound</i>

View file

@ -6,14 +6,13 @@ new base TIME_TY {
default-value: 540
comparison-routine: signed
can-exchange: yes
loop-domain-schema: for (*1=0: *1<TWENTY_FOUR_HOURS: *1++)
parsing-routine: TIME_TOKEN
printing-routine: PrintTimeOfDay
printing-routine-actions: PrintTimeOfDay
constant-compilation-method: literal
description: a time
parsing-routine: TIME_TOKEN
printing-routine: PrintTimeOfDay
printing-routine-for-debugging: PrintTimeOfDay
documentation-reference: kind_time
index-default-value: 9:00 AM
index-minimum-value: 1 minute

View file

@ -9,10 +9,10 @@
stored value <= value
sayable value <= value, stored value
understandable value <= value, stored value, sayable value
pointer value <= value, stored value, sayable value
arithmetic value <= value, stored value, sayable value, understandable value
real arithmetic value <= value, stored value, sayable value, understandable value, arithmetic value
enumerated value <= value, stored value, sayable value, understandable value
pointer value <= value, stored value, sayable value
object <= value, stored value, sayable value
number <= value, stored value, sayable value, understandable value, arithmetic value
real number <= value, stored value, sayable value, understandable value, arithmetic value, real arithmetic value
@ -37,7 +37,7 @@
property <= value, stored value
table column <= value, stored value
combination value and value <= value, stored value, sayable value, pointer value
nothing <= value, stored value, sayable value, understandable value, pointer value, arithmetic value, real arithmetic value, enumerated value, object, number, real number, truth state, text, snippet, unicode character, use option, response, verb, table name, equation name, rulebook outcome, phrase value -> value, values variable-pointer, relation of values, values based rule producing values, values based rulebook producing values, activity on values, list of nothing, description of values, property, table column, combination value and value, , nothing, value, value, external file, described action, action, action name, time, scene, figure name, sound name, topic, natural language, grammatical tense, narrative viewpoint, grammatical case, grammatical gender, room, thing, direction, door, container, supporter, backdrop, person, region, man, woman, animal, device, vehicle, player's holdall, command parser error
nothing <= value, stored value, sayable value, understandable value, arithmetic value, real arithmetic value, enumerated value, pointer value, object, number, real number, truth state, text, snippet, unicode character, use option, response, verb, table name, equation name, rulebook outcome, phrase value -> value, values variable-pointer, relation of values, values based rule producing values, values based rulebook producing values, activity on values, list of nothing, description of values, property, table column, combination value and value, , nothing, value, value, external file, described action, action, action name, time, scene, figure name, sound name, topic, natural language, grammatical tense, narrative viewpoint, grammatical case, grammatical gender, room, thing, direction, door, container, supporter, backdrop, person, region, man, woman, animal, device, vehicle, player's holdall, command parser error
<= value
nothing <= value
value, value <= value
@ -85,10 +85,10 @@
stored value -> value ->
sayable value -> stored value -> value ->
understandable value -> sayable value -> stored value -> value ->
pointer value -> sayable value -> stored value -> value ->
arithmetic value -> understandable value -> sayable value -> stored value -> value ->
real arithmetic value -> arithmetic value -> understandable value -> sayable value -> stored value -> value ->
enumerated value -> understandable value -> sayable value -> stored value -> value ->
pointer value -> sayable value -> stored value -> value ->
object -> sayable value -> stored value -> value ->
number -> arithmetic value -> understandable value -> sayable value -> stored value -> value ->
real number -> real arithmetic value -> arithmetic value -> understandable value -> sayable value -> stored value -> value ->

View file

@ -2,11 +2,11 @@ Inform 7 v10.1.0 has started.
I've now read your source text, which is 15 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32113 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_VariableContradiction
>--> You wrote 'The command prompt is "What do you want to do? >"' (source
text, line 3), but in another sentence 'The command prompt is ">"' (the
Standard Rules, line 459): but this looks like a contradiction, because the
Standard Rules, line 455): but this looks like a contradiction, because the
initial value of this variable seems to be being set in each of these
sentences, but with a different outcome.
Inform 7 has finished.

View file

@ -310,7 +310,7 @@ interpret no indication of a kind as meaning "object".
@<Create the object and add to the identification slate@> =
if (is_a_kind) {
K = Kinds::new_base(Task::syntax_tree(), NW, K);
K = Kinds::new_base(NW, K);
current_interpretation_as_infs[v] = Kinds::Knowledge::as_subject(K);
current_interpretation_as_spec[v] = Specifications::from_kind(K);
} else if ((is_a_var) || (is_a_const)) {

View file

@ -128,7 +128,7 @@ the values given there.
if (Kinds::FloatingPoint::uses_floating_point(K)) bits += TB_COLUMN_REAL;
if (Kinds::Behaviour::uses_pointer_values(K)) bits += TB_COLUMN_ALLOCATED;
if ((K_understanding) && (Kinds::eq(K, K_understanding))) bits = TB_COLUMN_TOPIC;
if ((K_understanding) && (Kinds::eq(K, K_understanding))) bits = TB_COLUMN_TOPIC;
if (Tables::Support::requires_blanks_bitmap(K) == FALSE) bits += TB_COLUMN_NOBLANKBITS;
if (t->preserve_row_order_at_run_time) bits += TB_COLUMN_DONTSORTME;

View file

@ -89,7 +89,7 @@ void I6T::interpreter_shared(parse_node_tree *T, int int_mode, OUTPUT_STREAM, wc
text_file_position tfp = TextFiles::at(index_structure, lc);
parse_node *cs = current_sentence;
current_sentence = NULL;
NeptuneFiles::read_command(T, argument, &tfp);
NeptuneFiles::read_command(argument, &tfp);
current_sentence = cs;
continue;
}

View file

@ -48,9 +48,22 @@ void MajorNodes::traverse(int pass) {
parse_node *last = NULL;
SyntaxTree::traverse_nodep(Task::syntax_tree(), MajorNodes::visit, &last);
if (pass == 1) @<Extend the pass to invented sentences from kinds@>;
if (pass == 2) @<Extend the pass to sentences needed when implicit kinds are set@>;
}
@<Extend the pass to invented sentences from kinds@> =
parse_node *extras = last;
ParseTreeUsage::add_kind_inventions();
current_sentence = extras;
global_pass_state.assembly_position = extras;
global_pass_state.pass = 0;
SyntaxTree::traverse_nodep_from(extras, MajorNodes::visit, &last);
current_sentence = extras;
global_pass_state.assembly_position = extras;
global_pass_state.pass = 1;
SyntaxTree::traverse_nodep_from(extras, MajorNodes::visit, &last);
@ Here's a tricky timing problem, or rather, here's the fix for it. Assemblies
are made when the kinds of objects are set, and they're made by inserting
appropriate sentences. For instance, given the generalisation:

View file

@ -47,7 +47,7 @@ automatically creates it.
}
inference_subject *owner_infs = Node::get_subject(owner_ref);
kind *K = InferenceSubjects::domain(owner_infs);
Kinds::Behaviour::convert_to_enumeration(Task::syntax_tree(), K);
Kinds::Behaviour::convert_to_enumeration(K);
if ((K) && (Kinds::Knowledge::has_properties(K) == FALSE))
@<Disallow this kind as a new owner of a value property@>;
property *prn = Properties::Valued::obtain(Node::get_text(p));

View file

@ -175,7 +175,7 @@ be done later on: see the "Instance Counts" plugin.
if (!(Kinds::Behaviour::is_object(K))) {
if (Kinds::Behaviour::has_named_constant_values(K) == FALSE)
internal_error("tried to make an instance value for impossible kind");
I->enumeration_index = Kinds::Behaviour::new_enumerated_value(Task::syntax_tree(), K);
I->enumeration_index = Kinds::Behaviour::new_enumerated_value(K);
if (cp) Instances::register_as_adjectival_constant(I, cp);
}

View file

@ -2459,7 +2459,7 @@ does not throw a problem message as being a bar which is out of range
"and not the built-in ones like 'number' or 'time'.");
return owner;
}
if (Kinds::Behaviour::convert_to_unit(Task::syntax_tree(), K) == FALSE) {
if (Kinds::Behaviour::convert_to_unit(K) == FALSE) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_LPEnumeration),
"this is a kind of value which already has named values",
"so it can't have a basically numerical form as well.");
@ -2580,7 +2580,7 @@ not really distort matters.
@<Adopt real arithmetic if this is called for@> =
if (integer_scaling == FALSE) {
Kinds::Behaviour::convert_to_real(Task::syntax_tree(), K);
Kinds::Behaviour::convert_to_real(K);
Kinds::Scalings::convert_to_real(&(lp->scaling));
}

View file

@ -380,6 +380,10 @@ int ParseTreeUsage::is_phrasal(parse_node *pn) {
return FALSE;
}
void ParseTreeUsage::add_kind_inventions(void) {
StarTemplates::transcribe_all(Task::syntax_tree());
}
@h The assertion-maker's invariant.
Hmm: "The Assertion-Maker's Invariant" might make a good magic-realism
novel, in which an enigmatic wise man of Samarkand builds an ingenious box

View file

@ -109,25 +109,16 @@ then have no legal type. We solve this as follows. Whenever a kind of value
$K$ is created which can be parsed as part of a command, an I7 variable "the
$K$ understood" is also created, as a $K$ that varies. All of these variables
are translated into Inter's |parsed_number|, so in effect they provide aliases
of each possible type for the same underlying memory location. The four
exceptional kinds of value not parsed by the systematic approaches in Inform
for enumerated KOVs and units are "number", "time", "snippet" and "truth
state": because of their exceptional status, they don't get "the $K$
understood" variables created automatically for them, so we must construct
those by hand. Hence "the number understood", "the time understood", "the
topic understood" (for historical reasons this one is not called "the snippet
understood"), "the truth state understood" but no others.
of each possible type for the same underlying memory location. The one exception
is for "the topic understood" (for historical reasons this one is not called
"the snippet understood", and so we make it by hand).
=
Section 4 - Used when understanding typed commands
The player's command -- documented at var_command -- is a snippet that varies.
The matched text is a snippet that varies.
The number understood -- documented at var_understood -- is a number that varies.
The real number understood -- documented at var_understood -- is a real number that varies.
The time understood is a time that varies.
The topic understood is a snippet that varies.
The truth state understood is a truth state that varies.
The current item from the multiple object list is an object that varies.
The player's command variable translates into Inter as "players_command".

View file

@ -259,7 +259,7 @@ action_name *PL::Actions::act_new(wording W, int implemented_by_I7) {
Vocabulary::set_flags(Lexer::word(Wordings::first_wn(W)), ACTION_PARTICIPLE_MC);
Kinds::Behaviour::new_enumerated_value(Task::syntax_tree(), K_action_name);
Kinds::Behaviour::new_enumerated_value(K_action_name);
LOGIF(ACTION_CREATIONS, "Created action: %W\n", W);

View file

@ -20,6 +20,7 @@ which use this module:
@e kind_constructor_casting_rule_CLASS
@e kind_constructor_instance_CLASS
@e unit_sequence_CLASS
@e star_invention_CLASS
=
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(dimensional_rule, 100)
@ -32,6 +33,7 @@ DECLARE_CLASS_ALLOCATED_IN_ARRAYS(kind_constructor_casting_rule, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(kind_constructor_comparison_schema, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(kind_constructor_instance, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(unit_sequence, 50)
DECLARE_CLASS(star_invention)
@ Like all modules, this one must define a |start| and |end| function:

View file

@ -433,13 +433,13 @@ The word range is the name ("texture", "musical instrument"), and |super|
is the super-kind ("value", "thing").
=
kind *Kinds::new_base(parse_node_tree *T, wording W, kind *super) {
kind *Kinds::new_base(wording W, kind *super) {
#ifdef PROTECTED_MODEL_PROCEDURE
PROTECTED_MODEL_PROCEDURE;
#endif
kind *K = Kinds::base_construction(
Kinds::Constructors::new(T, Kinds::get_construct(super), NULL, I"#NEW",
Kinds::Constructors::new(Kinds::get_construct(super), NULL, I"#NEW",
BASE_CONSTRUCTOR_GRP));
@<Use the source-text name to attach a noun to the constructor@>;

View file

@ -64,7 +64,7 @@ kind of kind, like "arithmetic value":
=
int Kinds::Behaviour::is_kind_of_kind(kind *K) {
if (K == NULL) return FALSE;
if (K->construct->group == KIND_OF_KIND_GRP) return TRUE;
if (K->construct->group == PROTOCOL_GRP) return TRUE;
return FALSE;
}
@ -160,23 +160,23 @@ if the kind was already a unit or was successfully converted into one,
|FALSE| if it's now too late.
=
int Kinds::Behaviour::convert_to_unit(parse_node_tree *T, kind *K) {
int Kinds::Behaviour::convert_to_unit(kind *K) {
if (K == NULL) return FALSE;
return Kinds::Constructors::convert_to_unit(T, K->construct);
return Kinds::Constructors::convert_to_unit(K->construct);
}
@ And similarly:
=
void Kinds::Behaviour::convert_to_enumeration(parse_node_tree *T, kind *K) {
if (K) Kinds::Constructors::convert_to_enumeration(T, K->construct);
void Kinds::Behaviour::convert_to_enumeration(kind *K) {
if (K) Kinds::Constructors::convert_to_enumeration(K->construct);
}
@ And similarly to switch from integer to real arithmetic.
=
void Kinds::Behaviour::convert_to_real(parse_node_tree *T, kind *K) {
if (K) Kinds::Constructors::convert_to_real(T, K->construct);
void Kinds::Behaviour::convert_to_real(kind *K) {
if (K) Kinds::Constructors::convert_to_real(K->construct);
}
@ The instances of an enumeration have the values $1, 2, 3, ..., N$ at
@ -184,9 +184,9 @@ run-time; the following returns $N+1$, that is, a value which can be held
by the next instance to be created.
=
int Kinds::Behaviour::new_enumerated_value(parse_node_tree *T, kind *K) {
int Kinds::Behaviour::new_enumerated_value(kind *K) {
if (K == NULL) return 0;
Kinds::Behaviour::convert_to_enumeration(T, K);
Kinds::Behaviour::convert_to_enumeration(K);
return K->construct->next_free_value++;
}
@ -222,7 +222,8 @@ kilopascals" might be a notation for a kind where constants are not named.
=
int Kinds::Behaviour::has_named_constant_values(kind *K) {
if (K == NULL) return FALSE;
if (K->construct->created_with_assertions) return TRUE;
if (Kinds::Behaviour::is_an_enumeration(K)) return TRUE;
if (Kinds::Behaviour::is_uncertainly_defined(K)) return TRUE;
return FALSE;
}
@ -394,7 +395,7 @@ sufficient to apply |~=| to the values.
=
text_stream *Kinds::Behaviour::get_distinguisher(kind *K) {
if (K == NULL) return NULL;
return K->construct->distinguisher;
return K->construct->distinguishing_routine;
}
#ifdef CORE_MODULE
@ -588,7 +589,7 @@ parsing names of objects, but not as a grammar token in its own right.
=
text_stream *Kinds::Behaviour::get_recognition_only_GPR(kind *K) {
if (K == NULL) return NULL;
return K->construct->recognition_only_GPR;
return K->construct->recognition_routine;
}
#ifdef CORE_MODULE

View file

@ -0,0 +1,247 @@
[NeptuneManual::] A Brief Guide to Neptune.
A manual for the mini-language used in Neptune files.
@h Purpose.
Neptune is a simple mini-language for defining the built-in kinds of Inform.
Each kit of Inter code can supply one or more Neptune files: for example,
|WorldModelKit| supplies a file called |Scenes.neptune| which defines the
built-in base kind "scene".
The name is nothing to do with the planet and derives from the Place Neptune,
Carcassonne, where these files were first implemented in August 2007. The
syntax was made more legible in 2020.
@h Comments and white space.
Lines consisting of white space or whose first non-white space character is
|!| are ignored as comments, but note that a |!| later in a line which already
has other content will not be treated as a comment.
All white space at the start or end of a line is similarly ignored. Indentation
can be used for clarity, but has no significance.
@h Declarations.
Otherwise, a Neptune file is a series of declarations. Each must begin with
a header line which ends in an open brace, and must conclude with a line
consisting only of a close brace.
@ A constructor is created with two initial keywords, and then its identifier
name. The first keyword must be either |new| or |builtin|. The only difference
here is that |builtin| must be used if the constructor being made is one of
the //Familiar Kinds//, whose identifier has to correspond to one of those
hardwired into the code of this module. |new| must be used in all other cases.[1]
The second keyword must be one of the following:
(*) |base| for a new base kind, like |NUMBER_TY|.
(*) |constructor| for a proper constructor, like |LIST_OF_TY|.
(*) |protocol| for a kind of kind, like |SAYABLE_VALUE_TY|.
(*) |punctuation| for a constructor with no independent meaning, such as |INTERMEDIATE_TY|.
For example:
= (text)
builtin protocol SAYABLE_VALUE_TY {
conforms-to: STORED_VALUE_TY
singular: sayable value
plural: sayable values
}
=
[1] The distinction really only exists as a mnemonic - it reminds us that it
wouldn't be safe to change the identifier without also changing the compiler.
@ A "macro" is a set of commands which could be applied to any constructor.
It will have no effect unless applied, which happens only by a special command
(see below) or, for certain macro names, when the code in this module applies
it automatically.
For example:
= (text)
macro #REAL {
conforms-to: REAL_ARITHMETIC_VALUE_TY
}
=
This declares a macro called |#REAL|. All macros have names beginning with a
sharp sign, and continuing with capital letters.
@ An "invention" is a piece of source text to be added to whatever is being
compiled.[1] Invention names begin with an asterisk. For example:
= (text)
invention *UNDERSTOOD-VARIABLE {
<kind> understood is a <kind> which varies.
}
=
Note that the text is not quite literal, because it can contain wildcards like
|<kind>|, which expands to the name of the kind in question: for instance, we
might get "number understood is a number which varies". The legal wildcards are:
(*) <kind>, expanding to the singular name of the kind.
(*) <lower-case-kind>, the same but always using lower case.
(*) <kind-weak-ID>, the weak ID number for the base kind.
(*) <printing-routine>, the identifier of its printing routine.
(*) <comparison-routine>, similarly.
There are a few limitations on what template text can include. Firstly,
nothing with angle brackets in, except where a wildcard appears. Secondly,
each sentence must end at the end of a line, and similarly the colon for
any rule or other definition. Thus this template would fail:
= (text)
invention *UNDERSTOOD-VARIABLE {
<kind> understood is a <kind> which
varies. To judge <kind>: say "I judge [<kind> understood]."
}
=
because the first sentence ends in the middle of the second line, and the
colon dividing the phrase header from its definition is also mid-line. The
template must be reformatted thus to work:
= (text)
invention *UNDERSTOOD-VARIABLE {
<kind> understood is a <kind> which varies.
To judge <kind>:
say "I judge [<kind> understood]."
}
=
[1] Inventions are not elegant and have now mostly been phased out, except to
create the "K understood" variables for each base kind conforming to
|understandable value|, using the example invention shown here.
@h Commands.
Inside a macro or a constructor declaration, each line consists of a single
command, always written in the form |command: value|. If the command occurs
in a constructor, it applies to that constructor; if in a macro, it is applied
to whatever constructor the macro is being applied to (if it ever is).
All commands are a single word, though sometimes hyphenated. White space
either side of the |value| is trimmed away. |value| is not allowed to be empty,
or to contain only white space.
@ Constructor declarations are conventionally written in four groups of commands,
though this is just convention. Let's start with the first block, which names
the constructor and locates it in the lattice.
|conforms-to: K| declares that the new kind conforms to the existing kind |K|.
Multiple conformances can be given, but there is seldom any need to, because if
|K| then conforms to |L|, our new kind will do so too. In general, new base
kinds should declare their conformance to the most specific protocol they can.
|compatible-with: K| declares that |K| is compatible with the new kind (note:
not the other way round), in a way needing explicit conversion code at run-time:
i.e., |K| does not conform to the new kind, but can be converted to it.
|singular| and |plural| specify singular and plural natural language names for
the constructor. If these are omitted, it will be impossible to refer to in
source text, but that doesn't necessarily make the constructor useless: the
compiler can still generate it internally. Multiple legal wordings can be
given, divided by vertical strokes. Names of the construction kinds can be
written as |k| and |l| (note lower case). So, for example, |list of k|.
|terms| is used only for proper constructors. For a unary constructor, it will
give one term; for binary, two terms, separated by a comma. Each term should
be |covariant| or |contravariant|, with an ootional keyword after it:
(*) |optional| means that it is legal to name the constructor without naming
this term. For example, "activity" is a legal way to say "activity on nothing".
(*) |list| means that it is legal to give a list of kinds here, in brackets
if there are some, or |nothing| if there are not.
|invent-source-text: *NAME| causes new source text to be invented. |*NAME|
must be an invention which has already been declared. If this command is applied
to a protocol, such as |arithmetic value|, then the invention will be made not
for the protocol itself, but for every base kind which conforms to it: this can
result in a stream of similar-looking sentences.
|apply-macro: #NAME| does what it says, really. Here, however, it applies to
protocols just the same as to everything else.
@ The second group concerns behaviours of the kinds in question, or methods
for compiling their data. They are in general meaningless for protocols or
other kinds which don't refer to data stored at run-time.
|default-value| is the default value for an uninitialised variable of this
kind. If this is not set, problem messages may be generated for such variables.
|can-coincide-with-property| is either |yes| or |no| (default |no|), and means
what it says: the name of this kind is allowed also to be the name of a property
which takes values in this kind.
|can-exchange| is either |yes| or |no| (default |no|), and means that data of
this kind can be serialised -- printed out as text into an external file --
and read into a different program, but with the same meaning.
|constant-compilation-method| tells Inform how to compile constants of this
kind. The possible options are: |none|, |literal|, |quantitative| and |special|,
the default being |none|:
(*) |none| means there are no constants of this kind.
(*) |literal| means constants are literals in Inform source text, such as 65 or 11:12 PM.
(*) |quantitative| means they are named instances, as for enumerations.
(*) |special| means that the compiler needs to use ad-hoc code to handle
this kind; unless it contains that code, of course, this can't be used.
|loop-domain-schema| is an Inter schema for iterating through the valid
instances of the kind.
|comparison-schema| is an Inter schema for comparing a value of this kind
with a value of a named other kind to which it does not conform. It should
take the form |NAME>>>SCHEMA|, where |NAME| is the other kind, and |SCHEMA|
the Inter code.
If the kind conforms to |POINTER_VALUE_TY| then it stores values on the heap,
rather than in single words of memory, and in that case three more properies
become meaningful: |multiple-block| is either |yes| or |no| (default |no|), and
allows data to expand arbitrarily in size if necessary; |heap-size-estimate|
should be a power of 2, and gives an initial allocation size in words; and
|small-block-size| optionally allows a small block (in words) to point to the
data (thus adding further indirection).
|is-incompletely-defined| is either |yes| or |no| (default |no|), and is a
short-term device used to handle kinds which have been created but not yet
turned into units or enumerations.
@ The third group supplies identifier names for Inter routines to perform run-time
duties related to the kind. Inform will simply assume such a routine is present;
this will usually be defined in the same kit which is supplying the Neptune file.
|comparison-routine| determines which of two values of the kind is greater.
The default is |UnsignedCompare|. The special value |signed| can be used to
ask for signed comparison of the 2s-complement run-time values, which is a
little quicker than calling a routine.
|printing-routine| prints out a textual representation of a value of the given
kind, and |printing-routine-for-debugging| the same but for purposes of the
debugging output called for by the ACTIONS command. These have no effect for
kinds which do not conform to |sayable value|.
|parsing-routine| is a "general parsing routine", which assists the run-time
command parser. |distinguishing-routine|, similarly, determines whether two
things can be distinguished by textual commands. These have no effect in Basic
Inform projects, or for kinds which do not conform to |understandable value|.
|recognition-routine| is a "recognition-only general parsing routine". Again
this has no effect in Basic Inform projects. It is only used for kinds which
do not conform to |understandable value|, but can nevertheless be used when
the command parser allows things to be named by their property values, and
those values have the kind in question.
@ The final group is concerned only with documentation and indexing, and thus
has no effect on compilation.
|documentation-reference| is a reference keyword to the Inform documentation,
which can make be used to improve problem messages or the index by giving little
blue help buttons next to the kind's name.
|index-priority| is a non-negative integer. It is by default 100 for base kinds
and constructors, 0 for protocols and punctuation. 0 in fact means "omit from the
index", which is otherwise grouped in ascending order -- i.e., lowest priority
numbers first.
|index-default-value| can be used in place of the |default-value| in the index,
to make it look prettier.
|index-maximum-value| can similarly override the indexer's automated attempt to
print the largest representable value, and similarly for |index-minimum-value|.
|indexed-grey-if-empty| is either |yes| or |no| (default |no|), and specifies
that if the kind has no instances then it should be tinted grey in the index.
|specification-text| provides the value of the specification pseudo-property
(an oddball feature of the Inform language which seemed like a good idea at
the time). This should be plain text, not HTML.

View file

@ -3,8 +3,7 @@
To apply a given command to a given kind constructor.
@ =
void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
kind_constructor *con) {
void KindCommands::apply(single_kind_command stc, kind_constructor *con) {
if (stc.completed) return;
LOGIF(KIND_CREATIONS, "apply: %s (%d/%d/%S/%S) to %d/%S\n",
stc.which_kind_command->text_of_command,
@ -29,10 +28,10 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
@<Apply kind macros or transcribe kind templates on request@> =
switch (tcc) {
case invent_source_text_KCC:
StarTemplates::transcribe(T, stc.template_argument, con, stc.origin);
StarTemplates::note(stc.template_argument, con, stc.origin);
return;
case apply_macro_KCC:
NeptuneMacros::play_back(T, stc.macro_argument, con, stc.origin);
NeptuneMacros::play_back(stc.macro_argument, con, stc.origin);
return;
}
@ -50,7 +49,6 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
SET_BOOLEAN_FIELD(indexed_grey_if_empty)
SET_BOOLEAN_FIELD(is_incompletely_defined)
SET_BOOLEAN_FIELD(multiple_block)
SET_BOOLEAN_FIELD(created_with_assertions)
SET_INTEGER_FIELD(heap_size_estimate)
SET_INTEGER_FIELD(index_priority)
@ -59,19 +57,19 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
SET_CCM_FIELD(constant_compilation_method)
SET_TEXTUAL_FIELD(default_value)
SET_TEXTUAL_FIELD(distinguisher)
SET_TEXTUAL_FIELD(distinguishing_routine)
SET_TEXTUAL_FIELD(documentation_reference)
SET_TEXTUAL_FIELD(explicit_GPR_identifier)
SET_TEXTUAL_FIELD(index_default_value)
SET_TEXTUAL_FIELD(index_maximum_value)
SET_TEXTUAL_FIELD(index_minimum_value)
SET_TEXTUAL_FIELD(loop_domain_schema)
SET_TEXTUAL_FIELD(recognition_only_GPR)
SET_TEXTUAL_FIELD(recognition_routine)
SET_TEXTUAL_FIELD(specification_text)
}
@<A few kind commands contribute to linked lists in the constructor structure@> =
if (tcc == cast_KCC) {
if (tcc == compatible_with_KCC) {
#ifdef CORE_MODULE
if ((Str::eq(stc.constructor_argument, I"SNIPPET_TY")) &&
(Plugins::Manage::plugged_in(parsing_plugin) == FALSE)) return;
@ -106,9 +104,6 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
case terms_KCC:
@<Parse the constructor arity text@>;
return;
case description_KCC:
con->constructor_description = Str::duplicate(stc.textual_argument);
return;
case comparison_routine_KCC:
if (Str::len(stc.textual_argument) > 31)
NeptuneFiles::error(stc.textual_argument, I"overlong identifier", stc.origin);
@ -119,7 +114,7 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
NeptuneFiles::error(stc.textual_argument, I"overlong identifier", stc.origin);
else con->print_identifier = Str::duplicate(stc.textual_argument);
return;
case printing_routine_actions_KCC:
case printing_routine_for_debugging_KCC:
if (Str::len(stc.textual_argument) > 31)
NeptuneFiles::error(stc.textual_argument, I"overlong identifier", stc.origin);
else con->ACTIONS_identifier = Str::duplicate(stc.textual_argument);
@ -130,8 +125,7 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
if (length == 1) {
Kinds::mark_vocabulary_as_kind(array[0], Kinds::base_construction(con));
} else {
int i;
for (i=0; i<length; i++) {
for (int i=0; i<length; i++) {
Vocabulary::set_flags(array[i], KIND_SLOW_MC);
NTI::mark_vocabulary(array[i], <k-kind>);
}
@ -165,10 +159,6 @@ void KindCommands::apply(parse_node_tree *T, single_kind_command stc,
}
return;
}
case modifying_adjective_KCC:
NeptuneFiles::error(NULL,
I"the modifying-adjective syntax has been withdrawn", stc.origin);
return;
}
@<Parse the constructor arity text@> =

View file

@ -6,7 +6,7 @@ kinds.
@ Constructors are divided into four groups:
@d PUNCTUATION_GRP 1 /* used in the construction of other kinds only */
@d KIND_OF_KIND_GRP 2 /* such as |arithmetic value| */
@d PROTOCOL_GRP 2 /* such as |arithmetic value| */
@d BASE_CONSTRUCTOR_GRP 3 /* such as |number| */
@d PROPER_CONSTRUCTOR_GRP 4 /* with positive arity, such as "list of ..." */
@ -43,7 +43,6 @@ typedef struct kind_constructor {
/* D: how constant values of this kind are expressed */
struct literal_pattern *ways_to_write_literals; /* list of ways to write this */
int created_with_assertions; /* such as "Train Arrival is a scene." */
struct table *named_values_created_with_table; /* alternatively... */
int next_free_value; /* to make distinguishable instances of this kind */
int constant_compilation_method; /* one of the |*_CCM| values */
@ -76,7 +75,7 @@ typedef struct kind_constructor {
int multiple_block; /* TRUE for flexible-size values stored on the heap */
int heap_size_estimate; /* typical number of bytes used */
int can_exchange; /* with external files and therefore other story files */
struct text_stream *distinguisher; /* Inter routine to see if values distinguishable */
struct text_stream *distinguishing_routine; /* Inter routine to see if values distinguishable */
struct kind_constructor_comparison_schema *first_comparison_schema; /* list of these */
struct text_stream *loop_domain_schema; /* how to compile a loop over the instances */
@ -97,11 +96,10 @@ typedef struct kind_constructor {
struct grammar_verb *understand_as_values; /* used when parsing such values */
int needs_GPR; /* a GPR is actually required to be compiled */
struct text_stream *explicit_GPR_identifier; /* routine name, when not compiled automatically */
struct text_stream *recognition_only_GPR; /* for recognising an explicit value as preposition */
struct text_stream *recognition_routine; /* for recognising an explicit value as preposition */
/* K: indexing and documentation */
struct text_stream *specification_text; /* text for parse_node */
struct text_stream *constructor_description; /* text used in index pages */
struct text_stream *specification_text; /* text for pseudo-property */
struct text_stream *index_default_value; /* and its description in the Kinds index */
struct text_stream *index_maximum_value; /* ditto */
struct text_stream *index_minimum_value; /* ditto */
@ -184,7 +182,7 @@ but will be the constructor for "door" for kinds like this one:
>> Portal is a kind of door.
=
kind_constructor *Kinds::Constructors::new(parse_node_tree *T, kind_constructor *super,
kind_constructor *Kinds::Constructors::new(kind_constructor *super,
text_stream *source_name, text_stream *initialisation_macro, int group) {
kind_constructor *con = CREATE(kind_constructor);
kind_constructor **pC = FamiliarKinds::known_con(source_name);
@ -242,7 +240,6 @@ we apply any defaults set in Neptune files.
/* D: how constant values of this kind are expressed */
con->ways_to_write_literals = NULL;
con->created_with_assertions = FALSE;
con->named_values_created_with_table = NULL;
con->next_free_value = 1;
con->constant_compilation_method = NONE_CCM;
@ -280,7 +277,7 @@ we apply any defaults set in Neptune files.
con->heap_size_estimate = 0;
con->can_exchange = FALSE;
con->first_comparison_schema = NULL;
con->distinguisher = NULL;
con->distinguishing_routine = NULL;
con->loop_domain_schema = NULL;
/* J: printing and parsing values at run-time */
@ -306,16 +303,15 @@ we apply any defaults set in Neptune files.
con->understand_as_values = NULL;
con->needs_GPR = FALSE;
con->explicit_GPR_identifier = NULL;
con->recognition_only_GPR = NULL;
con->recognition_routine = NULL;
/* K: indexing and documentation */
con->specification_text = NULL;
con->constructor_description = NULL;
con->index_default_value = I"--";
con->index_maximum_value = I"--";
con->index_minimum_value = I"--";
con->index_priority = LOWEST_INDEX_PRIORITY;
if ((group == PUNCTUATION_GRP) || (group == KIND_OF_KIND_GRP))
if ((group == PUNCTUATION_GRP) || (group == PROTOCOL_GRP))
con->index_priority = 0;
con->linguistic = FALSE;
con->indexed_grey_if_empty = FALSE;
@ -324,15 +320,14 @@ we apply any defaults set in Neptune files.
kind_macro_definition *set_defaults = NULL;
switch (group) {
case PUNCTUATION_GRP: set_defaults = NeptuneMacros::parse_name(I"#PUNCTUATION"); break;
case KIND_OF_KIND_GRP:set_defaults = NeptuneMacros::parse_name(I"#PROTOCOL"); break;
case PROTOCOL_GRP:set_defaults = NeptuneMacros::parse_name(I"#PROTOCOL"); break;
case BASE_CONSTRUCTOR_GRP: set_defaults = NeptuneMacros::parse_name(I"#BASE"); break;
case PROPER_CONSTRUCTOR_GRP: set_defaults = NeptuneMacros::parse_name(I"#CONSTRUCTOR"); break;
}
if (set_defaults) NeptuneMacros::play_back(T, set_defaults, con, NULL);
if (set_defaults) NeptuneMacros::play_back(set_defaults, con, NULL);
if (Str::len(initialisation_macro) > 0)
NeptuneMacros::play_back(T,
NeptuneMacros::parse_name(initialisation_macro), con, NULL);
NeptuneMacros::play_back(NeptuneMacros::parse_name(initialisation_macro), con, NULL);
@ However, if we create our constructor as a subkind, like so:
@ -473,23 +468,20 @@ Conversions of an existing constructor to make it a unit or enumeration also
require running macros in the kind interpreter:
=
int Kinds::Constructors::convert_to_unit(parse_node_tree *T, kind_constructor *con) {
int Kinds::Constructors::convert_to_unit(kind_constructor *con) {
if (con->is_incompletely_defined == TRUE) {
NeptuneMacros::play_back(T,
NeptuneMacros::parse_name(I"#UNIT"), con, NULL);
NeptuneMacros::play_back(NeptuneMacros::parse_name(I"#UNIT"), con, NULL);
return TRUE;
}
if (Kinds::Constructors::is_arithmetic(con)) return TRUE; /* i.e., if it succeeded */
return FALSE;
}
int Kinds::Constructors::convert_to_enumeration(parse_node_tree *T, kind_constructor *con) {
int Kinds::Constructors::convert_to_enumeration(kind_constructor *con) {
if (con->is_incompletely_defined == TRUE) {
NeptuneMacros::play_back(T,
NeptuneMacros::parse_name(I"#ENUMERATION"), con, NULL);
NeptuneMacros::play_back(NeptuneMacros::parse_name(I"#ENUMERATION"), con, NULL);
if (con->linguistic)
NeptuneMacros::play_back(T,
NeptuneMacros::parse_name(I"#LINGUISTIC"), con, NULL);
NeptuneMacros::play_back(NeptuneMacros::parse_name(I"#LINGUISTIC"), con, NULL);
return TRUE;
}
if (Kinds::Constructors::is_enumeration(con)) return TRUE; /* i.e., if it succeeded */
@ -499,9 +491,8 @@ int Kinds::Constructors::convert_to_enumeration(parse_node_tree *T, kind_constru
@ And similarly:
=
void Kinds::Constructors::convert_to_real(parse_node_tree *T, kind_constructor *con) {
NeptuneMacros::play_back(T,
NeptuneMacros::parse_name(I"#REAL"), con, NULL);
void Kinds::Constructors::convert_to_real(kind_constructor *con) {
NeptuneMacros::play_back(NeptuneMacros::parse_name(I"#REAL"), con, NULL);
}
@ A few base kinds are marked as "linguistic", which simply enables us to fence
@ -586,7 +577,7 @@ int Kinds::Constructors::is_enumeration(kind_constructor *con) {
}
@h Cast and instance lists.
Each constructor has a list of other constructors (all of the |KIND_OF_KIND_GRP|
Each constructor has a list of other constructors (all of the |PROTOCOL_GRP|
group) which it's an instance of: value, word value, arithmetic value, and so on.
=

View file

@ -62,14 +62,14 @@ void NeptuneMacros::end(text_file_position *tfp) {
commands in sequence to the relevant kind.
=
void NeptuneMacros::play_back(parse_node_tree *T, kind_macro_definition *macro,
void NeptuneMacros::play_back(kind_macro_definition *macro,
kind_constructor *con, text_file_position *tfp) {
if (macro == NULL) NeptuneFiles::error(NULL, I"no such kind macro to play back", tfp);
LOGIF(KIND_CREATIONS, "Macro %S on %S (%d lines)\n",
macro->kind_macro_name, con->name_in_template_code, macro->kind_macro_line_count);
LOG_INDENT;
for (int i=0; i<macro->kind_macro_line_count; i++)
KindCommands::apply(T, macro->kind_macro_line[i], con);
KindCommands::apply(macro->kind_macro_line[i], con);
LOG_OUTDENT;
LOGIF(KIND_CREATIONS, "Macro %S ended\n", macro->kind_macro_name);
}

View file

@ -9,30 +9,28 @@ on those commands. The name derives from the Place Neptune, Carcassonne,
where these files were first conceived and implemented.
=
void NeptuneFiles::load(parse_node_tree *T, filename *F) {
void NeptuneFiles::load(filename *F) {
parse_node *cs = current_sentence;
current_sentence = NULL;
TextFiles::read(F, FALSE, "unable to read kinds file", TRUE,
&NeptuneFiles::load_kinds_helper, NULL, T);
&NeptuneFiles::load_kinds_helper, NULL, NULL);
current_sentence = cs;
}
void NeptuneFiles::load_kinds_helper(text_stream *text, text_file_position *tfp, void *state) {
parse_node_tree *T = (parse_node_tree *) state;
NeptuneFiles::read_command(T, text, tfp);
NeptuneFiles::read_command(text, tfp);
}
void NeptuneFiles::read_command(parse_node_tree *T, text_stream *command,
text_file_position *tfp) {
void NeptuneFiles::read_command(text_stream *command, text_file_position *tfp) {
Str::trim_white_space(command);
if ((Str::get_first_char(command) == '!') ||
(Str::get_first_char(command) == 0)) return; /* skip blanks and comments */
single_kind_command stc = NeptuneSyntax::parse_command(T, command, tfp);
single_kind_command stc = NeptuneSyntax::parse_command(command, tfp);
if (stc.completed) return;
if (NeptuneMacros::recording()) NeptuneMacros::record_into_macro(stc, tfp);
else if (stc.defined_for) KindCommands::apply(T, stc, stc.defined_for);
else if (stc.defined_for) KindCommands::apply(stc, stc.defined_for);
else NeptuneFiles::error(command, I"kind command describes unspecified kind", tfp);
}

View file

@ -2,34 +2,6 @@
To parse individual commands from Neptune files.
@h Specification of the Neptune language.
Everyone loves a mini-language, so here is one. At the top level:
(a) Lines consisting of white space or whose first non-white space character is
|!| are ignored as comments.
(b) A line ending with a colon |:| opens a new block. The text before the colon
is the title of the block, except that the first character indicates its type:
(-1) An asterisk means that the block is a "star template": for instance,
|*PRINTING-ROUTINE:| says the block defines a template called |PRINTING-ROUTINE|.
A template consists of Inform 7 source text which extends as far as the next
|*END| line.
(-2) A sharp sign |#| means that the block is a macro definition. For
instance, |#UNIT:| says the block defines a template called |UNIT|. A macro
is just a sequence of lines holding kind commands which continues to
the beginning of the next block, or the end of the file.
(-3) And otherwise the block is a kind definition, but the optional opening
character |+| marks the kind as one which Inform requires the existence of.
Thus |+NUMBER_TY:|, since Inform will crash if the template doesn't set this
kind up, but |BOOJUMS_TY:| would validly declare a new kind called
|BOOJUMS_TY| which isn't special to any of Inform's internals. The |+| signs
are there as a help for hackers looking at the I6 template and wondering what
they can safely monkey with.
(c) That just leaves the lines within blocks. Each of these is a usage of one
of the commands, given in the form |operation: operand|, i.e., divided by a
colon and some optional spacing.
@h The command set.
Each different operation is defined with a block like so:
@ -58,17 +30,16 @@ typedef struct kind_command_definition {
@e invent_source_text_KCC
@e can_coincide_with_property_KCC
@e can_exchange_KCC
@e cast_KCC
@e compatible_with_KCC
@e comparison_routine_KCC
@e comparison_schema_KCC
@e constant_compilation_method_KCC
@e default_value_KCC
@e description_KCC
@e distinguisher_KCC
@e distinguishing_routine_KCC
@e documentation_reference_KCC
@e explicit_GPR_identifier_KCC
@e heap_size_estimate_KCC
@e printing_routine_actions_KCC
@e printing_routine_for_debugging_KCC
@e printing_routine_KCC
@e index_default_value_KCC
@e index_maximum_value_KCC
@ -77,63 +48,55 @@ typedef struct kind_command_definition {
@e index_priority_KCC
@e conforms_to_KCC
@e is_incompletely_defined_KCC
@e is_template_variable_KCC
@e loop_domain_schema_KCC
@e modifying_adjective_KCC
@e multiple_block_KCC
@e created_with_assertions_KCC
@e plural_KCC
@e recognition_only_GPR_KCC
@e recognition_routine_KCC
@e singular_KCC
@e specification_text_KCC
@e small_block_size_KCC
@e template_variable_number_KCC
@e terms_KCC
=
kind_command_definition table_of_kind_commands[] = {
{ "can-coincide-with-property", can_coincide_with_property_KCC, BOOLEAN_KCA },
{ "can-exchange", can_exchange_KCC, BOOLEAN_KCA },
{ "indexed-grey-if-empty", indexed_grey_if_empty_KCC, BOOLEAN_KCA },
{ "is-incompletely-defined", is_incompletely_defined_KCC, BOOLEAN_KCA },
{ "is-template-variable", is_template_variable_KCC, BOOLEAN_KCA },
{ "multiple-block", multiple_block_KCC, BOOLEAN_KCA },
{ "created-with-assertions", created_with_assertions_KCC, BOOLEAN_KCA },
{ "can-coincide-with-property", can_coincide_with_property_KCC, BOOLEAN_KCA },
{ "can-exchange", can_exchange_KCC, BOOLEAN_KCA },
{ "indexed-grey-if-empty", indexed_grey_if_empty_KCC, BOOLEAN_KCA },
{ "is-incompletely-defined", is_incompletely_defined_KCC, BOOLEAN_KCA },
{ "multiple-block", multiple_block_KCC, BOOLEAN_KCA },
{ "constant-compilation-method", constant_compilation_method_KCC, CCM_KCA },
{ "constant-compilation-method", constant_compilation_method_KCC, CCM_KCA },
{ "comparison-routine", comparison_routine_KCC, TEXT_KCA },
{ "default-value", default_value_KCC, TEXT_KCA },
{ "description", description_KCC, TEXT_KCA },
{ "distinguisher", distinguisher_KCC, TEXT_KCA },
{ "documentation-reference", documentation_reference_KCC, TEXT_KCA },
{ "parsing-routine", explicit_GPR_identifier_KCC, TEXT_KCA },
{ "printing-routine", printing_routine_KCC, TEXT_KCA },
{ "printing-routine-actions", printing_routine_actions_KCC, TEXT_KCA },
{ "index-default-value", index_default_value_KCC, TEXT_KCA },
{ "index-maximum-value", index_maximum_value_KCC, TEXT_KCA },
{ "index-minimum-value", index_minimum_value_KCC, TEXT_KCA },
{ "loop-domain-schema", loop_domain_schema_KCC, TEXT_KCA },
{ "recognition-only-GPR", recognition_only_GPR_KCC, TEXT_KCA },
{ "specification-text", specification_text_KCC, TEXT_KCA },
{ "comparison-routine", comparison_routine_KCC, TEXT_KCA },
{ "default-value", default_value_KCC, TEXT_KCA },
{ "distinguishing-routine", distinguishing_routine_KCC, TEXT_KCA },
{ "documentation-reference", documentation_reference_KCC, TEXT_KCA },
{ "parsing-routine", explicit_GPR_identifier_KCC, TEXT_KCA },
{ "printing-routine", printing_routine_KCC, TEXT_KCA },
{ "printing-routine-for-debugging", printing_routine_for_debugging_KCC, TEXT_KCA },
{ "index-default-value", index_default_value_KCC, TEXT_KCA },
{ "index-maximum-value", index_maximum_value_KCC, TEXT_KCA },
{ "index-minimum-value", index_minimum_value_KCC, TEXT_KCA },
{ "loop-domain-schema", loop_domain_schema_KCC, TEXT_KCA },
{ "recognition-routine", recognition_routine_KCC, TEXT_KCA },
{ "specification-text", specification_text_KCC, TEXT_KCA },
{ "cast", cast_KCC, CONSTRUCTOR_KCA },
{ "comparison-schema", comparison_schema_KCC, CONSTRUCTOR_KCA },
{ "conforms-to", conforms_to_KCC, CONSTRUCTOR_KCA },
{ "comparison-schema", comparison_schema_KCC, CONSTRUCTOR_KCA },
{ "compatible-with", compatible_with_KCC, CONSTRUCTOR_KCA },
{ "conforms-to", conforms_to_KCC, CONSTRUCTOR_KCA },
{ "modifying-adjective", modifying_adjective_KCC, VOCABULARY_KCA },
{ "plural", plural_KCC, VOCABULARY_KCA },
{ "singular", singular_KCC, VOCABULARY_KCA },
{ "plural", plural_KCC, VOCABULARY_KCA },
{ "singular", singular_KCC, VOCABULARY_KCA },
{ "terms", terms_KCC, TEXT_KCA },
{ "heap-size-estimate", heap_size_estimate_KCC, NUMERIC_KCA },
{ "index-priority", index_priority_KCC, NUMERIC_KCA },
{ "small-block-size", small_block_size_KCC, NUMERIC_KCA },
{ "template-variable-number", template_variable_number_KCC, NUMERIC_KCA },
{ "terms", terms_KCC, TEXT_KCA },
{ "heap-size-estimate", heap_size_estimate_KCC, NUMERIC_KCA },
{ "index-priority", index_priority_KCC, NUMERIC_KCA },
{ "small-block-size", small_block_size_KCC, NUMERIC_KCA },
{ "invent-source-text", invent_source_text_KCC, TEMPLATE_KCA },
{ "invent-source-text", invent_source_text_KCC, TEMPLATE_KCA },
{ "apply-macro", apply_macro_KCC, MACRO_KCA },
{ "apply-macro", apply_macro_KCC, MACRO_KCA },
{ NULL, -1, NO_KCA }
};
@ -162,8 +125,8 @@ Each command is read in as text, parsed and stored into a modest structure.
=
kind_constructor *constructor_described = NULL;
single_kind_command NeptuneSyntax::parse_command(parse_node_tree *T,
text_stream *whole_command, text_file_position *tfp) {
single_kind_command NeptuneSyntax::parse_command(text_stream *whole_command,
text_file_position *tfp) {
single_kind_command stc;
@<Initialise the STC to a blank command@>;
@ -196,7 +159,7 @@ single_kind_command NeptuneSyntax::parse_command(parse_node_tree *T,
else {
int group = -1;
if (Str::eq(mr.exp[1], I"punctuation")) group = PUNCTUATION_GRP;
else if (Str::eq(mr.exp[1], I"protocol")) group = KIND_OF_KIND_GRP;
else if (Str::eq(mr.exp[1], I"protocol")) group = PROTOCOL_GRP;
else if (Str::eq(mr.exp[1], I"base")) group = BASE_CONSTRUCTOR_GRP;
else if (Str::eq(mr.exp[1], I"constructor")) group = PROPER_CONSTRUCTOR_GRP;
if (group < 0)
@ -261,7 +224,7 @@ single_kind_command NeptuneSyntax::parse_command(parse_node_tree *T,
if ((do_know == TRUE) && (should_know == FALSE))
NeptuneFiles::error(whole_command, I"kind command describes already-known kind", tfp);
constructor_described =
Kinds::Constructors::new(T, Kinds::get_construct(K_value), name, NULL, group);
Kinds::Constructors::new(Kinds::get_construct(K_value), name, NULL, group);
#ifdef NEW_BASE_KINDS_CALLBACK
if ((constructor_described != CON_KIND_VARIABLE) &&
(constructor_described != CON_INTERMEDIATE)) {

View file

@ -2,42 +2,7 @@
Allowing Neptune files to generate additional source text.
@ These are passages of I7 source text which can be inserted into the main
source text at the request of any kind. An example would be:
= (text)
*UNDERSTOOD-VARIABLE:
<kind> understood is a <kind> which varies.
*END
=
The template |*UNDERSTOOD-VARIABLE| contains only a single sentence of source
text, and the idea is to make a new global variable associated with a given
kind. Note that the text is not quite literal, because it can contain
wildcards like |<kind>|, which expands to the name of the kind of value in
question: for instance, we might get
>> number understood is a number which varies.
There are a few limitations on what template text can include. Firstly,
nothing with angle brackets in, except where a wildcard appears. Secondly,
each sentence must end at the end of a line, and similarly the colon for
any rule or other definition. Thus this template would fail:
= (text)
*UNDERSTOOD-VARIABLE:
<kind> understood is a <kind> which
varies. To judge <kind>: say "I judge [<kind> understood]."
*END
=
because the first sentence ends in the middle of the second line, and the
colon dividing the phrase header from its definition is also mid-line. The
template must be reformatted thus to work:
= (text)
*UNDERSTOOD-VARIABLE:
<kind> understood is a <kind> which varies.
To judge <kind>:
say "I judge [<kind> understood]."
*END
=
@ So, to begin:
@ Each "recorded" invention, a.k.a., "star template", generates one of the following:
=
typedef struct kind_template_definition {
@ -93,7 +58,49 @@ void StarTemplates::end(text_stream *command, text_file_position *tfp) {
}
@ So much for recording a template. To "play back", we need to take its text
and squeeze it into the main source text.
and squeeze it into the main source text. This happens in two stages: first,
we simply record the user's intention:
=
typedef struct star_invention {
struct kind_template_definition *template;
struct kind_constructor *apropos;
struct text_file_position *origin;
CLASS_DEFINITION
} star_invention;
void StarTemplates::note(kind_template_definition *ttd, kind_constructor *con,
text_file_position *tfp) {
star_invention *I = CREATE(star_invention);
I->template = ttd;
I->apropos = con;
I->origin = tfp;
}
@ Later on, we act on these intentions. Note that a template applied to a
protocol is applied to all of the base kinds conforming to that protocol.
(Inform's standard installation uses this to construct variables of the
"K understood" variety for each understandable kind K.)
=
void StarTemplates::transcribe_all(parse_node_tree *T) {
star_invention *I;
LOOP_OVER(I, star_invention) {
if (I->apropos->group == PROTOCOL_GRP) {
kind *K;
LOOP_OVER_BASE_KINDS(K)
if ((Kinds::Behaviour::definite(K)) &&
(Kinds::eq(K, K_nil) == FALSE) &&
(Kinds::eq(K, K_void) == FALSE) &&
(Kinds::conforms_to(K, Kinds::base_construction(I->apropos))))
StarTemplates::transcribe(T, I->template, K->construct, I->origin);
} else {
StarTemplates::transcribe(T, I->template, I->apropos, I->origin);
}
}
}
@ So this applies a single template to a definitely known kind constructor.
=
void StarTemplates::transcribe(parse_node_tree *T,

View file

@ -24,9 +24,10 @@ Chapter 3: Arithmetic
Scaled Arithmetic Values
Chapter 4: Constructors
A Brief Guide to Neptune
Neptune Files
Macros
Neptune Syntax
Macros
Star Templates
Kind Commands
Kind Constructors

View file

@ -262,7 +262,8 @@ which determines whether $K$ is definite.
the process of reading in "Neptune files".[3] New constructors can only
be made the latter way. See //NeptuneFiles::load//, which sends individual commands
to //NeptuneFiles::read_command//, which in turn deals with the low-level code in
the //Kind Constructors// section.[4]
the //Kind Constructors// section.[4] See //A Brief Guide to Neptune// for a
manual to the syntax.
(*) It is possible to move kinds within the lattice of kinds, i.e., to change
their hierarchical relationship, even after creation. See //Kinds::make_subkind//.

View file

@ -145,18 +145,18 @@ typedef struct kind_relationship {
==> { fail }
@<Create new unit@> =
kind *K = Kinds::new_base(syntax_tree, GET_RW(<declaration-line>, 1), K_value);
Kinds::Behaviour::convert_to_unit(syntax_tree, K);
kind *K = Kinds::new_base(GET_RW(<declaration-line>, 1), K_value);
Kinds::Behaviour::convert_to_unit(K);
PRINT("'%<W': ok\n", W);
@<Create new enum@> =
kind *K = Kinds::new_base(syntax_tree, GET_RW(<declaration-line>, 1), K_value);
Kinds::Behaviour::convert_to_enumeration(syntax_tree, K);
kind *K = Kinds::new_base(GET_RW(<declaration-line>, 1), K_value);
Kinds::Behaviour::convert_to_enumeration(K);
PRINT("'%<W': ok\n", W);
@<Create new base@> =
kind *X = RP[1];
kind *K = Kinds::new_base(syntax_tree, GET_RW(<declaration-line>, 1), X);
kind *K = Kinds::new_base(GET_RW(<declaration-line>, 1), X);
kind_relationship *KR = CREATE(kind_relationship);
KR->sub = K;
KR->super = X;

View file

@ -51,7 +51,7 @@ void Main::respond(int id, int val, text_stream *arg, void *state) {
DL = STDOUT;
Streams::enable_debugging(DL);
switch (id) {
case LOAD_CLSW: NeptuneFiles::load(NULL, Filenames::from_text(arg)); break;
case LOAD_CLSW: NeptuneFiles::load(Filenames::from_text(arg)); break;
case INTERPRET_CLSW: Declarations::load_from_file(arg); break;
}
DL = save_DL;

View file

@ -5,11 +5,11 @@ Size of lexicon: 3098 excerpt meanings
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
Number of attempts to retrieve: 104735
of which unsuccessful: 87234
Number of attempts to retrieve: 104739
of which unsuccessful: 87238
of which successful: 17501
Total attempts to match against excerpt meanings: 249460
of which, total with incorrect hash codes: 227471
Total attempts to match against excerpt meanings: 249459
of which, total with incorrect hash codes: 227470
of which, total with correct hash codes: 21989
of which, total which matched: 19267

View file

@ -866,11 +866,7 @@ noun: proper: 'supporter in question'
noun: proper: 'particular possession'
noun: proper: 'player's command'
noun: proper: 'matched text'
noun: proper: 'number understood'
noun: proper: 'real number understood'
noun: proper: 'time understood'
noun: proper: 'topic understood'
noun: proper: 'truth state understood'
noun: proper: 'current item from the multiple object list'
noun: proper: 'command prompt'
noun: proper: 'left hand status line'
@ -2480,7 +2476,11 @@ noun: proper: 'report recalling conversations rulebook'
noun: proper: 'last thing named'
noun: proper: 'last person named'
noun: proper: 'group size'
noun: proper: 'number understood'
noun: proper: 'real number understood'
noun: proper: 'truth state understood'
noun: proper: 'external file understood'
noun: proper: 'time understood'
noun: proper: 'scene understood'
noun: proper: 'figure name understood'
noun: proper: 'sound name understood'