1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

merging latest master

This commit is contained in:
Zed Lopez 2023-07-04 15:05:49 -07:00
commit a33f2a84d7
105 changed files with 3382 additions and 2572 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W69 'Krypton' (2 July 2023)
[Version](notes/versioning.md): 10.2.0-beta+6W71 'Krypton' (4 July 2023)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 2 July 2023
Build Number: 6W69
Build Date: 4 July 2023
Build Number: 6W71

View file

@ -51,33 +51,11 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture16Kit</a></li><li><b>Startup Template</b></li></ul></div>
<p class="purpose">How programs for this architecture start up the virtual machine.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b><span class="extract"><span class="extract-syntax">VM_PreInitialise()</span></span> is called; then the "starting the virtual machine"
activity runs; and then <span class="extract"><span class="extract-syntax">VM_Initialise()</span></span> is called.
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b><span class="extract"><span class="extract-syntax">VM_Check_Functionality()</span></span> doesn't need to do anything in Z-Code.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_PreInitialise</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Initialise</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">standard_interpreter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_TERPSTANDARD</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;(</span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;0 + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> + </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;0 + </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_end</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> + ((</span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> - </span><span class="constant-syntax">2</span><span class="plain-syntax">)--&gt;0) * </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer2</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer3</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax">-&gt;0 = </span><span class="constant-syntax">15</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse2</span><span class="plain-syntax">-&gt;0 = </span><span class="constant-syntax">15</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">BasicInformKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">FIX_RNG_CFGF</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="constant-syntax">10000</span><span class="plain-syntax"> -&gt; </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="identifier-syntax">i</span><span class="plain-syntax">-2000;</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> -&gt; </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Check_Functionality</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -49,7 +49,7 @@
<!--Weave of 'Capabilities Template' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>Capabilities Template</b></li></ul></div>
<p class="purpose">Miscellaneous capabilities of the 16-bit architecture.</p>
<p class="purpose">Miscellaneous capabilities of the 32-bit architecture.</p>
<ul class="toc"><li><a href="S-cpb.html#SP1">&#167;1. Summary</a></li><li><a href="S-cpb.html#SP2">&#167;2. Header layout</a></li><li><a href="S-cpb.html#SP3">&#167;3. Release Number</a></li><li><a href="S-cpb.html#SP4">&#167;4. Random Number Generator</a></li><li><a href="S-cpb.html#SP5">&#167;5. Memory Allocation</a></li><li><a href="S-cpb.html#SP6">&#167;6. Memcpy</a></li><li><a href="S-cpb.html#SP8">&#167;8. Audiovisual Resources</a></li><li><a href="S-cpb.html#SP9">&#167;9. Typography</a></li></ul><hr class="tocbar">

View file

@ -51,7 +51,7 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>Glk Template</b></li></ul></div>
<p class="purpose">Glk is a fully-featured input-output model, designed by Andrew Plotkin for use with the Glulx virtual machine, but not used only for that. All 32-bit Inform programs use Glk.</p>
<ul class="toc"><li><a href="S-glk.html#SP1">&#167;1. Stubs</a></li><li><a href="S-glk.html#SP2">&#167;2. Definitions</a></li><li><a href="S-glk.html#SP3">&#167;3. Debugging verb</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="S-glk.html#SP1">&#167;1. Stubs</a></li><li><a href="S-glk.html#SP2">&#167;2. Definitions</a></li><li><a href="S-glk.html#SP4">&#167;4. Debugging verb</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Stubs. </b>These are I6 library-style entry point routines, not used by I7, but retained
in case I7 extensions want to do interesting things with Glulx.
@ -931,7 +931,83 @@ put together by John Cater.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ret</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Debugging verb. </b>This powers the GLKLIST command, when there's a command parser to read it.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b><span class="extract"><span class="extract-syntax">GGRecoverObjects</span></span> handles recovering the Glk objects after restarting or restoring.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">If GGRecoverObjects() has been called, all these stored IDs are</span>
<span class="plain-syntax"> </span><span class="comment-syntax">invalid, so we start by clearing them all out.</span>
<span class="plain-syntax"> </span><span class="comment-syntax">(In fact, after a restoreundo, some of them may still be good.</span>
<span class="plain-syntax"> </span><span class="comment-syntax">For simplicity, though, we assume the general case.)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_mainwin</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">gg_statuswin</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">gg_quotewin</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">gg_scriptfref</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">gg_scriptstr</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">gg_savestr</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">statuswin_cursize</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">gg_foregroundchan</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">gg_backgroundchan</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">gg_commandstr</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">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Also tell the game to clear its object references.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDWSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_commandstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDRSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_commandstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_statuswin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_QUOTEWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_quotewin</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_scriptfref</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</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">glk_gestalt</span><span class="plain-syntax">(</span><span class="identifier-syntax">gestalt_Sound</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">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_FOREGROUNDCHAN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_foregroundchan</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_BACKGROUNDCHAN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_backgroundchan</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</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">gg_foregroundchan</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">glk_schannel_stop</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_foregroundchan</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">gg_backgroundchan</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">glk_schannel_stop</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_backgroundchan</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Tell the game to tie up any loose ends.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(2);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</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. Debugging verb. </b>This powers the GLKLIST command, when there's a command parser to read it.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -51,182 +51,126 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>Startup Template</b></li></ul></div>
<p class="purpose">How programs for this architecture start up the virtual machine.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This variable is set at startup, to avoid asking the interpreter over
and over again.
<ul class="toc"><li><a href="S-str.html#SP2">&#167;2. Capture startup text</a></li><li><a href="S-str.html#SP3">&#167;3. Set up the Glk objects</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b><span class="extract"><span class="extract-syntax">VM_Check_Functionality</span></span> checks that we are running in a Glk interpreter,
as well as that it supports the minimum requirements, which are currently
that Glk supports unicode, and Glulx supports real numbers. If one of those
requirements is not met an error message will be shown before quitting.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">unicode_gestalt_ok</span><span class="plain-syntax">; </span><span class="comment-syntax">Set if interpreter supports Unicode</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b><span class="extract"><span class="extract-syntax">VM_Initialise()</span></span> is almost the first routine called, except that the
"starting the virtual machine" activity is allowed to go first; and,
come to think of it, memory allocation has to be set up before even that,
and that in turn calls <span class="extract"><span class="extract-syntax">VM_PreInitialise()</span></span> to do the absolute minimum.
</p>
<p class="commentary">Arrangements are a little different here compared with the 16-bit architecture,
because some data is retained in the case of a restart.
</p>
<p class="commentary">(Many thanks are due to Eliuk Blau, who found several tricky timing errors
here and elsewhere in the Glulx-specific code. Frankly, I feel like hanging
a sign on the following routines which reads "Congratulations on bringing
light to the Dark Room.")
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_PreInitialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Check_Functionality</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">; </span><span class="comment-syntax">Test if this interpreter has Glk...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">quit</span><span class="plain-syntax">; </span><span class="comment-syntax">...without which there would be nothing we could do</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unicode_gestalt_ok</span><span class="plain-syntax"> = </span><span class="reserved-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">glk_gestalt</span><span class="plain-syntax">(</span><span class="identifier-syntax">gestalt_Unicode</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">unicode_gestalt_ok</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Set the VM's I/O system to be Glk.</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">setiosys</span><span class="plain-syntax"> </span><span class="constant-syntax">2</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">glk_gestalt</span><span class="plain-syntax">(</span><span class="identifier-syntax">gestalt_Unicode</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">Fatal_Error</span><span class="plain-syntax">(</span><span class="string-syntax">"This storyfile can only be run in an unicode interpreter."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">11</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">; </span><span class="comment-syntax">Test if this interpreter supports real numbers...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</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">Fatal_Error</span><span class="plain-syntax">(</span><span class="string-syntax">"This storyfile can only be run in a Glulx interpreter that supports floating-point arithmetic."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> </span><span class="identifier-syntax">sty</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">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">; </span><span class="comment-syntax">Test if this interpreter has Glk...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">quit</span><span class="plain-syntax">; </span><span class="comment-syntax">...without which there would be nothing we could do</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">Fatal_Error</span><span class="plain-syntax"> </span><span class="identifier-syntax">msg</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_open</span><span class="plain-syntax">(0, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_set_window</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Fatal Error: "</span><span class="plain-syntax">, (</span><span class="reserved-syntax">string</span><span class="plain-syntax">) </span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">quit</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Capture startup text. </b>It is a semi-common problem for authors to do something which results in text
being printed before any Glk windows have been opened, which results in a fatal
interpreter error. (Or even worse, an extension is the cause, which the author
should not be expected to know the internal details of.) This is very frustrating,
as the author often will not know what is the cause of the error as any error
messages can't be shown until a Glk window is created; indeed it's often an error
message that is trying to be printed, which the author will never see. To help
authors, while we wait for the virtual machine to be set up (including a Glk
window) we can instead send any text to a memory stream. Then once the VM is ready
we can check if any text was sent to the memory stream, and then finally display
it in the window. We only capture 256 bytes, which may not be all that is attempted
to be printed, but hopefully it gives authors enough to identify the problem.
</p>
<span class="plain-syntax"> </span><span class="comment-syntax">First, we must go through all the Glk objects that exist, and see</span>
<span class="plain-syntax"> </span><span class="comment-syntax">if we created any of them. One might think this strange, since the</span>
<span class="plain-syntax"> </span><span class="comment-syntax">program has just started running, but remember that the player might</span>
<span class="plain-syntax"> </span><span class="comment-syntax">have just typed "restart".</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRE_STARTUP_TEXT_CAPTURE_MAX_LEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">256</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Buffer</span><span class="plain-syntax"> -&gt; </span><span class="identifier-syntax">PRE_STARTUP_TEXT_CAPTURE_MAX_LEN</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Results</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Stream</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax">();</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CAPTURE_STARTUP_TEXT_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Stream</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_memory</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pre_Startup_Text_Capture_Buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">PRE_STARTUP_TEXT_CAPTURE_MAX_LEN</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</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">glk_stream_set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pre_Startup_Text_Capture_Stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Sound channel initialisation, and RNG fixing, must be done now rather</span>
<span class="plain-syntax"> </span><span class="comment-syntax">than later in case InitGlkWindow() returns a non-zero value.</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">END_CAPTURE_STARTUP_TEXT_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pre_Startup_Text_Capture_Stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Results</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pre_Startup_Text_Capture_Results</span><span class="plain-syntax">--&gt;1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</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">len</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">PRE_STARTUP_TEXT_CAPTURE_MAX_LEN</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PRE_STARTUP_TEXT_CAPTURE_MAX_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_put_buffer</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pre_Startup_Text_Capture_Buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">len</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Set up the Glk objects. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">SOUND_CHANNEL_INIT_R</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">glk_gestalt</span><span class="plain-syntax">(</span><span class="identifier-syntax">gestalt_Sound</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">gg_foregroundchan</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">gg_foregroundchan</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">gg_foregroundchan</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_create</span><span class="plain-syntax">(</span><span class="identifier-syntax">GG_FOREGROUNDCHAN_ROCK</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">gg_backgroundchan</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">gg_backgroundchan</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">gg_backgroundchan</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_create</span><span class="plain-syntax">(</span><span class="identifier-syntax">GG_BACKGROUNDCHAN_ROCK</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">rfalse</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">BasicInformKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">FIX_RNG_CFGF</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="constant-syntax">10000</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="identifier-syntax">i</span><span class="plain-syntax">-2000;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">setrandom</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InitGlkWindow</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</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="plain-syntax"> </span><span class="comment-syntax">Now, gg_mainwin and gg_storywin might already be set. If not, set them.</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">OPEN_BUILT_IN_WINDOWS_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> </span><span class="identifier-syntax">sty</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">gg_mainwin and gg_storywin might already be set. If not, create them.</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Open the story window.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InitGlkWindow</span><span class="plain-syntax">(</span><span class="identifier-syntax">GG_MAINWIN_ROCK</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">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Left-justify the header style</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Header</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Justification</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Try to make emphasized type in italics and not boldface</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Emphasized</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Weight</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">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Emphasized</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Oblique</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">gg_mainwin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_open</span><span class="plain-syntax">(0, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Left-justify the header style</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Header</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Justification</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Try to make emphasized type in italics and not boldface</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Emphasized</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Weight</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">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">style_Emphasized</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_Oblique</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">gg_mainwin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_open</span><span class="plain-syntax">(0, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">wintype_TextBuffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_MAINWIN_ROCK</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">gg_mainwin</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">If we can't even open one window, give in</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">quit</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">gg_mainwin</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">quit</span><span class="plain-syntax">; </span><span class="comment-syntax">If we can't even open one window, give in</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">There was already a story window. We should erase it.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_window_clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</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">gg_statuswin</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">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InitGlkWindow</span><span class="plain-syntax">(</span><span class="identifier-syntax">GG_STATUSWIN_ROCK</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">res</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">statuswin_cursize</span><span class="plain-syntax"> = </span><span class="identifier-syntax">statuswin_size</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">sty</span><span class="plain-syntax">=0: </span><span class="identifier-syntax">sty</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">style_NUMSTYLES</span><span class="plain-syntax">: </span><span class="identifier-syntax">sty</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextGrid</span><span class="plain-syntax">, </span><span class="identifier-syntax">sty</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_ReverseColor</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">gg_statuswin</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_window_open</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">, </span><span class="identifier-syntax">winmethod_Fixed</span><span class="plain-syntax"> + </span><span class="identifier-syntax">winmethod_Above</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_cursize</span><span class="plain-syntax">, </span><span class="identifier-syntax">wintype_TextGrid</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_cursize</span><span class="plain-syntax"> = </span><span class="identifier-syntax">statuswin_size</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">sty</span><span class="plain-syntax">=0: </span><span class="identifier-syntax">sty</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">style_NUMSTYLES</span><span class="plain-syntax">: </span><span class="identifier-syntax">sty</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stylehint_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">wintype_TextGrid</span><span class="plain-syntax">, </span><span class="identifier-syntax">sty</span><span class="plain-syntax">, </span><span class="identifier-syntax">stylehint_ReverseColor</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_statuswin</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_window_open</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">, </span><span class="identifier-syntax">winmethod_Fixed</span><span class="plain-syntax"> + </span><span class="identifier-syntax">winmethod_Above</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_cursize</span><span class="plain-syntax">, </span><span class="identifier-syntax">wintype_TextGrid</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax">It's possible that the status window couldn't be opened, in which case</span>
<span class="plain-syntax"> </span><span class="comment-syntax">gg_statuswin is now zero. We must allow for that later on.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_set_window</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InitGlkWindow</span><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Empty the parse buffer (see bug 0001451)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer3</span><span class="plain-syntax">--&gt;0 = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">If GGRecoverObjects() has been called, all these stored IDs are</span>
<span class="plain-syntax"> </span><span class="comment-syntax">invalid, so we start by clearing them all out.</span>
<span class="plain-syntax"> </span><span class="comment-syntax">(In fact, after a restoreundo, some of them may still be good.</span>
<span class="plain-syntax"> </span><span class="comment-syntax">For simplicity, though, we assume the general case.)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_mainwin</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">gg_statuswin</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">gg_quotewin</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">gg_scriptfref</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">gg_scriptstr</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">gg_savestr</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">statuswin_cursize</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">gg_foregroundchan</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">gg_backgroundchan</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">gg_commandstr</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">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Also tell the game to clear its object references.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDWSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_commandstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDRSTR_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_commandstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_command_reading</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_statuswin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_QUOTEWIN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_quotewin</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_window_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_scriptfref</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</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">glk_gestalt</span><span class="plain-syntax">(</span><span class="identifier-syntax">gestalt_Sound</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">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_iterate</span><span class="plain-syntax">(0, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_FOREGROUNDCHAN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_foregroundchan</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GG_BACKGROUNDCHAN_ROCK</span><span class="plain-syntax">: </span><span class="identifier-syntax">gg_backgroundchan</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">default</span><span class="plain-syntax">: </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(1, </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">--&gt;0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_schannel_iterate</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_arguments</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">gg_foregroundchan</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">glk_schannel_stop</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_foregroundchan</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">gg_backgroundchan</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">glk_schannel_stop</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_backgroundchan</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Tell the game to tie up any loose ends.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifyGlkObject</span><span class="plain-syntax">(2);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -52,7 +52,7 @@
<li>
<p class="chapterentry"><a href="S-cpb.html">
<spon class="sectiontitle">Capabilities Template</span></a> -
<span class="sectionpurpose">Miscellaneous capabilities of the 16-bit architecture.</span></p>
<span class="sectionpurpose">Miscellaneous capabilities of the 32-bit architecture.</span></p>
</li>
<li>
<p class="chapterentry"><a href="S-glk.html">

View file

@ -277,7 +277,6 @@ to I7.
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_HEAPERROR</span><span class="plain-syntax"> = </span><span class="constant-syntax">49</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_LISTRANGEERROR</span><span class="plain-syntax"> = </span><span class="constant-syntax">50</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_REGEXPSYNTAXERROR</span><span class="plain-syntax"> = </span><span class="constant-syntax">51</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_NOGLULXUNICODE</span><span class="plain-syntax"> = </span><span class="constant-syntax">52</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_BACKDROPONLY</span><span class="plain-syntax"> = </span><span class="constant-syntax">53</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_NOTTHING</span><span class="plain-syntax"> = </span><span class="constant-syntax">54</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RTP_SCENEHASNTSTARTED</span><span class="plain-syntax"> = </span><span class="constant-syntax">55</span><span class="plain-syntax">;</span>

View file

@ -257,6 +257,9 @@ a previous match, setting them to the empty text.
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">11</span><span class="plain-syntax">; </span><span class="comment-syntax">Address of node for this subexpression</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">Allocated_Match_Vars</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">10</span><span class="plain-syntax">; </span><span class="comment-syntax">Indexed text to hold values of the variables</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx</span><span class="plain-syntax">; </span><span class="comment-syntax">for plain text match, index of initial character match</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx2</span><span class="plain-syntax">; </span><span class="comment-syntax">for plain text match, index of final character match</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">TEXT_TY_RE_DebugMatchVars</span><span class="plain-syntax"> </span><span class="identifier-syntax">txt</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">offset</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</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">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;10, </span><span class="string-syntax">" collecting subexps^"</span><span class="plain-syntax">;</span>
@ -1717,6 +1720,8 @@ indeed useful where the blob type is <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ftxtype</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGEXP_BLOB</span><span class="plain-syntax">: </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TEXT_TY_RE_CompileTree</span><span class="plain-syntax">(</span><span class="identifier-syntax">ftxt</span><span class="plain-syntax">, </span><span class="identifier-syntax">exactly</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CHR_BLOB</span><span class="plain-syntax">: </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TEXT_TY_CHR_CompileTree</span><span class="plain-syntax">(</span><span class="identifier-syntax">ftxt</span><span class="plain-syntax">, </span><span class="identifier-syntax">exactly</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx2</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">default</span><span class="plain-syntax">: </span><span class="string-syntax">"*** bad ftxtype ***"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -1748,7 +1753,10 @@ indeed useful where the blob type is <span class="extract"><span class="extract-
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" ***^"</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">ftxtype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CHR_BLOB</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RE_PACKET_space</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">RE_DATA1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match0_idx2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RE_PACKET_space</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">RE_DATA2</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">rtxt</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax">Accept only one match, replace nothing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rtxt</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>

View file

@ -205,8 +205,6 @@ original source text (though in fact I7 does not use this at present).
<span class="plain-syntax"> </span><span class="string-syntax">"always be 0 or more.^"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTP_REGEXPSYNTAXERROR</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Syntax error in regular expression.^"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTP_NOGLULXUNICODE</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"This interpreter does not support Unicode.^"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTP_NEGATIVEROOT</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"You can't take the square root of a negative number.^"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTP_CANTITERATE</span><span class="plain-syntax">:</span>

View file

@ -51,29 +51,131 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformKit</a></li><li><b>Startup Template</b></li></ul></div>
<p class="purpose">How the program starts up, in a Basic Inform project.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Because the functions below are replaced by <span class="extract"><span class="extract-syntax">WorldModelKit</span></span> alternatives
<ul class="toc"><li><a href="S-str.html#SP1">&#167;1. Summary</a></li><li><a href="S-str.html#SP2">&#167;2. The startup sequence</a></li><li><a href="S-str.html#SP3">&#167;3. Initialise Memory Rule</a></li><li><a href="S-str.html#SP4">&#167;4. Seed Random Number Generator Rule</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Summary. </b>These rules perform the essential tasks required for setting up the virtual
machine. This includes checking that we are running in a compatible interpreter,
and setting up various built in Glk objects (when running in a Glk interpreter).
</p>
<p class="commentary">These rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
</p>
<p class="commentary">Arrangements are a little different here on the Z-machine, because some
data is retained in the case of a restart.
</p>
<p class="commentary">(Many thanks are due to Eliuk Blau, who found several tricky timing errors
here and elsewhere in the Glulx-specific code. Frankly, I feel like hanging
a sign on the following routines which reads "Congratulations on bringing
light to the Dark Room.")
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. The startup sequence. </b>As of IE-0022 we have a simplified startup sequence. <span class="extract"><span class="extract-syntax">Main</span></span> calls the <span class="extract"><span class="extract-syntax">Startup</span></span>
function, which does two things: run an Architecture16Kit/Architecture32Kit function
<span class="extract"><span class="extract-syntax">VM_Check_Functionality</span></span> which checks the VM meets the minimum requirements for Inform
(in Glulx it would test a few Glulx/Glk gestalts; in Z-Code it would probably do
nothing.) Then it runs the Startup Rules. And that's it - everything else in the
startup sequence is now in Inform-accessible rules.
</p>
<p class="commentary">Because the functions below are replaced by <span class="extract"><span class="extract-syntax">WorldModelKit</span></span> alternatives
if that kit is present, the following applies only to Basic Inform programs
where <span class="extract"><span class="extract-syntax">WorldModelKit</span></span> is not involved.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">Main</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">; </span><span class="comment-syntax">To ensure this definition is not optimised out</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Startup</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Submain</span><span class="plain-syntax">();</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">Startup</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_Check_Functionality</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FollowRulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">STARTUP_RB</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">say__pc</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Initialise Memory Rule. </b>This rule amalgamates some minimal initialisations which all need to happen
before we can risk using some of the more exotic I7 kinds:
</p>
<ul class="items"><li>(a) The language definition might call for initialisation, although the
default language of play (English) does not.
</li><li>(b) We start the machinery needed to check that property accesses are
valid during play.
</li><li>(c) We initialise the memory allocation heap, and expand the literal
constants, as hinted above: these are called "block constants" since
they occupy blocks of memory.
</li><li>(d) Some architecture-specific dictionary and parse buffer related globals
are initialised.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_PreInitialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LanguageInitialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HeapInitialise</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create a completely unused memory allocation heap</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StackFramingInitialise</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create an empty stack</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CreateDynamicRelations</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create relation structures on the heap</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Empty the parse buffer (see bug 0001451)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer3</span><span class="plain-syntax">--&gt;0 = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">Ifnot</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_TERPSTANDARD</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;(</span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;0 + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> + </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">-&gt;0 + </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_end</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> + ((</span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> - </span><span class="constant-syntax">2</span><span class="plain-syntax">)--&gt;0) * </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer2</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer3</span><span class="plain-syntax">-&gt;0 = </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax">-&gt;0 = </span><span class="constant-syntax">15</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse2</span><span class="plain-syntax">-&gt;0 = </span><span class="constant-syntax">15</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</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. Seed Random Number Generator Rule. </b>Unless a seed is provided by Inform, and it won't be for released story files,
the VM's interpreter is supposed to start up with a good seed in its random
number generator: something usually derived from, say, the milliseconds part
of the current time of day, which is unlikely to repeat or show any pattern
in real-world use. However, early Z-machine interpreters often did this quite
badly, starting with poor seed values which meant that the first few random
numbers always had something in common (being fairly small in their range,
for instance). To obviate this we extract and throw away 100 random numbers
to get the generator going, shaking out more obvious early patterns, but
that cannot really help much if the VM interpreter's RNG is badly written.
"Anyone who considers arithmetical methods of producing random digits is,
of course, in a state of sin" (von Neumann).
</p>
<span class="plain-syntax">[ </span><span class="identifier-syntax">Main</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">; </span><span class="comment-syntax">To ensure this definition is not optimised out</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_Initialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SEED_RANDOM_NUMBER_GENERATOR_R</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Submain</span><span class="plain-syntax">();</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">SEED_RANDOM_NUMBER_GENERATOR_R</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">FIX_RNG_CFGF</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">TARGET_GLULX</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="constant-syntax">10000</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="identifier-syntax">i</span><span class="plain-syntax">-2000;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">setrandom</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">Ifnot</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="constant-syntax">10000</span><span class="plain-syntax"> -&gt; </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="identifier-syntax">i</span><span class="plain-syntax">-2000;</span>
<span class="plain-syntax"> @</span><span class="reserved-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> -&gt; </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">Endif</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">RNG_SEED_AT_START_OF_PLAY</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_Seed_RNG</span><span class="plain-syntax">(</span><span class="identifier-syntax">RNG_SEED_AT_START_OF_PLAY</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">=1: </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=100: </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="reserved-syntax">random</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">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -341,49 +341,45 @@ it's clearer to give two definitions, so:
<span class="plain-syntax"> </span><span class="identifier-syntax">FlexError</span><span class="plain-syntax">(</span><span class="string-syntax">"ran out with too many simultaneous text conversions"</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">unicode_gestalt_ok</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SuspendRTP</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> .</span><span class="identifier-syntax">RetryWithLargerBuffer</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">saved_stream</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_get_current</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stream</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_memory_uni</span><span class="plain-syntax">(</span><span class="identifier-syntax">buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</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">glk_stream_set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SuspendRTP</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> .</span><span class="identifier-syntax">RetryWithLargerBuffer</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">saved_stream</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_get_current</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stream</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_memory_uni</span><span class="plain-syntax">(</span><span class="identifier-syntax">buffer</span><span class="plain-syntax">, </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</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">glk_stream_set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">; @</span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax">(7);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from_snippet</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PrintSnippet</span><span class="plain-syntax">) </span><span class="identifier-syntax">from_value</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PrintI6Text</span><span class="plain-syntax">) </span><span class="identifier-syntax">from_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">pull</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">; @</span><span class="identifier-syntax">pull</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">; @</span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax">(7);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from_snippet</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PrintSnippet</span><span class="plain-syntax">) </span><span class="identifier-syntax">from_value</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PrintI6Text</span><span class="plain-syntax">) </span><span class="identifier-syntax">from_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> @</span><span class="identifier-syntax">pull</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">; @</span><span class="identifier-syntax">pull</span><span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">results</span><span class="plain-syntax"> = </span><span class="identifier-syntax">buffer</span><span class="plain-syntax"> + </span><span class="identifier-syntax">buffer_size</span><span class="plain-syntax"> - </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">results</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">saved_stream</span><span class="plain-syntax">) </span><span class="identifier-syntax">glk_stream_set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">saved_stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ResumeRTP</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">results</span><span class="plain-syntax"> = </span><span class="identifier-syntax">buffer</span><span class="plain-syntax"> + </span><span class="identifier-syntax">buffer_size</span><span class="plain-syntax"> - </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">results</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">saved_stream</span><span class="plain-syntax">) </span><span class="identifier-syntax">glk_stream_set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">saved_stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ResumeRTP</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">results</span><span class="plain-syntax">--&gt;1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">-1) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Glulx had to truncate text output because the buffer ran out:</span>
<span class="plain-syntax"> </span><span class="comment-syntax">len is the number of characters which it tried to print</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">news</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">news</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">len</span><span class="plain-syntax">) </span><span class="identifier-syntax">news</span><span class="plain-syntax">=</span><span class="identifier-syntax">news</span><span class="plain-syntax">*2;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VM_AllocateMemory</span><span class="plain-syntax">(</span><span class="identifier-syntax">news</span><span class="plain-syntax">*</span><span class="identifier-syntax">WORDSIZE</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"> ~= </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">memory_to_free</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_FreeMemory</span><span class="plain-syntax">(</span><span class="identifier-syntax">memory_to_free</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">memory_to_free</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">buffer</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">RawBufferSize</span><span class="plain-syntax"> = </span><span class="identifier-syntax">news</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer_size</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">)*</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RetryWithLargerBuffer</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Memory allocation refused: all we can do is to truncate the text</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">-1;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">results</span><span class="plain-syntax">--&gt;1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">-1) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Glulx had to truncate text output because the buffer ran out:</span>
<span class="plain-syntax"> </span><span class="comment-syntax">len is the number of characters which it tried to print</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">news</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">news</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">len</span><span class="plain-syntax">) </span><span class="identifier-syntax">news</span><span class="plain-syntax">=</span><span class="identifier-syntax">news</span><span class="plain-syntax">*2;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VM_AllocateMemory</span><span class="plain-syntax">(</span><span class="identifier-syntax">news</span><span class="plain-syntax">*</span><span class="identifier-syntax">WORDSIZE</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"> ~= </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">memory_to_free</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_FreeMemory</span><span class="plain-syntax">(</span><span class="identifier-syntax">memory_to_free</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">memory_to_free</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">buffer</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">RawBufferSize</span><span class="plain-syntax"> = </span><span class="identifier-syntax">news</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer_size</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">)*</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RetryWithLargerBuffer</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">--&gt;(</span><span class="identifier-syntax">len</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">TEXT_TY_CastPrimitiveNesting</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BlkValueMassCopyFromArray</span><span class="plain-syntax">(</span><span class="identifier-syntax">to_txt</span><span class="plain-syntax">, </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="identifier-syntax">len</span><span class="plain-syntax">+1);</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">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_NOGLULXUNICODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax">Memory allocation refused: all we can do is to truncate the text</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RawBufferSize</span><span class="plain-syntax">-1;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">--&gt;(</span><span class="identifier-syntax">len</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">TEXT_TY_CastPrimitiveNesting</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BlkValueMassCopyFromArray</span><span class="plain-syntax">(</span><span class="identifier-syntax">to_txt</span><span class="plain-syntax">, </span><span class="identifier-syntax">buffer</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="identifier-syntax">len</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">memory_to_free</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_FreeMemory</span><span class="plain-syntax">(</span><span class="identifier-syntax">memory_to_free</span><span class="plain-syntax">);</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>

View file

@ -65,7 +65,7 @@ MathJax = {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformKit</a></li><li><b>Utilities Template</b></li></ul></div>
<p class="purpose">Miscellaneous utility routines for some fundamental I6 needs.</p>
<ul class="toc"><li><a href="S-utl.html#SP1">&#167;1. Miscellany</a></li><li><a href="S-utl.html#SP2">&#167;2. Final Code Dependencies</a></li><li><a href="S-utl.html#SP3">&#167;3. Firebreak</a></li><li><a href="S-utl.html#SP4">&#167;4. Print Decimal Number</a></li><li><a href="S-utl.html#SP5">&#167;5. Print Text</a></li><li><a href="S-utl.html#SP6">&#167;6. Print Or Run</a></li><li><a href="S-utl.html#SP7">&#167;7. Saying Phrases</a></li><li><a href="S-utl.html#SP8">&#167;8. Kinds</a></li><li><a href="S-utl.html#SP9">&#167;9. Non-standard enumerations</a></li><li><a href="S-utl.html#SP10">&#167;10. GenerateRandomNumber</a></li><li><a href="S-utl.html#SP11">&#167;11. PrintSpaces</a></li><li><a href="S-utl.html#SP12">&#167;12. SwapWorkflags</a></li><li><a href="S-utl.html#SP13">&#167;13. TestUseOption</a></li><li><a href="S-utl.html#SP14">&#167;14. ZRegion</a></li><li><a href="S-utl.html#SP15">&#167;15. Arrcpy</a></li><li><a href="S-utl.html#SP16">&#167;16. Verbs as Values</a></li><li><a href="S-utl.html#SP17">&#167;17. Seed Random Number Generator Rule</a></li><li><a href="S-utl.html#SP18">&#167;18. Regarding</a></li><li><a href="S-utl.html#SP19">&#167;19. Say One Of</a></li><li><a href="S-utl.html#SP20">&#167;20. Rounding</a></li><li><a href="S-utl.html#SP21">&#167;21. Doing nothing</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="S-utl.html#SP1">&#167;1. Miscellany</a></li><li><a href="S-utl.html#SP2">&#167;2. Final Code Dependencies</a></li><li><a href="S-utl.html#SP3">&#167;3. Firebreak</a></li><li><a href="S-utl.html#SP4">&#167;4. Print Decimal Number</a></li><li><a href="S-utl.html#SP5">&#167;5. Print Text</a></li><li><a href="S-utl.html#SP6">&#167;6. Print Or Run</a></li><li><a href="S-utl.html#SP7">&#167;7. Saying Phrases</a></li><li><a href="S-utl.html#SP8">&#167;8. Kinds</a></li><li><a href="S-utl.html#SP9">&#167;9. Non-standard enumerations</a></li><li><a href="S-utl.html#SP10">&#167;10. GenerateRandomNumber</a></li><li><a href="S-utl.html#SP11">&#167;11. PrintSpaces</a></li><li><a href="S-utl.html#SP12">&#167;12. SwapWorkflags</a></li><li><a href="S-utl.html#SP13">&#167;13. TestUseOption</a></li><li><a href="S-utl.html#SP14">&#167;14. ZRegion</a></li><li><a href="S-utl.html#SP15">&#167;15. Arrcpy</a></li><li><a href="S-utl.html#SP16">&#167;16. Verbs as Values</a></li><li><a href="S-utl.html#SP17">&#167;17. Regarding</a></li><li><a href="S-utl.html#SP18">&#167;18. Say One Of</a></li><li><a href="S-utl.html#SP19">&#167;19. Rounding</a></li><li><a href="S-utl.html#SP20">&#167;20. Doing nothing</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Miscellany. </b></p>
@ -119,7 +119,7 @@ MathJax = {
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Final Code Dependencies. </b>This function definition is a little misleading. The idea is that the
final code-generator can inject code of its own into the body here: for example,
the final code-generation for Glulx injects code into <span class="extract"><span class="extract-syntax">FINAL_CODE_STARTUP_R</span></span>
the final code-generation for Glulx injects code into <span class="extract"><span class="extract-syntax">PLATFORM_SPECIFIC_STARTUP_R</span></span>
to use accelerated VM support for certain veneer functions.
</p>
@ -128,7 +128,8 @@ helpful code here: the fallbacks here are basic.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">FINAL_CODE_STARTUP_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">addr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">PLATFORM_SPECIFIC_STARTUP_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">addr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DebugAction</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">anames</span><span class="plain-syntax"> </span><span class="identifier-syntax">str</span><span class="plain-syntax">;</span>
@ -386,28 +387,7 @@ following shows. (The name is from "region of the Z-machine".)
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. Seed Random Number Generator Rule. </b>Unless a seed is provided by Inform, and it won't be for released story files,
the VM's interpreter is supposed to start up with a good seed in its random
number generator: something usually derived from, say, the milliseconds part
of the current time of day, which is unlikely to repeat or show any pattern
in real-world use. However, early Z-machine interpreters often did this quite
badly, starting with poor seed values which meant that the first few random
numbers always had something in common (being fairly small in their range,
for instance). To obviate this we extract and throw away 100 random numbers
to get the generator going, shaking out more obvious early patterns, but
that cannot really help much if the VM interpreter's RNG is badly written.
"Anyone who considers arithmetical methods of producing random digits is,
of course, in a state of sin" (von Neumann).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">SEED_RANDOM_NUMBER_GENERATOR_R</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">RNG_SEED_AT_START_OF_PLAY</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_Seed_RNG</span><span class="plain-syntax">(</span><span class="identifier-syntax">RNG_SEED_AT_START_OF_PLAY</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">=1: </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=100: </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="reserved-syntax">random</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">rfalse</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. Regarding. </b>These are used with adaptive text.
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. Regarding. </b>These are used with adaptive text.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -423,7 +403,7 @@ of course, in a state of sin" (von Neumann).
<span class="plain-syntax"> </span><span class="identifier-syntax">prior_named_noun</span><span class="plain-syntax"> = </span><span class="reserved-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Say One Of. </b>These routines are described in the Extensions chapter of the Inform
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. Say One Of. </b>These routines are described in the Extensions chapter of the Inform
documentation.
</p>
@ -469,7 +449,7 @@ documentation.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ct</span><span class="plain-syntax">*</span><span class="identifier-syntax">base</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ssd</span><span class="plain-syntax">*</span><span class="identifier-syntax">base</span><span class="plain-syntax">*</span><span class="identifier-syntax">base</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. Rounding. </b>The following rounds a numerical value <span class="extract"><span class="extract-syntax">t1</span></span> to the nearest unit of <span class="extract"><span class="extract-syntax">t2</span></span>;
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Rounding. </b>The following rounds a numerical value <span class="extract"><span class="extract-syntax">t1</span></span> to the nearest unit of <span class="extract"><span class="extract-syntax">t2</span></span>;
for instance, if <span class="extract"><span class="extract-syntax">t2</span></span> is 5 then it rounds to the nearest 5. The name is an
anachronism, as it's used for all kinds of value.
</p>
@ -480,7 +460,7 @@ anachronism, as it's used for all kinds of value.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -((-</span><span class="identifier-syntax">t1</span><span class="plain-syntax">+</span><span class="identifier-syntax">t2</span><span class="plain-syntax">/2)/</span><span class="identifier-syntax">t2</span><span class="plain-syntax">)*</span><span class="identifier-syntax">t2</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Doing nothing. </b>Surprisingly, this function has a use.
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. Doing nothing. </b>Surprisingly, this function has a use.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -65,7 +65,7 @@ MathJax = {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>OrderOfPlay Template</b></li></ul></div>
<p class="purpose">The sequence of events in play: the Main routine which runs the startup rulebook, the turn sequence rulebook and the shutdown rulebook; and most of the I6 definitions of primitive rules in those rulebooks.</p>
<ul class="toc"><li><a href="S-ord.html#SP1">&#167;1. Main</a></li><li><a href="S-ord.html#SP2">&#167;2. Virtual Machine Startup Rule</a></li><li><a href="S-ord.html#SP3">&#167;3. Initial Situation</a></li><li><a href="S-ord.html#SP4">&#167;4. Initialise Memory Rule</a></li><li><a href="S-ord.html#SP5">&#167;5. Position Player In Model World Rule</a></li><li><a href="S-ord.html#SP6">&#167;6. Parse Command Rule</a></li><li><a href="S-ord.html#SP7">&#167;7. Treat Parser Results</a></li><li><a href="S-ord.html#SP8">&#167;8. Generate Action Rule</a></li><li><a href="S-ord.html#SP9">&#167;9. Generate Multiple Actions</a></li><li><a href="S-ord.html#SP10">&#167;10. Timed Events Rule</a></li><li><a href="S-ord.html#SP11">&#167;11. Setting Timed Events</a></li><li><a href="S-ord.html#SP12">&#167;12. Setting Time Of Day</a></li><li><a href="S-ord.html#SP13">&#167;13. Advance Time Rule</a></li><li><a href="S-ord.html#SP14">&#167;14. Note Object Acquisitions Rule</a></li><li><a href="S-ord.html#SP15">&#167;15. Resurrect Player If Asked Rule</a></li><li><a href="S-ord.html#SP16">&#167;16. Ask The Final Question Rule</a></li><li><a href="S-ord.html#SP17">&#167;17. Read The Final Answer Rule</a></li><li><a href="S-ord.html#SP18">&#167;18. Immediately Restart VM Rule</a></li><li><a href="S-ord.html#SP19">&#167;19. Immediately Restore Saved Game Rule</a></li><li><a href="S-ord.html#SP20">&#167;20. Immediately Quit Rule</a></li><li><a href="S-ord.html#SP21">&#167;21. Immediately Undo Rule</a></li><li><a href="S-ord.html#SP22">&#167;22. Print Obituary Headline Rule</a></li><li><a href="S-ord.html#SP23">&#167;23. Print Final Score Rule</a></li><li><a href="S-ord.html#SP24">&#167;24. Display Final Status Line Rule</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="S-ord.html#SP1">&#167;1. Main</a></li><li><a href="S-ord.html#SP2">&#167;2. Initial Whitespace Rule</a></li><li><a href="S-ord.html#SP3">&#167;3. Initial Situation</a></li><li><a href="S-ord.html#SP4">&#167;4. Initialise Memory Rule</a></li><li><a href="S-ord.html#SP5">&#167;5. Position Player In Model World Rule</a></li><li><a href="S-ord.html#SP6">&#167;6. Parse Command Rule</a></li><li><a href="S-ord.html#SP7">&#167;7. Treat Parser Results</a></li><li><a href="S-ord.html#SP8">&#167;8. Generate Action Rule</a></li><li><a href="S-ord.html#SP9">&#167;9. Generate Multiple Actions</a></li><li><a href="S-ord.html#SP10">&#167;10. Timed Events Rule</a></li><li><a href="S-ord.html#SP11">&#167;11. Setting Timed Events</a></li><li><a href="S-ord.html#SP12">&#167;12. Setting Time Of Day</a></li><li><a href="S-ord.html#SP13">&#167;13. Advance Time Rule</a></li><li><a href="S-ord.html#SP14">&#167;14. Note Object Acquisitions Rule</a></li><li><a href="S-ord.html#SP15">&#167;15. Resurrect Player If Asked Rule</a></li><li><a href="S-ord.html#SP16">&#167;16. Ask The Final Question Rule</a></li><li><a href="S-ord.html#SP17">&#167;17. Read The Final Answer Rule</a></li><li><a href="S-ord.html#SP18">&#167;18. Immediately Restart VM Rule</a></li><li><a href="S-ord.html#SP19">&#167;19. Immediately Restore Saved Game Rule</a></li><li><a href="S-ord.html#SP20">&#167;20. Immediately Quit Rule</a></li><li><a href="S-ord.html#SP21">&#167;21. Immediately Undo Rule</a></li><li><a href="S-ord.html#SP22">&#167;22. Print Obituary Headline Rule</a></li><li><a href="S-ord.html#SP23">&#167;23. Print Final Score Rule</a></li><li><a href="S-ord.html#SP24">&#167;24. Display Final Status Line Rule</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Main. </b>This is where every I6 story file begins execution: it can end either by
returning, or by a <span class="extract"><span class="extract-syntax">quit</span></span> statement or equivalent opcode. (In I7 this does
@ -86,10 +86,8 @@ explained in the Standard Rules.
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">IterationsOfTurnSequence</span><span class="plain-syntax">;</span>
<span class="plain-syntax">+</span><span class="identifier-syntax">replacing</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">) [ </span><span class="identifier-syntax">Main</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rulebook_without_variables</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ACTION_PROCESSING_RB</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FollowRulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">STARTUP_RB</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">say__pc</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Startup</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="reserved-syntax">true</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">deadflag</span><span class="plain-syntax"> == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EarlyInTurnSequence</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
@ -102,17 +100,14 @@ explained in the Standard Rules.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Virtual Machine Startup Rule. </b>We delegate to the appropriate VM-specific section of code for the real work.
The printing of three blank lines at the start of play is traditional: on early
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Initial Whitespace Rule. </b>The printing of three blank lines at the start of play is traditional: on early
Z-machine interpreters such as InfoTaskForce and Zip it was a necessity because
of the way they buffered output. On modern windowed ones it still helps to
space the opening text better.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">VIRTUAL_MACHINE_STARTUP_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CarryOutActivity</span><span class="plain-syntax">(</span><span class="identifier-syntax">STARTING_VIRTUAL_MACHINE_ACT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_Initialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">INITIAL_WHITESPACE_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="comment-syntax">It is now safe for the paragraph breaking between rules mechanism to work</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"^^^"</span><span class="plain-syntax">;</span>
@ -136,13 +131,11 @@ reads, say, "Mrs Bridges is a woman. The player is Mrs Bridges."): in
other circumstances they are often correct, but this must not be relied on.
</p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Initialise Memory Rule. </b>This rule amalgamates some minimal initialisations which all need to happen
before we can risk using some of the more exotic I7 kinds:
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Initialise Memory Rule. </b>In addition to BasicInformKit's memory initialisation, this rule sets up
the initial situation:
</p>
<ul class="items"><li>(a) The language definition might call for initialisation, although the
default language of play (English) does not.
</li><li>(b) A handful of variables are filled in. <span class="extract"><span class="extract-syntax">I7_LOOKMODE</span></span> is a constant
<p class="commentary">A handful of variables are filled in. <span class="extract"><span class="extract-syntax">I7_LOOKMODE</span></span> is a constant
created by the use options "use full-length room descriptions" or
"use abbreviated room descriptions", but otherwise not existing. It is
particularly important that <span class="extract"><span class="extract-syntax">player</span></span> have the correct value, as the
@ -155,12 +148,8 @@ interesting point here is that we explicitly set <span class="extract"><span cla
we know better. We do this so that the "update chronological records rule"
cannot see where the player is: see the Standard Rules for an explanation
of why this is, albeit perhaps dubiously, a good thing.
</li><li>(c) We start the machinery needed to check that property accesses are
valid during play.
</li><li>(d) And we initialise the memory allocation heap, and expand the literal
constants, as hinted above: these are called "block constants" since
they occupy blocks of memory.
</li></ul>
</p>
<p class="commentary">The <span class="extract"><span class="extract-syntax">not_yet_in_play</span></span> flag, which is cleared when the first command is
about to be read from the keyboard, suppresses the standard status line
text: thus, if there is some long text to read before the player finds out
@ -168,10 +157,7 @@ where he is, the surprise will not be spoiled.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">+</span><span class="identifier-syntax">replacing</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">) [ </span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_PreInitialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LanguageInitialise</span><span class="plain-syntax">();</span>
<span class="plain-syntax">+</span><span class="identifier-syntax">replacing</span><span class="plain-syntax">(</span><span class="identifier-syntax">keeping</span><span class="plain-syntax">)(</span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">) [ </span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">not_yet_in_play</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lookmode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WorldModelKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">ROOM_DESC_DETAIL_CFGV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InitialSituation</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">PLAYER_OBJECT_INIS</span><span class="plain-syntax">;</span>
@ -179,9 +165,7 @@ where he is, the surprise will not be spoiled.
<span class="plain-syntax"> </span><span class="identifier-syntax">real_location</span><span class="plain-syntax"> = </span><span class="reserved-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax"> = </span><span class="reserved-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HeapInitialise</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create a completely unused memory allocation heap</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StackFramingInitialise</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create an empty stack</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CreateDynamicRelations</span><span class="plain-syntax">(); </span><span class="comment-syntax">Create relation structures on the heap</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">replaced</span><span class="plain-syntax">`</span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>

View file

@ -104,8 +104,8 @@ matches:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PASS_1_SMFT:</span>
<span class="plain-syntax"> </span><a href="6-act.html#SP4" class="function-link"><span class="function-syntax">Activities::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_activity</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="6-act.html#SP4" class="function-link"><span class="function-syntax">Activities::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_activity</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</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">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>

View file

@ -494,7 +494,7 @@ will be required to pass <span class="extract"><span class="extract-syntax">&lt;
<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">ACTIVITY_I6TR:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr.html#SP8_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Require the accessible-to form</span><span class="named-paragraph-number">8.2.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">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><a href="6-act.html#SP9" class="function-link"><span class="function-syntax">Activities::translates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">p2</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">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><a href="6-act.html#SP8" class="function-link"><span class="function-syntax">Activities::translates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">p2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VARIABLE_I6TR:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">translates_into_verb</span><span class="plain-syntax"> == </span><span class="constant-syntax">TRANSLATION_DEPRECATED_FORM</span><span class="plain-syntax">)</span>

View file

@ -1118,7 +1118,7 @@ but not in this context.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">av</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">"failed to extract activity structure"</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">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;activity-name-formal&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><a href="6-act.html#SP10" class="function-link"><span class="function-syntax">Activities::add_variable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-act.html#SP9" class="function-link"><span class="function-syntax">Activities::add_variable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">UsingProblems::assertion_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadActivityRef</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"an activity has to be formally referred to in a way making clear that "</span>
@ -1830,7 +1830,7 @@ allow one case, where the declaration is redundant and harmless.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">) != </span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">InferenceSubjects::is_a_kind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</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-ass.html#SP8" class="function-link"><span class="function-syntax">Assertions::issue_value_equation_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_6" class="named-paragraph-link"><span class="named-paragraph">Assert that X is an instance of Y</span><span class="named-paragraph-number">6.3.39.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_5" class="named-paragraph-link"><span class="named-paragraph">Assert that X is an instance of Y</span><span class="named-paragraph-number">6.3.39.5</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="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">g_spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
@ -1853,15 +1853,10 @@ allow one case, where the declaration is redundant and harmless.)
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">a_kind</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">a_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">g_kind</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_2" class="named-paragraph-link"><span class="named-paragraph">This sentence redundantly specifies the kind of value for a value</span><span class="named-paragraph-number">6.3.39.2</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">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">a_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_activity</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">g_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_activity</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">a_kind</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">g_kind</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_3" class="named-paragraph-link"><span class="named-paragraph">Amend kind of activity so that it is based on nothing</span><span class="named-paragraph-number">6.3.39.3</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">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">a_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_description</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_5" class="named-paragraph-link"><span class="named-paragraph">Issue problem for trying to use a description as a literal</span><span class="named-paragraph-number">6.3.39.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_4" class="named-paragraph-link"><span class="named-paragraph">Issue problem for trying to use a description as a literal</span><span class="named-paragraph-number">6.3.39.4</span></a></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">var_set</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_4" class="named-paragraph-link"><span class="named-paragraph">Dabble further in ruthless sarcasm</span><span class="named-paragraph-number">6.3.39.4</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">var_set</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-ass.html#SP6_3_39_3" class="named-paragraph-link"><span class="named-paragraph">Dabble further in ruthless sarcasm</span><span class="named-paragraph-number">6.3.39.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">));</span>
@ -1940,24 +1935,10 @@ file: this may possibly be useful to I6 hackers.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3_39">&#167;6.3.39</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_39_3" class="paragraph-anchor"></a><b>&#167;6.3.39.3. </b>This is a very special case. We get here from "X is an activity based on
nothing" but not from "X is an activity", and so it can be used to override
the default assumption about the basis of an activity.
<p class="commentary firstcommentary"><a id="SP6_3_39_3" class="paragraph-anchor"></a><b>&#167;6.3.39.3. </b>My, aren't we charming?
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Amend kind of activity so that it is based on nothing</span><span class="named-paragraph-number">6.3.39.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="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_activity</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</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">av</span><span class="plain-syntax">) </span><a href="6-act.html#SP5" class="function-link"><span class="function-syntax">Activities::base_on_nothing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3_39">&#167;6.3.39</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_39_4" class="paragraph-anchor"></a><b>&#167;6.3.39.4. </b>My, aren't we charming?
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Dabble further in ruthless sarcasm</span><span class="named-paragraph-number">6.3.39.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Dabble further in ruthless sarcasm</span><span class="named-paragraph-number">6.3.39.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1979,7 +1960,7 @@ the default assumption about the basis of an activity.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3_39">&#167;6.3.39</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_39_5" class="paragraph-anchor"></a><b>&#167;6.3.39.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem for trying to use a description as a literal</span><span class="named-paragraph-number">6.3.39.5</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP6_3_39_4" class="paragraph-anchor"></a><b>&#167;6.3.39.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem for trying to use a description as a literal</span><span class="named-paragraph-number">6.3.39.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1992,13 +1973,13 @@ the default assumption about the basis of an activity.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3_39">&#167;6.3.39</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_39_6" class="paragraph-anchor"></a><b>&#167;6.3.39.6. </b>Creation has already taken place, in that X does now exist, but any
<p class="commentary firstcommentary"><a id="SP6_3_39_5" class="paragraph-anchor"></a><b>&#167;6.3.39.5. </b>Creation has already taken place, in that X does now exist, but any
stipulations on X &mdash; that it should have certain properties, or be in a
certain place, for instance &mdash; will not yet be enforced. These will be in
the "creation proposition" of Y, and we now assert this to be true about X.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert that X is an instance of Y</span><span class="named-paragraph-number">6.3.39.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert that X is an instance of Y</span><span class="named-paragraph-number">6.3.39.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -525,7 +525,8 @@ from the tree.
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;grammatical-gender-marker&gt;</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_gender_marker_ANNOT</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</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="function-syntax">&lt;creation-problem-diagnosis&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">; </span><span class="identifier-syntax">DocReferences::position_of_symbol</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;creation-problem-diagnosis&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</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="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">create_as</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">))) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</span><span class="plain-syntax"> != </span><span class="identifier-syntax">INITIALLY_CE</span><span class="plain-syntax">) &amp;&amp;</span>
@ -916,7 +917,7 @@ them by asserting propositions to be true; we act directly.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax"> = </span><a href="6-act.html#SP4" class="function-link"><span class="function-syntax">Activities::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax"> = </span><a href="6-act.html#SP4" class="function-link"><span class="function-syntax">Activities::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">av</span><span class="plain-syntax">) </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_activity</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
</pre>

View file

@ -60,7 +60,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">assertions</a></li><li><a href="index.html#6">Chapter 6: Rules, Rulebooks and Activities</a></li><li><b>Activities</b></li></ul></div>
<p class="purpose">To create and manage activities, which are bundles of rules for carrying out tasks.</p>
<ul class="toc"><li><a href="6-act.html#SP1">&#167;1. Introduction</a></li><li><a href="6-act.html#SP10">&#167;10. Activity variables</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="6-act.html#SP1">&#167;1. Introduction</a></li><li><a href="6-act.html#SP9">&#167;9. Activity variables</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Introduction. </b>An activity is just a triple of rulebooks with related names, a common focus
and a shared set of variables, so this will not be a long section of code.
@ -142,20 +142,17 @@ special Preform of its own; here is the subject phrase:
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="function-syntax">Activities::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">Activities::new</span></span>:<br/>New Activity Requests - <a href="3-nar.html#SP2">&#167;2</a><br/>The Creator - <a href="4-tc.html#SP4_4_2_5">&#167;4.4.2.5</a></span></button><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><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">activity</span><span class="plain-syntax"> *</span><span class="function-syntax">Activities::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">Activities::new</span></span>:<br/>New Activity Requests - <a href="3-nar.html#SP2">&#167;2</a><br/>The Creator - <a href="4-tc.html#SP4_4_2_5">&#167;4.4.2.5</a></span></button><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><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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bypassed</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">on_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::unary_construction_material</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind_given</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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">on_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_given</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">on_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"So %W has kind given = %d, res = %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_given</span><span class="plain-syntax">, </span><span class="identifier-syntax">on_kind</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">on_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">)) </span><span class="identifier-syntax">kind_given</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">bypassed</span><span class="plain-syntax">) { </span><span class="identifier-syntax">kind_given</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">on_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;&lt;ds&gt;&gt;</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;&lt;future&gt;&gt;</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;&lt;hide&gt;&gt;</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;activity-sentence-subject&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;activity-new-name&gt;</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">doc_symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;ds&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">The name can't have been used before</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="6-act.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">The kind the activity is performed on, if there is one, must be definite</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">If it is not of or for something, then it cannot have a kind</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
@ -173,9 +170,9 @@ special Preform of its own; here is the subject phrase:
<span class="plain-syntax"> </span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">activity_variables</span><span class="plain-syntax"> = </span><a href="6-sv.html#SP6" class="function-link"><span class="function-syntax">SharedVariables::new_set</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">variables_id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">before_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP7" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">for_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP7" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">after_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP7" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">before_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP6" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">for_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP6" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">after_rules</span><span class="plain-syntax"> = </span><a href="6-act.html#SP6" class="function-link"><span class="function-syntax">Activities::make_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">PluginCalls::new_activity_notify</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</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">av</span><span class="plain-syntax">;</span>
@ -252,20 +249,7 @@ it; actually two &mdash; for example, both "announcing" and "announcing activity
<span class="plain-syntax"> </span><span class="identifier-syntax">ACTIVITY_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_activity</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-act.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>The above mechanism for assuming that activities must be based on something &mdash;
objects, failing anything else &mdash; can be wrong, and if so, the assertions
machinery call this:
</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">Activities::base_on_nothing</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">Activities::base_on_nothing</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_39_3">&#167;6.3.39.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">activity_on_what_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::base_on_nothing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">before_rules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::base_on_nothing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">for_rules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::base_on_nothing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">after_rules</span><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>And its rulebooks are named with these constructions:
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>And its rulebooks are named with these constructions:
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
@ -275,10 +259,10 @@ machinery call this:
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">after</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </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="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Activities::make_rulebook</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">Activities::make_rulebook</span></span>:<br/><a href="6-act.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Activities::make_rulebook</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">Activities::make_rulebook</span></span>:<br/><a href="6-act.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</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">def</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_OUTCOME</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">N</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><span class="constant-syntax">SUCCESS_OUTCOME</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;activity-rulebook-construction&gt;</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">,</span>
@ -290,7 +274,7 @@ machinery call this:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>And this nonterminal parses individual activity names.
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>And this nonterminal parses individual activity names.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
@ -304,12 +288,12 @@ machinery call this:
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The author can demand with a "translates as" sentence that a given
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The author can demand with a "translates as" sentence that a given
rulebook should have an identifier given to it which is accessible to Inter:
</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">Activities::translates</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">Activities::translates</span></span>:<br/>Translation Requests - <a href="3-tr.html#SP8_2_2">&#167;8.2.2</a></span></button><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Activities::translates</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">Activities::translates</span></span>:<br/>Translation Requests - <a href="3-tr.html#SP8_2_2">&#167;8.2.2</a></span></button><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;activity-name&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *) </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTActivities::translate</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">));</span>
@ -322,11 +306,11 @@ rulebook should have an identifier given to it which is accessible to Inter:
<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. Activity variables. </b>Any new activity variable name is vetted by being run through this:
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Activity variables. </b>Any new activity variable name is vetted by being run through this:
</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">Activities::add_variable</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">Activities::add_variable</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_25_1">&#167;6.3.25.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Activities::add_variable</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">Activities::add_variable</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_25_1">&#167;6.3.25.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">av</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cnode</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">) == </span><span class="identifier-syntax">UNPARSED_NOUN_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
@ -346,15 +330,15 @@ rulebook should have an identifier given to it which is accessible to Inter:
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</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="function-syntax">&lt;s-type-expression&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">SW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">The name of the variable must be fortunate</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">The specification must not be qualified</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">The specification must be just a kind</span><span class="named-paragraph-number">10.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP10_4" class="named-paragraph-link"><span class="named-paragraph">That kind must be definite</span><span class="named-paragraph-number">10.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">The name of the variable must be fortunate</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">The specification must not be qualified</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">The specification must be just a kind</span><span class="named-paragraph-number">9.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-act.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">That kind must be definite</span><span class="named-paragraph-number">9.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-sv.html#SP3" class="function-link"><span class="function-syntax">SharedVariables::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">activity_variables</span><span class="plain-syntax">, </span><span class="identifier-syntax">VW</span><span class="plain-syntax">, </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The name of the variable must be fortunate</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The name of the variable must be fortunate</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -372,8 +356,8 @@ rulebook should have an identifier given to it which is accessible to Inter:
<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="6-act.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The specification must not be qualified</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-act.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The specification must not be qualified</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -394,8 +378,8 @@ rulebook should have an identifier given to it which is accessible to Inter:
<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="6-act.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>&#167;10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The specification must be just a kind</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-act.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>&#167;9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The specification must be just a kind</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -412,8 +396,8 @@ rulebook should have an identifier given to it which is accessible to Inter:
<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="6-act.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_4" class="paragraph-anchor"></a><b>&#167;10.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">That kind must be definite</span><span class="named-paragraph-number">10.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-act.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_4" class="paragraph-anchor"></a><b>&#167;9.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">That kind must be definite</span><span class="named-paragraph-number">9.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -431,7 +415,7 @@ rulebook should have an identifier given to it which is accessible to Inter:
<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="6-act.html#SP10">&#167;10</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="6-act.html#SP9">&#167;9</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="6-fao.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresschapter"><a href="5-id.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-rls.html">rls</a></li><li class="progresssection"><a href="6-rb.html">rb</a></li><li class="progresssection"><a href="6-bl.html">bl</a></li><li class="progresssection"><a href="6-rlb.html">rlb</a></li><li class="progresssection"><a href="6-fao.html">fao</a></li><li class="progresscurrent">act</li><li class="progresssection"><a href="6-sv.html">sv</a></li><li class="progresschapter"><a href="7-tc.html">7</a></li><li class="progresschapter"><a href="8-kpr.html">8</a></li><li class="progressnext"><a href="6-sv.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -233,15 +233,15 @@ being analogous to a function \(X\to Y\).
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-fao.html#SP1" class="function-link"><span class="function-syntax">FocusAndOutcome::get_focus_parameter_kind</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_focus</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">Rulebooks::base_on_nothing</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">Rulebooks::base_on_nothing</span></span>:<br/>Activities - <a href="6-act.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::base_on_nothing</span><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="6-fao.html#SP1" class="function-link"><span class="function-syntax">FocusAndOutcome::focus_on_nothing</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_focus</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcome_kind</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">Rulebooks::get_outcome_kind</span></span>:<br/><a href="6-rlb.html#SP2_3">&#167;2.3</a>, <a href="6-rlb.html#SP2_4">&#167;2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcome_kind</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">Rulebooks::get_outcome_kind</span></span>:<br/><a href="6-rlb.html#SP2_3">&#167;2.3</a>, <a href="6-rlb.html#SP2_4">&#167;2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-fao.html#SP7" class="function-link"><span class="function-syntax">FocusAndOutcome::get_outcome_kind</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_outcomes</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcomes</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">Rulebooks::get_outcomes</span></span>:<br/>Focus and Outcome - <a href="6-fao.html#SP5">&#167;5</a>, <a href="6-fao.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcomes</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">Rulebooks::get_outcomes</span></span>:<br/>Focus and Outcome - <a href="6-fao.html#SP5">&#167;5</a>, <a href="6-fao.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_outcomes</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -272,7 +272,7 @@ of the rules in it:
<span class="plain-syntax"> </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_focus_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">), </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_outcome_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::contains_kind</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">Rulebooks::contains_kind</span></span>:<br/>Rules - <a href="6-rls.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::contains_kind</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">Rulebooks::contains_kind</span></span>:<br/>Rules - <a href="6-rls.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_rule</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_focus_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">), </span><a href="6-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_outcome_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
@ -348,7 +348,7 @@ that action are automatically created, and similarly for activities and scenes.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::new_automatic</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">Rulebooks::new_automatic</span></span>:<br/>Activities - <a href="6-act.html#SP7">&#167;7</a></span></button><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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">basis</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::new_automatic</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">Rulebooks::new_automatic</span></span>:<br/>Activities - <a href="6-act.html#SP6">&#167;6</a></span></button><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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">basis</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">default_outcome</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">always_test_actor</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">for_activities</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">stem_length</span><span class="plain-syntax">, </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax"> = </span><a href="6-rlb.html#SP2" class="function-link"><span class="function-syntax">Rulebooks::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_rulebook</span><span class="plain-syntax">, </span><span class="identifier-syntax">basis</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_void</span><span class="plain-syntax">), </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
@ -365,7 +365,7 @@ rulebook should have an identifier given to it which is accessible to Inter:
</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">Rulebooks::translates</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">Rulebooks::translates</span></span>:<br/>Translation Requests - <a href="3-tr.html#SP8_2_2">&#167;8.2.2</a></span></button><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::translates</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">Rulebooks::translates</span></span>:<br/>Translation Requests - <a href="3-tr.html#SP8_2_2">&#167;8.2.2</a></span></button><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;rulebook-name&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *) </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRulebooks::translate</span><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">));</span>
@ -399,7 +399,7 @@ rulebook should have an identifier given to it which is accessible to Inter:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-bl.html#SP7" class="function-link"><span class="function-syntax">BookingLists::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">contents</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">Rulebooks::rule_in_rulebook</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">Rulebooks::rule_in_rulebook</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1">&#167;15.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::rule_in_rulebook</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">Rulebooks::rule_in_rulebook</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1">&#167;15.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</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="6-bl.html#SP7" class="function-link"><span class="function-syntax">BookingLists::contains</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">contents</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -409,7 +409,7 @@ rulebook should have an identifier given to it which is accessible to Inter:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-bl.html#SP7" class="function-link"><span class="function-syntax">BookingLists::first</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">contents</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">Rulebooks::runs_during_activities</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">Rulebooks::runs_during_activities</span></span>:<br/>Rule Family - <a href="5-rf.html#SP7_3">&#167;7.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::runs_during_activities</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">Rulebooks::runs_during_activities</span></span>:<br/>Rule Family - <a href="5-rf.html#SP7_3">&#167;7.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">runs_during_activities</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -451,15 +451,15 @@ has a D called W":
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::variables</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">Rulebooks::variables</span></span>:<br/>Rules - <a href="6-rls.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::variables</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">Rulebooks::variables</span></span>:<br/>Rules - <a href="6-rls.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_variables</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">shared_variable_access_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::accessible_variables</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">Rulebooks::accessible_variables</span></span>:<br/><a href="6-rlb.html#SP12">&#167;12</a>, <a href="6-rlb.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">shared_variable_access_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::accessible_variables</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">Rulebooks::accessible_variables</span></span>:<br/><a href="6-rlb.html#SP12">&#167;12</a>, <a href="6-rlb.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">accessible_variables</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">Rulebooks::add_variable</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">Rulebooks::add_variable</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_25_2">&#167;6.3.25.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::add_variable</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">Rulebooks::add_variable</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_25_2">&#167;6.3.25.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rlb.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">The variable has to have a name</span><span class="named-paragraph-number">11.1</span></a></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">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cnode</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
@ -603,7 +603,7 @@ go into <span class="extract"><span class="extract-syntax">B-&gt;my_variables</s
</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">Rulebooks::grant_access_to_variables</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">Rulebooks::grant_access_to_variables</span></span>:<br/>Activities - <a href="6-act.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::grant_access_to_variables</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">Rulebooks::grant_access_to_variables</span></span>:<br/>Activities - <a href="6-act.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="6-sv.html#SP9" class="function-link"><span class="function-syntax">SharedVariables::add_set_to_access_list</span></a><span class="plain-syntax">(</span><a href="6-rlb.html#SP11" class="function-link"><span class="function-syntax">Rulebooks::accessible_variables</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">), </span><span class="identifier-syntax">set</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -623,7 +623,7 @@ user in beta-testing.)
</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">Rulebooks::attach_rule</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">Rulebooks::attach_rule</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1">&#167;15.1</a><br/>Rule Bookings - <a href="6-rb.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">booking</span><span class="plain-syntax"> *</span><span class="identifier-syntax">br</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::attach_rule</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">Rulebooks::attach_rule</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1">&#167;15.1</a><br/>Rule Bookings - <a href="6-rb.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">booking</span><span class="plain-syntax"> *</span><span class="identifier-syntax">br</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">placing</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">side</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref_rule</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">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Attaching booking $b to rulebook $K"</span><span class="plain-syntax">, </span><span class="identifier-syntax">br</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">);</span>
@ -656,7 +656,7 @@ user in beta-testing.)
</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">Rulebooks::detach_rule</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">Rulebooks::detach_rule</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1_3">&#167;15.1.3</a>, <a href="3-rpr.html#SP15_1_4">&#167;15.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::detach_rule</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">Rulebooks::detach_rule</span></span>:<br/>Rule Placement Requests - <a href="3-rpr.html#SP15_1_3">&#167;15.1.3</a>, <a href="3-rpr.html#SP15_1_4">&#167;15.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="6-bl.html#SP6" class="function-link"><span class="function-syntax">BookingLists::remove</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">contents</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -692,7 +692,7 @@ it is not used recursively, we store the results in <span class="extract"><span
<span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> </span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::match</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">Rulebooks::match</span></span>:<br/>Rule Family - <a href="5-rf.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::match</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">Rulebooks::match</span></span>:<br/>Rule Family - <a href="5-rf.html#SP7">&#167;7</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">return</span><span class="plain-syntax"> &amp;</span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -789,7 +789,7 @@ rulebooks. This is all a bit inelegant, but we manage.
</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">Rulebooks::rb_match_from_description</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Rulebooks::rb_match_from_description</span></span>:<br/><a href="6-rlb.html#SP16">&#167;16</a></span></button><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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SB</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::rb_match_from_description</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">Rulebooks::rb_match_from_description</span></span>:<br/><a href="6-rlb.html#SP16">&#167;16</a></span></button><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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SB</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rlb.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Find the longest-named rulebook whose name appears at the front of W</span><span class="named-paragraph-number">18.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">rm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">matched_rulebook</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>
@ -891,7 +891,7 @@ as used when they are created by the Standard Rules extension.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </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">Rulebooks::detect_notable</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">Rulebooks::detect_notable</span></span>:<br/><a href="6-rlb.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::detect_notable</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Rulebooks::detect_notable</span></span>:<br/><a href="6-rlb.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;notable-rulebooks&gt;(B-&gt;</span><span class="element-syntax">primary_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">RB_action_processing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">B</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -100,7 +100,7 @@ placed on a nonlocal variable (for which, see <a href="../knowledge-module/2-nv.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">shared_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">SharedVariables::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">SharedVariables::new</span></span>:<br/>Rulebooks - <a href="6-rlb.html#SP11">&#167;11</a><br/>Activities - <a href="6-act.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">shared_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">SharedVariables::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">SharedVariables::new</span></span>:<br/>Rulebooks - <a href="6-rlb.html#SP11">&#167;11</a><br/>Activities - <a href="6-act.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">shared_variable_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</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">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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_actor</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">shared_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">shv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">shared_variable</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Articles::remove_the</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>

View file

@ -54,6 +54,13 @@
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>See test case <span class="extract"><span class="extract-syntax">BIP-Adjectives</span></span>.
</p>
<p class="commentary">Something to watch out for here is that the domain of an adjective with an
intentionally broad kind has to be written in a way which considers covariance
and contravariance. Thus, "list of values" matches every list, because "list of K"
is covariant: but "activity on values" does not match every activity, because
"activity on K" is contravariant, and instead "activity on nothing" is needed.
</p>
<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">Adjectival</span><span class="plain-syntax"> </span><span class="identifier-syntax">Definitions</span>
@ -73,12 +80,13 @@
<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">table</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">filled</span><span class="plain-syntax"> </span><span class="identifier-syntax">rows</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</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="constant-syntax">0</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">table</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">full</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">full</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">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">blank</span><span class="plain-syntax"> </span><span class="identifier-syntax">rows</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</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="constant-syntax">0</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">rulebook</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">routine</span><span class="plain-syntax"> </span><span class="string-syntax">"RulebookEmpty"</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">contains</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">so</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">following</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">nothing</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">makes</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">decision</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">nothing</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">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">routine</span>
<span class="plain-syntax"> </span><span class="string-syntax">"RulebookEmpty"</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">contains</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">so</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">following</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">nothing</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">makes</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">decision</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">Definition</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">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">routine</span><span class="plain-syntax"> </span><span class="string-syntax">"ActivityEmpty"</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">its</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">before</span><span class="plain-syntax">, </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebooks</span><span class="plain-syntax"> </span><span class="identifier-syntax">are</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">Definition</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">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</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">routine</span><span class="plain-syntax"> </span><span class="string-syntax">"TestActivity"</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">one</span>
<span class="identifier-syntax">Definition</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">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">routine</span>
<span class="plain-syntax"> </span><span class="string-syntax">"ActivityEmpty"</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">its</span><span class="plain-syntax"> </span><span class="identifier-syntax">before</span><span class="plain-syntax">, </span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebooks</span><span class="plain-syntax"> </span><span class="identifier-syntax">are</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">Definition</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">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">going</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</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">routine</span><span class="plain-syntax"> </span><span class="string-syntax">"TestActivity"</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">one</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">its</span><span class="plain-syntax"> </span><span class="identifier-syntax">three</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebooks</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">being</span><span class="plain-syntax"> </span><span class="identifier-syntax">run</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">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">values</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">non</span><span class="plain-syntax">-</span><span class="identifier-syntax">empty</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">routine</span>

View file

@ -135,23 +135,91 @@ the right order, matching definitions both in the Inform 7 compiler and in the
template libraries. (Remember that creating an activity creates three rulebooks.)
</p>
<p class="commentary">These rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
</p>
<ul class="items"><li>(a) The "virtual machine startup rule" carries out necessary steps to
begin execution on the virtual machine in use: this entails relatively little
on the Z-machine versions 5 or 8, but can involve extensive work to get the
screen display working on Glulx or Z6.
</li><li>(b) The platform specific startup rule contains code which Inform injects for
the specific compilation platform. Note that this is not the same as an
architecture: both Glulx and C use the 32 bit architecture, but are different
platforms, and so might inject different code into this rule.
</li><li>(c) The "initialise memory rule" starts up the memory allocation heap,
if there is one, and sets some essential I6 variables. If there is any rule
not to meddle with, this is it.
</li><li>(d) The "seed random number generator rule" seeds the RNG to a fixed value
if Inform has requested this (which it does in response to the <span class="extract"><span class="extract-syntax">-rng</span></span> command
line switch, which is in turn used by the <span class="extract"><span class="extract-syntax">intest</span></span> testing utility: it's a
way to make deterministic tests of programs which use random values).
</li><li>(e) The "recover Glk objects rule" runs the object recovery process in order to
identify and pre-existing Glk objects after a restart.
</li><li>(f) The "open built-in windows rule" opens the Glk windows; only after this
point is it safe to print anything.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Chapter</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Startup</span>
<span class="identifier-syntax">Startup</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">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">accessible</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</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">"STARTUP_RB"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Startup</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">allow</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">deny</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</span><span class="plain-syntax"> (</span><span class="identifier-syntax">failure</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">Shutdown</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">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">shutdown</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">accessible</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</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">"SHUTDOWN_RB"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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_startvm</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">Starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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_startvm</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">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">accessible</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</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">"STARTING_VIRTUAL_MACHINE_ACT"</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">code</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">code</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"FINAL_CODE_STARTUP_R"</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">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">default</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">outcome</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">First</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">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">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Section</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax"> (</span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">Glulx</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</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">capturing</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">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">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">start</span><span class="plain-syntax"> </span><span class="identifier-syntax">capturing</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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="plain-syntax"> </span><span class="string-syntax">"CAPTURE_STARTUP_TEXT_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Section</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">platform</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">platform</span><span class="plain-syntax"> </span><span class="identifier-syntax">specific</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">"PLATFORM_SPECIFIC_STARTUP_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">memory</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">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">memory</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">"INITIALISE_MEMORY_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">seed</span><span class="plain-syntax"> </span><span class="identifier-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">generator</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">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">seed</span><span class="plain-syntax"> </span><span class="identifier-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">generator</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">"SEED_RANDOM_NUMBER_GENERATOR_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Section</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> (</span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">Glulx</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">recover</span><span class="plain-syntax"> </span><span class="identifier-syntax">Glk</span><span class="plain-syntax"> </span><span class="identifier-syntax">objects</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">before</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">recover</span><span class="plain-syntax"> </span><span class="identifier-syntax">Glk</span><span class="plain-syntax"> </span><span class="identifier-syntax">objects</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">"GGRecoverObjects"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>However, the two activities for printing names of objects are indeed
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>These rules now set up the built in sound channels and windows.
</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">sound</span><span class="plain-syntax"> </span><span class="identifier-syntax">channel</span><span class="plain-syntax"> </span><span class="identifier-syntax">initialisation</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">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">sound</span><span class="plain-syntax"> </span><span class="identifier-syntax">channel</span><span class="plain-syntax"> </span><span class="identifier-syntax">initialisation</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">"SOUND_CHANNEL_INIT_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">open</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">windows</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">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">open</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">windows</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">"OPEN_BUILT_IN_WINDOWS_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">captured</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">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">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">display</span><span class="plain-syntax"> </span><span class="identifier-syntax">captured</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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="plain-syntax"> </span><span class="string-syntax">"END_CAPTURE_STARTUP_TEXT_R"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>However, the two activities for printing names of objects are indeed
functional in Basic Inform.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Chapter</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">activities</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">name</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">hidden</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">RULES</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">act_pn</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">The</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">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">accessible</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</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">"PRINTING_THE_NAME_ACT"</span><span class="plain-syntax">.</span>

View file

@ -1215,6 +1215,15 @@ think about; as a one-off phrase, it may as well go here.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">replace</span><span class="plain-syntax"> </span><span class="identifier-syntax">paragraph</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</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">in</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="identifier-syntax">with</span><span class="plain-syntax"> (</span><span class="identifier-syntax">replace</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">documented</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph_replacepara</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">TEXT_TY_ReplaceBlob</span><span class="plain-syntax">(</span><span class="identifier-syntax">PARA_BLOB</span><span class="plain-syntax">, {-</span><span class="identifier-syntax">lvalue</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">T</span><span class="plain-syntax">}, {</span><span class="identifier-syntax">N</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">replace</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">match</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">ph_textfirstindex</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">match0_idx2</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) * (</span><span class="identifier-syntax">match0_idx</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">match</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">ph_textlastindex</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">match0_idx2</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">length</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">match</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">ph_textlength</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">match0_idx2</span><span class="plain-syntax"> - </span><span class="identifier-syntax">match0_idx</span><span class="plain-syntax">) -).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>&#167;36. </b>...and for regular expressions, though here we also have access to the
exact text which matched (not interesting in the plain text case since it's
@ -1242,6 +1251,15 @@ subexpressions (which the plain text case doesn't have).
<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">what</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">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">matching</span><span class="plain-syntax"> </span><span class="identifier-syntax">subexpression</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</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="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_subexpressiontext</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">TEXT_TY_RE_GetMatchVar</span><span class="plain-syntax">({</span><span class="identifier-syntax">N</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">subexpression</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</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="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_refirstindex</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA2</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) * (</span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA1</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">last</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">subexpression</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</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="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_relastindex</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- ((</span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA2</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) * </span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA2</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</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">length</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">subexpression</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</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="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_relength</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA2</span><span class="plain-syntax"> - </span><span class="identifier-syntax">RE_Subexpressions</span><span class="plain-syntax">--&gt;{</span><span class="identifier-syntax">n</span><span class="plain-syntax">}--&gt;</span><span class="identifier-syntax">RE_DATA1</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">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</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">times</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="identifier-syntax">matches</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">regular</span><span class="plain-syntax"> </span><span class="identifier-syntax">expression</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">find</span><span class="plain-syntax"> - </span><span class="identifier-syntax">text</span><span class="plain-syntax">),</span><span class="identifier-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">insensitively</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">ph_nummatchesre</span><span class="plain-syntax">):</span>

View file

@ -102,7 +102,7 @@ ones being initially zero.
<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">fn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DebugAction"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-i6c2.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Inject code at the top of DebugAction</span><span class="named-paragraph-number">2.4</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">fn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DebugAttribute"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-i6c2.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Inject code at the top of DebugAttribute</span><span class="named-paragraph-number">2.5</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">fn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DebugProperty"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-i6c2.html#SP2_6" class="named-paragraph-link"><span class="named-paragraph">Inject code at the top of DebugProperty</span><span class="named-paragraph-number">2.6</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">fn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"FINAL_CODE_STARTUP_R"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-i6c2.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Inject code at the top of FINAL_CODE_STARTUP_R</span><span class="named-paragraph-number">2.7</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">fn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"PLATFORM_SPECIFIC_STARTUP_R"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-i6c2.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Inject code at the top of PLATFORM_SPECIFIC_STARTUP_R</span><span class="named-paragraph-number">2.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-vnl.html#SP3" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_body</span><span class="plain-syntax">); </span><span class="comment-syntax"> This compiles the body of the function</span>
@ -216,7 +216,7 @@ functions do not exist in earlier Glulx implementations. However, takeup of
3.1.3 has been swift. (See Jira bug I7-2328 and I7-1162.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Inject code at the top of FINAL_CODE_STARTUP_R</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Inject code at the top of PLATFORM_SPECIFIC_STARTUP_R</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -221,7 +221,7 @@ or as paragraph of text in pass 2:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^understandable"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">under</span><span class="plain-syntax"> = </span><span class="string-syntax">"tick"</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">priority</span><span class="plain-syntax"> == </span><span class="constant-syntax">8</span><span class="plain-syntax">) { </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">props</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">under</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><a href="3-ce2.html#SP3" class="function-link"><span class="function-syntax">ChartElement::begin_chart_row</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">session</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ce2.html#SP4" class="function-link"><span class="function-syntax">ChartElement::index_kind_name_cell</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">shaded</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ce2.html#SP4" class="function-link"><span class="function-syntax">ChartElement::index_kind_name_cell</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">shaded</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ce2.html#SP5" class="function-link"><span class="function-syntax">ChartElement::end_chart_row</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">shaded</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">repeat</span><span class="plain-syntax">, </span><span class="identifier-syntax">props</span><span class="plain-syntax">, </span><span class="identifier-syntax">under</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -356,7 +356,8 @@ sound effects row is shaded if there are none.
</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">ChartElement::index_kind_name_cell</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">ChartElement::index_kind_name_cell</span></span>:<br/><a href="3-ce2.html#SP1_1_2">&#167;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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shaded</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ChartElement::index_kind_name_cell</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">ChartElement::index_kind_name_cell</span></span>:<br/><a href="3-ce2.html#SP1_1_2">&#167;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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shaded</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</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">shaded</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexgrey"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP11" class="function-link"><span class="function-syntax">IndexUtilities::kind_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^is_quasinumerical"</span><span class="plain-syntax">)) {</span>
@ -368,7 +369,7 @@ sound effects row is shaded if there are none.
<span class="plain-syntax"> </span><a href="2-iu.html#SP3" class="function-link"><span class="function-syntax">IndexUtilities::link_to_documentation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</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="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^instance_count"</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="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" [%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP5" class="function-link"><span class="function-syntax">IndexUtilities::below_link_numbered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP5" class="function-link"><span class="function-syntax">IndexUtilities::below_link_numbered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">posn</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">shaded</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">shaded</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -429,7 +430,6 @@ whole row.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Metadata::optional_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^object_class"</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">class_s</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">"no class for object kind"</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">anchor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::identifier</span><span class="plain-syntax">(</span><span class="identifier-syntax">class_s</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">shaded</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="3-ce2.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Begin the object citation line</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="3-ce2.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Index the name part of the object citation</span><span class="named-paragraph-number">6.3</span></a></span><span class="plain-syntax">;</span>

View file

@ -181,21 +181,21 @@ than the number with correct ones
number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3129 excerpt meanings</span>
<span class="plain-syntax"> Stored among 846 words out of total vocabulary of 10735</span>
<span class="plain-syntax"> 716 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax">Size of lexicon: 3141 excerpt meanings</span>
<span class="plain-syntax"> Stored among 849 words out of total vocabulary of 10759</span>
<span class="plain-syntax"> 719 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax"> 15 words have an end list: longest belongs to case (with 6 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
<span class="plain-syntax"> 108 words have a subset list: longest belongs to street (with 4 meanings)</span>
<span class="plain-syntax">Number of attempts to retrieve: 110344</span>
<span class="plain-syntax"> of which unsuccessful: 92205</span>
<span class="plain-syntax"> of which successful: 18139</span>
<span class="plain-syntax">Number of attempts to retrieve: 110380</span>
<span class="plain-syntax"> of which unsuccessful: 92237</span>
<span class="plain-syntax"> of which successful: 18143</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 276472</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 253735</span>
<span class="plain-syntax"> of which, total with correct hash codes: 22737</span>
<span class="plain-syntax"> of which, total which matched: 19906</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 279269</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 256529</span>
<span class="plain-syntax"> of which, total with correct hash codes: 22740</span>
<span class="plain-syntax"> of which, total which matched: 19910</span>
</pre>
<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-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progressnext"><a href="P-htitm.html">&#10095;</a></li></ul></div>

View file

@ -293,13 +293,13 @@ Within each category, items are listed in order of creation.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">adjective: 140 items</span>
<span class="plain-syntax">article: 2 items</span>
<span class="plain-syntax">noun: 2389 items</span>
<span class="plain-syntax">noun: 2395 items</span>
<span class="plain-syntax">pronoun: 8 items</span>
<span class="plain-syntax">preposition: 274 items</span>
<span class="plain-syntax">determiner: 22 items</span>
<span class="plain-syntax">verb: 109 items</span>
<span class="plain-syntax">verb_form: 388 items</span>
<span class="plain-syntax">total in all categories: 3332</span>
<span class="plain-syntax">total in all categories: 3338</span>
<span class="plain-syntax">adjective: 'even'</span>
<span class="plain-syntax">adjective: 'odd'</span>
@ -522,6 +522,7 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'property printed plural name'</span>
<span class="plain-syntax">noun: proper: 'indefinite article'</span>
<span class="plain-syntax">noun: proper: 'property indefinite article'</span>
<span class="plain-syntax">noun: proper: 'virtual machine startup rule'</span>
<span class="plain-syntax">noun: proper: 'abs function'</span>
<span class="plain-syntax">noun: proper: 'root function'</span>
<span class="plain-syntax">noun: proper: 'rsqr function'</span>
@ -574,7 +575,6 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'lock-fitting relation'</span>
<span class="plain-syntax">noun: proper: 'list grouping key'</span>
<span class="plain-syntax">noun: proper: 'property list grouping key'</span>
<span class="plain-syntax">noun: proper: 'declare everything initially unmentioned rule'</span>
<span class="plain-syntax">noun: proper: 'start in the correct scenes rule'</span>
<span class="plain-syntax">noun: proper: 'when play begins stage rule'</span>
<span class="plain-syntax">noun: proper: 'fix baseline scoring rule'</span>
@ -582,6 +582,7 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'initial room description rule'</span>
<span class="plain-syntax">noun: proper: 'every turn stage rule'</span>
<span class="plain-syntax">noun: proper: 'early scene changing stage rule'</span>
<span class="plain-syntax">noun: proper: 'declare everything initially unmentioned rule'</span>
<span class="plain-syntax">noun: proper: 'late scene changing stage rule'</span>
<span class="plain-syntax">noun: proper: 'notify score changes rule'</span>
<span class="plain-syntax">noun: proper: 'when play ends stage rule'</span>
@ -989,7 +990,14 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'after starting the virtual machine'</span>
<span class="plain-syntax">noun: proper: 'after starting the virtual machine rules'</span>
<span class="plain-syntax">noun: proper: 'after starting the virtual machine rulebook'</span>
<span class="plain-syntax">noun: proper: 'final code startup rule'</span>
<span class="plain-syntax">noun: proper: 'start capturing startup text rule'</span>
<span class="plain-syntax">noun: proper: 'platform specific startup rule'</span>
<span class="plain-syntax">noun: proper: 'initialise memory rule'</span>
<span class="plain-syntax">noun: proper: 'seed random number generator rule'</span>
<span class="plain-syntax">noun: proper: 'recover glk objects rule'</span>
<span class="plain-syntax">noun: proper: 'sound channel initialisation rule'</span>
<span class="plain-syntax">noun: proper: 'open built-in windows rule'</span>
<span class="plain-syntax">noun: proper: 'display captured startup text rule'</span>
<span class="plain-syntax">noun: proper: 'printing the name'</span>
<span class="plain-syntax">noun: proper: 'printing the name activity'</span>
<span class="plain-syntax">noun: proper: 'before printing the name'</span>
@ -1267,9 +1275,7 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'multiple action processing rules'</span>
<span class="plain-syntax">noun: proper: 'multiple action processing rulebook'</span>
<span class="plain-syntax">noun: proper: 'little-used do nothing rule'</span>
<span class="plain-syntax">noun: proper: 'virtual machine startup rule'</span>
<span class="plain-syntax">noun: proper: 'initialise memory rule'</span>
<span class="plain-syntax">noun: proper: 'seed random number generator rule'</span>
<span class="plain-syntax">noun: proper: 'initial whitespace rule'</span>
<span class="plain-syntax">noun: proper: 'update chronological records rule'</span>
<span class="plain-syntax">noun: proper: 'position player in model world rule'</span>
<span class="plain-syntax">noun: proper: 'adjust light rule'</span>

View file

@ -438,14 +438,14 @@ recognised as an answer.)
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">Table</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</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">Options</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">only</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">victorious</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">false</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</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><span class="identifier-syntax">finally</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> [</span><span class="identifier-syntax">activity</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">empty</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</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">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">question</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">increase</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">less</span><span class="plain-syntax"> </span><span class="identifier-syntax">than</span><span class="plain-syntax"> </span><span class="constant-syntax">1</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">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="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"Would you like to "</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">Table</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</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">Options</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">only</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">victorious</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">false</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</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><span class="identifier-syntax">finally</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> [</span><span class="identifier-syntax">activity</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">empty</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</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">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">question</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">decrease</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
@ -465,7 +465,7 @@ recognised as an answer.)
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">Table</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</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">Options</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">only</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">victorious</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">false</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</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><span class="identifier-syntax">finally</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> [</span><span class="identifier-syntax">activity</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">empty</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">or</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">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</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">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</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">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">matches</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">entry</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">there</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</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">final</span><span class="plain-syntax"> </span><span class="identifier-syntax">response</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">;</span>

View file

@ -417,7 +417,7 @@ also by some of the I7 template routines.)
<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">undescribed</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">described</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">described</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">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">or</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">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="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>
<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">unmentioned</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </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

View file

@ -360,7 +360,7 @@ about quitting or restarting.
<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">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">Standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">Rulebooks</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">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">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">nothing</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">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">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">accessible</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</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">"TURN_SEQUENCE_RB"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Now a set of rulebooks to do with the passage of time.
@ -571,33 +571,14 @@ 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">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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="SP21" class="paragraph-anchor"></a><b>&#167;21. 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
use of that ability here.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Startup. </b>These startup rules prepare the various world model specific systems.
</p>
<p class="commentary">The "first" rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
</p>
<ul class="items"><li>(a) The "initialise memory rule" starts up the memory allocation heap,
if there is one, and sets some essential I6 variables. If there is any rule
not to meddle with, this is it.
</li><li>(b) The "virtual machine startup rule" carries out necessary steps to
begin execution on the virtual machine in use: this entails relatively little
on the Z-machine versions 5 or 8, but can involve extensive work to get the
screen display working on Glulx or Z6. Before anything else happens, however,
the "starting the virtual machine" activity (see below) is carried out.
</li><li>(c) The "seed random number generator rule" seeds the RNG to a fixed value
if Inform has requested this (which it does in response to the <span class="extract"><span class="extract-syntax">-rng</span></span> command
line switch, which is in turn used by the <span class="extract"><span class="extract-syntax">intest</span></span> testing utility: it's a
way to make deterministic tests of programs which use random values).
</li><li>(d) The "update chronological records rule" is described in further detail
<ul class="items"><li>(a) The printing of three blank lines at the start of play is traditional: on early
Z-machine interpreters such as InfoTaskForce and Zip it was a necessity because
of the way they buffered output. On modern windowed ones it still helps to
space the opening text better.
</li><li>(b) The "update chronological records rule" is described in further detail
below, since it appears both here and also in the turn sequence rulebook.
Here it's providing us with a baseline of initial truths from which we can
later assess conditions such as "the marble door has been open". A subtle
@ -608,10 +589,9 @@ for purposes of a rule preamble like "... when the player has been in the
Dining Room for three turns". It's as if the player teleports into an
already-existing world, like some Star Trek crewman, just in time for the
first command.
</li><li>(e) All items begin unmentioned, as might be expected.
</li><li>(f) And the "position player in model world rule" completes the initial
</li><li>(c) The "position player in model world rule" completes the initial
construction of the spatial model world.
</li><li>(g) The "start in the correct scenes rule" ensures that we start out
</li><li>(d) The "start in the correct scenes rule" ensures that we start out
in the correct scenes. (This can't wait, because it's just conceivable
that somebody has written a rule with a preamble like "When play
begins during the Hunting Season...": it's also where the scene
@ -619,24 +599,18 @@ Entire Game begins.) That completes the necessary preliminaries before
ordinary I7 rules can be run.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<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">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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">th.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">position</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">model</span><span class="plain-syntax"> </span><span class="identifier-syntax">world</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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">th.</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">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="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">things</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">item</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">mentioned</span><span class="plain-syntax">.</span>
<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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">th</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">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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">th.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">seed</span><span class="plain-syntax"> </span><span class="identifier-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">generator</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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">rd.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">startup</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">initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">memory</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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">. </span><span class="comment-syntax">st.</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">whitespace</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">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">initial</span><span class="plain-syntax"> </span><span class="identifier-syntax">whitespace</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">"INITIAL_WHITESPACE_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</span><span class="plain-syntax"> </span><span class="identifier-syntax">startup</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"VIRTUAL_MACHINE_STARTUP_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">memory</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"INITIALISE_MEMORY_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">seed</span><span class="plain-syntax"> </span><span class="identifier-syntax">random</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">generator</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"SEED_RANDOM_NUMBER_GENERATOR_R"</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"UPDATE_CHRONOLOGICAL_RECORDS_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">position</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">model</span><span class="plain-syntax"> </span><span class="identifier-syntax">world</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">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</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">"POSITION_PLAYER_IN_MODEL_R"</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">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">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">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">"UPDATE_CHRONOLOGICAL_RECORDS_R"</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">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>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">position</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">model</span><span class="plain-syntax"> </span><span class="identifier-syntax">world</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">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">position</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">model</span><span class="plain-syntax"> </span><span class="identifier-syntax">world</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">"POSITION_PLAYER_IN_MODEL_R"</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">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">after</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">virtual</span><span class="plain-syntax"> </span><span class="identifier-syntax">machine</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">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="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="SP22" class="paragraph-anchor"></a><b>&#167;22. </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
@ -648,18 +622,17 @@ action.
</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">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</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">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">startup</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">fix</span><span class="plain-syntax"> </span><span class="identifier-syntax">baseline</span><span class="plain-syntax"> </span><span class="identifier-syntax">scoring</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">startup</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">display</span><span class="plain-syntax"> </span><span class="identifier-syntax">banner</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">startup</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">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">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">startup</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Startup</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">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</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="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">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</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">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</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">follow</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Startup</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">fix</span><span class="plain-syntax"> </span><span class="identifier-syntax">baseline</span><span class="plain-syntax"> </span><span class="identifier-syntax">scoring</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">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>
<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">fix</span><span class="plain-syntax"> </span><span class="identifier-syntax">baseline</span><span class="plain-syntax"> </span><span class="identifier-syntax">scoring</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</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>
<span class="identifier-syntax">Startup</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">display</span><span class="plain-syntax"> </span><span class="identifier-syntax">banner</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">"[banner text]"</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">display</span><span class="plain-syntax"> </span><span class="identifier-syntax">banner</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">: </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[banner text]"</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">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>
<span class="identifier-syntax">Startup</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">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="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="SP23" class="paragraph-anchor"></a><b>&#167;23. 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
@ -719,6 +692,9 @@ read and no consequent actions generated.
<span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</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">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">early</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">stage</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">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><span class="comment-syntax">th.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">generate</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">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">rd.</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">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="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">things</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">item</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">mentioned</span><span class="plain-syntax">.</span>
<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>

View file

@ -638,12 +638,12 @@ nests, respectively.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">shared_nest_list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</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">Supervisor::internal</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.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">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</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">shared_internal_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::external</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">Supervisor::external</span></span>:<br/>Project Services - <a href="5-ps2.html#SP36_1">&#167;36.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::external</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">Supervisor::external</span></span>:<br/>Project Services - <a href="5-ps2.html#SP36_1">&#167;36.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">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</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">shared_external_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -659,7 +659,7 @@ no better indication of where they are.
<span class="plain-syntax"> </span><span class="identifier-syntax">supervisor_tools_location</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">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::default_internal_path</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">Supervisor::default_internal_path</span></span>:<br/><a href="1-ic.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::default_internal_path</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">Supervisor::default_internal_path</span></span>:<br/><a href="1-ic.html#SP18">&#167;18</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">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">supervisor_tools_location</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</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="string-syntax">"inform7"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</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="string-syntax">"Internal"</span><span class="plain-syntax">);</span>
@ -685,7 +685,7 @@ the external nest is used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::transient</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">Supervisor::transient</span></span>:<br/>Project Services - <a href="5-ps2.html#SP6">&#167;6</a><br/>The Mini-Website - <a href="7-tm.html#SP3">&#167;3</a><br/>Dictionary - <a href="7-dct.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::transient</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">Supervisor::transient</span></span>:<br/>Project Services - <a href="5-ps2.html#SP6">&#167;6</a><br/>The Mini-Website - <a href="7-tm.html#SP3">&#167;3</a><br/>Dictionary - <a href="7-dct.html#SP1">&#167;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">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">TINKERING_INBUILD_PHASE</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">shared_transient_resources</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">shared_external_nest</span><span class="plain-syntax">)</span>
@ -709,7 +709,7 @@ specify the bundle twice, or specify the file twice.
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project_bundle_request</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project_file_request</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Supervisor::set_I7_source</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">Supervisor::set_I7_source</span></span>:<br/><a href="1-ic.html#SP9">&#167;9</a></span></button><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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Supervisor::set_I7_source</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">Supervisor::set_I7_source</span></span>:<br/><a href="1-ic.html#SP9">&#167;9</a></span></button><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">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">CONFIGURATION_INBUILD_PHASE</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">project_file_request</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="identifier-syntax">project_file_request</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
@ -725,7 +725,7 @@ depending on who's asking.
</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">Supervisor::set_I7_bundle</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">Supervisor::set_I7_bundle</span></span>:<br/><a href="1-ic.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</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">Supervisor::set_I7_bundle</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">Supervisor::set_I7_bundle</span></span>:<br/><a href="1-ic.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</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">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">CONFIGURATION_INBUILD_PHASE</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">project_bundle_request</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="identifier-syntax">project_bundle_request</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">;</span>
@ -756,7 +756,7 @@ location. If it hasn't, we create a project using <span class="extract"><span cl
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chosen_project</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">Supervisor::make_project_from_command_line</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">Supervisor::make_project_from_command_line</span></span>:<br/><a href="1-ic.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Supervisor::make_project_from_command_line</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">Supervisor::make_project_from_command_line</span></span>:<br/><a href="1-ic.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_IN_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">PRETINKERING_INBUILD_PHASE</span><span class="plain-syntax">)</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="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> result of </span><span class="extract"><span class="extract-syntax">-source</span></span><span class="comment-syntax"> at the command line</span>
@ -793,7 +793,7 @@ location. If it hasn't, we create a project using <span class="extract"><span cl
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::project_set_at_command_line</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">Supervisor::project_set_at_command_line</span></span>:<br/>The Report - <a href="7-tr.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="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::project_set_at_command_line</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">Supervisor::project_set_at_command_line</span></span>:<br/>The Report - <a href="7-tr.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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">chosen_project</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -80,6 +80,7 @@ which use this module:
<span class="definition-keyword">enum</span> <span class="constant-syntax">extension_census_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">extension_census_datum_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">extension_dictionary_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">extensions_key_item_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">heading_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">heading_tree_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_copy_CLASS</span>
@ -113,6 +114,7 @@ which use this module:
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">heading_tree</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">heading</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">)</span>

View file

@ -193,7 +193,7 @@ output.
</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">CopyErrors::write</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">CopyErrors::write</span></span>:<br/>Copies - <a href="2-cps.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_4">&#167;1.1.2.1.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CopyErrors::write</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">CopyErrors::write</span></span>:<br/>Copies - <a href="2-cps.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_4">&#167;1.2.2.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</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">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">error_category</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OPEN_FAILED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"unable to open file %f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details_file</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">EXT_MISWORDED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension misworded: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -230,7 +230,7 @@ such newcomers are graphed too.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Copies::construct_project_graph</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">Copies::construct_project_graph</span></span>:<br/><a href="2-cps.html#SP12">&#167;12</a>, <a href="2-cps.html#SP13">&#167;13</a>, <a href="2-cps.html#SP14">&#167;14</a><br/>The Report - <a href="7-tr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Copies::construct_project_graph</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">Copies::construct_project_graph</span></span>:<br/><a href="2-cps.html#SP12">&#167;12</a>, <a href="2-cps.html#SP13">&#167;13</a>, <a href="2-cps.html#SP14">&#167;14</a><br/>Index Pages - <a href="7-ip.html#SP5">&#167;5</a><br/>The Report - <a href="7-tr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::building_soon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::graph_everything</span></a><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">V</span><span class="plain-syntax">;</span>

View file

@ -100,7 +100,7 @@ see below for why. Lower-tag-numbered origins are better than later ones.
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXTENSION_NEST_TAG</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">Nests::get_tag</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">Nests::get_tag</span></span>:<br/><a href="2-nst.html#SP11">&#167;11</a><br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">&#167;1</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP5">&#167;5</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Census - <a href="7-cns.html#SP2">&#167;2</a>, <a href="7-cns.html#SP3">&#167;3</a>, <a href="7-cns.html#SP5">&#167;5</a>, <a href="7-cns.html#SP7_1">&#167;7.1</a><br/>Index Pages - <a href="7-ip.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="7-ip.html#SP1_1_2_1_6_4_3">&#167;1.1.2.1.6.4.3</a><br/>The Report - <a href="7-tr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::get_tag</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">Nests::get_tag</span></span>:<br/><a href="2-nst.html#SP11">&#167;11</a><br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">&#167;1</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP5">&#167;5</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Census - <a href="7-cns.html#SP2">&#167;2</a>, <a href="7-cns.html#SP3">&#167;3</a>, <a href="7-cns.html#SP5">&#167;5</a>, <a href="7-cns.html#SP6_1">&#167;6.1</a><br/>Index Pages - <a href="7-ip.html#SP1_2_1">&#167;1.2.1</a>, <a href="7-ip.html#SP1_2_2_6_4_3">&#167;1.2.2.6.4.3</a><br/>The Report - <a href="7-tr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</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">N</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"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tag_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -151,7 +151,7 @@ can't install to a read-only nest.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</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">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</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">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Index Pages - <a href="7-ip.html#SP1_2_1">&#167;1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</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">N</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">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -213,7 +213,7 @@ genre's manager to look for copies of that genre:
</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">Nests::search_for</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">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP10">&#167;10</a><br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a><br/>Census - <a href="7-cns.html#SP7">&#167;7</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::search_for</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">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP10">&#167;10</a><br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a><br/>Census - <a href="7-cns.html#SP6">&#167;6</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</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">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STDOUT</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">supervisor_verbosity</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>

View file

@ -90,7 +90,7 @@ we can give a semantic version number range:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">VersionNumberRanges::any_range</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</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">Requirements::anything_of_genre</span></span>:<br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Census - <a href="7-cns.html#SP7">&#167;7</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</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">Requirements::anything_of_genre</span></span>:<br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Census - <a href="7-cns.html#SP6">&#167;6</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</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>

View file

@ -257,7 +257,7 @@ order-preserving. To emphasise this we return true or false rather than a
</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">Works::match</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">Works::match</span></span>:<br/><a href="2-wrk.html#SP11">&#167;11</a><br/>Headings - <a href="6-hdn.html#SP22">&#167;22</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Dictionary - <a href="7-dct.html#SP11">&#167;11</a>, <a href="7-dct.html#SP17">&#167;17</a>, <a href="7-dct.html#SP17_2">&#167;17.2</a><br/>Census - <a href="7-cns.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Works::match</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">Works::match</span></span>:<br/><a href="2-wrk.html#SP11">&#167;11</a><br/>Headings - <a href="6-hdn.html#SP22">&#167;22</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Dictionary - <a href="7-dct.html#SP11">&#167;11</a>, <a href="7-dct.html#SP17">&#167;17</a>, <a href="7-dct.html#SP17_2">&#167;17.2</a><br/>Census - <a href="7-cns.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w2</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">w1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">w2</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">"bad work match"</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">w1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inbuild_work_hash_code</span><span class="plain-syntax"> != </span><span class="identifier-syntax">w2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inbuild_work_hash_code</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">w2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</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>
@ -306,7 +306,7 @@ each extension's page is generated from its <span class="extract"><span class="e
</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">Works::begin_extension_link</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">Works::begin_extension_link</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_1">&#167;1.1.2.1.6.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rubric</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::begin_extension_link</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">Works::begin_extension_link</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_6_4_1">&#167;1.2.2.6.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rubric</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">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"href='inform:</span><span class="comment-syntax">Extensions/Extensions/");</span>
<span class="string-syntax"> Works::escape_apostrophes(link, work-&gt;author_name);</span>
@ -331,7 +331,7 @@ each extension's page is generated from its <span class="extract"><span class="e
<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">Works::end_extension_link</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">Works::end_extension_link</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_1">&#167;1.1.2.1.6.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::end_extension_link</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">Works::end_extension_link</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_6_4_1">&#167;1.2.2.6.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -111,7 +111,7 @@ compiled, is a file vertex.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Creation. </b>First, the three colours of vertex.
</p>
@ -275,7 +275,7 @@ vertex: it's used by the Inbuild command <span class="extract"><span class="extr
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unique_graph_scan_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Graphs::get_unique_graph_scan_count</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">Graphs::get_unique_graph_scan_count</span></span>:<br/>The Report - <a href="7-tr.html#SP2_5_1">&#167;2.5.1</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">Graphs::get_unique_graph_scan_count</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">Graphs::get_unique_graph_scan_count</span></span>:<br/>Index Pages - <a href="7-ip.html#SP5">&#167;5</a><br/>The Report - <a href="7-tr.html#SP2_5_1">&#167;2.5.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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">unique_graph_scan_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>

View file

@ -97,7 +97,7 @@ later on, as needed, just for extensions of interest: see below.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::path_within_nest</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">ExtensionManager::path_within_nest</span></span>:<br/><a href="4-em.html#SP6">&#167;6</a>, <a href="4-em.html#SP7">&#167;7</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Census - <a href="7-cns.html#SP3">&#167;3</a><br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_3">&#167;1.1.2.1.6.4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::path_within_nest</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">ExtensionManager::path_within_nest</span></span>:<br/><a href="4-em.html#SP6">&#167;6</a>, <a href="4-em.html#SP7">&#167;7</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Census - <a href="7-cns.html#SP3">&#167;3</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_6_4_3">&#167;1.2.2.6.4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</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">N</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">"no nest"</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">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -99,7 +99,7 @@ length to one character less than the following constants:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/dct, 7/cns, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/dct, 7/cns, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the extension genre is created.
We scan the extension file for the title, author, version number and any
compatibility notes given (such as "for Glulx only").
@ -736,7 +736,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::from_copy</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">Extensions::from_copy</span></span>:<br/><a href="5-es.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Source Text - <a href="6-st.html#SP13">&#167;13</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Dictionary - <a href="7-dct.html#SP9">&#167;9</a><br/>Census - <a href="7-cns.html#SP5">&#167;5</a>, <a href="7-cns.html#SP6">&#167;6</a><br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_4">&#167;1.1.2.1.6.4.4</a><br/>Individual Pages - <a href="7-ip2.html#SP2_1">&#167;2.1</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a>, <a href="7-tr.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::from_copy</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">Extensions::from_copy</span></span>:<br/><a href="5-es.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Source Text - <a href="6-st.html#SP13">&#167;13</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Dictionary - <a href="7-dct.html#SP9">&#167;9</a><br/>Census - <a href="7-cns.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_6_4_4">&#167;1.2.2.6.4.4</a>, <a href="7-ip.html#SP6">&#167;6</a><br/>Individual Pages - <a href="7-ip2.html#SP2_1">&#167;2.1</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a>, <a href="7-tr.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ext</span><span class="plain-syntax"> = </span><a href="4-ebm.html#SP3" class="function-link"><span class="function-syntax">ExtensionBundleManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</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">ext</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">ext</span><span class="plain-syntax"> = </span><a href="4-em.html#SP4" class="function-link"><span class="function-syntax">ExtensionManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</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">ext</span><span class="plain-syntax">;</span>
@ -806,7 +806,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sort_usage_date</span><span class="plain-syntax">, </span><span class="identifier-syntax">date</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">Extensions::get_usage_date</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">Extensions::get_usage_date</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_4">&#167;1.1.2.1.6.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_usage_date</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">last_usage_date</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -814,11 +814,11 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sort_usage_date</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">Extensions::set_word_count</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">Extensions::set_word_count</span></span>:<br/>Dictionary - <a href="7-dct.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wc</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::set_word_count</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">Extensions::set_word_count</span></span>:<br/>Dictionary - <a href="7-dct.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wc</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">Extensions::get_word_count</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">Extensions::get_word_count</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_4">&#167;1.1.2.1.6.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::get_word_count</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">Extensions::get_word_count</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_6_4_4">&#167;1.2.2.6.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -828,7 +828,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_edition</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">Extensions::compare_by_edition</span></span>:<br/>Census - <a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_edition</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</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">"bad work match"</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">d</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP10" class="function-link"><span class="function-syntax">Works::cmp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</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">d</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="identifier-syntax">d</span><span class="plain-syntax">;</span>
@ -836,14 +836,14 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</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">Extensions::compare_by_date</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">Extensions::compare_by_date</span></span>:<br/>Census - <a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_date</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</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">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::get_sort_date</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">), </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::get_sort_date</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</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">d</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="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_edition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</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">Extensions::compare_by_author</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">Extensions::compare_by_author</span></span>:<br/>Census - <a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_author</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">Extensions::compare_by_author</span></span>:<br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</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">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>
@ -851,7 +851,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_edition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</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">Extensions::compare_by_title</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">Extensions::compare_by_title</span></span>:<br/>Census - <a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_title</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">Extensions::compare_by_title</span></span>:<br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</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">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
@ -859,7 +859,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_edition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</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">Extensions::compare_by_length</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">Extensions::compare_by_length</span></span>:<br/>Census - <a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_length</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">Extensions::compare_by_length</span></span>:<br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</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">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::get_sort_word_count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">), </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::get_sort_word_count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">));</span>
@ -873,7 +873,7 @@ project, then...
</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">Extensions::set_associated_project</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">Extensions::set_associated_project</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::set_associated_project</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">Extensions::set_associated_project</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">read_into_project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -882,7 +882,7 @@ the Materials folder of the project in question:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::nest_list</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">Extensions::nest_list</span></span>:<br/><a href="5-es.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::nest_list</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">Extensions::nest_list</span></span>:<br/><a href="5-es.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">E</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><a href="1-ic.html#SP16" class="function-link"><span class="function-syntax">Supervisor::shared_nest_list</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">search_list</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
@ -902,7 +902,7 @@ features as <span class="extract"><span class="extract-syntax">E</span></span> w
</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">Extensions::activate_elements</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Extensions::activate_elements</span></span>:<br/>Project Services - <a href="5-ps2.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::activate_elements</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">Extensions::activate_elements</span></span>:<br/>Project Services - <a href="5-ps2.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">element_activation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EA</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">EA</span><span class="plain-syntax">, </span><span class="reserved-syntax">element_activation</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">activations</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::from_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">EA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">element_name</span><span class="plain-syntax">);</span>
@ -952,7 +952,7 @@ no project involved, we must take action ourselves.)
</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">Extensions::construct_graph</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">Extensions::construct_graph</span></span>:<br/>Extension Manager - <a href="4-em.html#SP8">&#167;8</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::construct_graph</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">Extensions::construct_graph</span></span>:<br/>Extension Manager - <a href="4-em.html#SP8">&#167;8</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP7" class="function-link"><span class="function-syntax">Copies::get_source_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::set_start_of_source</span><span class="plain-syntax">(</span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="6-inc.html#SP1" class="function-link"><span class="function-syntax">Inclusions::traverse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">);</span>
@ -976,7 +976,7 @@ This is that time.
</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">Extensions::read_source_text_for</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">Extensions::read_source_text_for</span></span>:<br/>Extension Manager - <a href="4-em.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::read_source_text_for</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">Extensions::read_source_text_for</span></span>:<br/>Extension Manager - <a href="4-em.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP10" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">, </span><a href="5-es.html#SP7" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="5-ls.html#SP8" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><a href="5-es.html#SP7" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</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><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::main_source_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
@ -1070,7 +1070,7 @@ and no documentation.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::get_documentation_text</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_documentation_text</span></span>:<br/>Individual Pages - <a href="7-ip2.html#SP2_2_1_5">&#167;2.2.1.5</a>, <a href="7-ip2.html#SP2_2_1_6">&#167;2.2.1.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::get_documentation_text</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_documentation_text</span></span>:<br/>Individual Pages - <a href="7-ip2.html#SP2_2_1_5">&#167;2.2.1.5</a>, <a href="7-ip2.html#SP2_2_1_6">&#167;2.2.1.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">E</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP7" class="function-link"><span class="function-syntax">Copies::get_source_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">); </span><span class="comment-syntax"> in the unlikely event this has not happened yet</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation_sought</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
@ -1106,7 +1106,7 @@ make use of that:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::corresponding_to</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Extensions::corresponding_to</span></span>:<br/>Source Text - <a href="6-st.html#SP4">&#167;4</a>, <a href="6-st.html#SP5">&#167;5</a><br/>Headings - <a href="6-hdn.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::corresponding_to</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">Extensions::corresponding_to</span></span>:<br/>Source Text - <a href="6-st.html#SP4">&#167;4</a>, <a href="6-st.html#SP5">&#167;5</a><br/>Headings - <a href="6-hdn.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</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">sf</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">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">your_ref</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">C</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>
@ -1148,7 +1148,7 @@ that happens, the following function will be called to set the rubric.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTENSIONS_CENSUS</span><span class="plain-syntax">, </span><span class="string-syntax">"Extension rubric: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</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">Extensions::get_rubric</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_rubric</span></span>:<br/>Census - <a href="7-cns.html#SP5">&#167;5</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_rubric</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">Extensions::get_rubric</span></span>:<br/>Census - <a href="7-cns.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">E</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -1186,10 +1186,10 @@ problem messages and the index.
</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">Extensions::set_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Extensions::set_inclusion_sentence</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::set_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Extensions::set_inclusion_sentence</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inclusion_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</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">Extensions::get_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_inclusion_sentence</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Inclusions - <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_inclusion_sentence</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Inclusions - <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">E</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inclusion_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -1210,7 +1210,7 @@ becomes empty and stays that way.
</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">Extensions::must_satisfy</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Extensions::must_satisfy</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::must_satisfy</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Extensions::must_satisfy</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</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">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">must_satisfy</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">req</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">VersionNumberRanges::intersect_range</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -1221,7 +1221,7 @@ its requirements (even though it did when first loaded). This tests for 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">Extensions::satisfies</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Extensions::satisfies</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::satisfies</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Extensions::satisfies</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</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">E</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="2-rqr.html#SP7" class="function-link"><span class="function-syntax">Requirements::meets</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -1229,7 +1229,7 @@ its requirements (even though it did when first loaded). This tests for that:
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. File hierarchy tidying. </b></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">Extensions::rename_directory</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_directory</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_directory</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_directory</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</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">task</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="string-syntax">"(Changing directory name '%p' to '%S')\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</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">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::rename</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</span><span class="plain-syntax">);</span>
@ -1237,7 +1237,7 @@ its requirements (even though it did when first loaded). This tests for that:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</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">Extensions::rename_file</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_file</span></span>:<br/><a href="5-es.html#SP2_2">&#167;2.2</a></span></button><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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_file</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_file</span></span>:<br/><a href="5-es.html#SP2_2">&#167;2.2</a></span></button><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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</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">task</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="string-syntax">"(Changing file name '%f' to '%S')\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</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">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::rename</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</span><span class="plain-syntax">);</span>

View file

@ -100,7 +100,7 @@ module of <span class="extract"><span class="extract-syntax">inform7</span></spa
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Kits come with an "if this then that" service for including other kits,
and we represent rules with the following:
</p>

View file

@ -90,7 +90,7 @@ small resource folder called its "bundle". (This includes English.)
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>

View file

@ -291,7 +291,7 @@ is small, but one likes to minimise the effect of the CWD.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-ic.html#SP19" class="function-link"><span class="function-syntax">Supervisor::transient</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_nest</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">Projects::materials_nest</span></span>:<br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_nest</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">Projects::materials_nest</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a>, <a href="7-ip.html#SP1_2_1">&#167;1.2.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</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">proj</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">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -59,7 +59,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Census</b></li></ul></div>
<p class="purpose">To conduct a census of all installed extensions installed.</p>
<ul class="toc"><li><a href="7-cns.html#SP1">&#167;1. Beginning</a></li><li><a href="7-cns.html#SP4">&#167;4. Census data</a></li><li><a href="7-cns.html#SP7">&#167;7. Performing the census</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="7-cns.html#SP1">&#167;1. Beginning</a></li><li><a href="7-cns.html#SP4">&#167;4. Census data</a></li><li><a href="7-cns.html#SP6">&#167;6. Performing the census</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Beginning. </b>Each census begins by creating an object:
</p>
@ -73,13 +73,13 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">extension_census</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure extension_census is accessed in 5/es, 5/ps2, 7/ip and here.</li></ul>
<ul class="endnotetexts"><li>The structure extension_census is accessed in 5/es, 5/ps2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Here <span class="extract"><span class="extract-syntax">proj</span></span> will be null in case (a), and will be the project just
compiled in case (b).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::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">ExtensionCensus::new</span></span>:<br/><a href="7-cns.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::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">ExtensionCensus::new</span></span>:<br/><a href="7-cns.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
@ -104,7 +104,7 @@ shared search path, for (b) the project's search path.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::internal_path</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">ExtensionCensus::internal_path</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="7-ip.html#SP1_1_2_1_6_2_2">&#167;1.1.2.1.6.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::internal_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">search_list</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-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">)</span>
@ -112,7 +112,7 @@ shared search path, for (b) the project's search path.
<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="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::external_path</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">ExtensionCensus::external_path</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="7-ip.html#SP1_1_2_1_6_2_2">&#167;1.1.2.1.6.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::external_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">search_list</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-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">) == </span><span class="constant-syntax">EXTERNAL_NEST_TAG</span><span class="plain-syntax">)</span>
@ -132,83 +132,35 @@ is created. (These are called ECDs below.)
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure extension_census_datum is accessed in 6/hdn, 6/inc, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
<ul class="endnotetexts"><li>The structure extension_census_datum is accessed in 6/hdn, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>An ECD is actually a wrapper for an <a href="5-es.html#SP1" class="internal">inform_extension</a> object in disguise,
since the <a href="2-nst.html#SP7" class="internal">inbuild_search_result</a> found that.
</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">ExtensionCensus::ecd_rubric</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">ExtensionCensus::ecd_rubric</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_4_1">&#167;1.1.2.1.6.4.1</a>, <a href="7-ip.html#SP1_1_2_1_6_4_4">&#167;1.1.2.1.6.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::ecd_rubric</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP14" class="function-link"><span class="function-syntax">Extensions::get_rubric</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">ExtensionCensus::installation_region</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">ExtensionCensus::installation_region</span></span>:<br/><a href="7-cns.html#SP6">&#167;6</a><br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_2">&#167;1.1.2.1.6.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionCensus::installation_region</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</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-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">MATERIALS_NEST_TAG</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><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</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">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">overriding_a_built_in_extension</span><span class="plain-syntax">) </span><span class="reserved-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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">3</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">ExtensionCensus::ecd_used</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">ExtensionCensus::ecd_used</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_6_2_1">&#167;1.1.2.1.6.2.1</a>, <a href="7-ip.html#SP1_1_2_1_6_4_1">&#167;1.1.2.1.6.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionCensus::ecd_used</span><span class="plain-syntax">(</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">has_historically_been_used</span><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>The following give some sorting criteria, and are functions fit to be
handed to <span class="extract"><span class="extract-syntax">qsort</span></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">ExtensionCensus::compare_ecd_by_title</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">ExtensionCensus::compare_ecd_by_title</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_5">&#167;1.1.2.1.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_title</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">, </span><span class="identifier-syntax">E1</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">ExtensionCensus::compare_ecd_by_author</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">ExtensionCensus::compare_ecd_by_author</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_5">&#167;1.1.2.1.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_author</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">, </span><span class="identifier-syntax">E1</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">ExtensionCensus::compare_ecd_by_installation</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">ExtensionCensus::compare_ecd_by_installation</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_5">&#167;1.1.2.1.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd2</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">d</span><span class="plain-syntax"> = </span><a href="7-cns.html#SP5" class="function-link"><span class="function-syntax">ExtensionCensus::installation_region</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">) -</span>
<span class="plain-syntax"> </span><a href="7-cns.html#SP5" class="function-link"><span class="function-syntax">ExtensionCensus::installation_region</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</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">d</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="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_edition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</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">ExtensionCensus::compare_ecd_by_date</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">ExtensionCensus::compare_ecd_by_date</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_5">&#167;1.1.2.1.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_date</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</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">ExtensionCensus::compare_ecd_by_length</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">ExtensionCensus::compare_ecd_by_length</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2_1_5">&#167;1.1.2.1.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">extension_census_datum</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ecd2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">found_as</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Performing the census. </b>For some reason a census often makes a good story (cf. Luke 2:1-5), but here
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Performing the census. </b>For some reason a census often makes a good story (cf. Luke 2:1-5), but here
there's disappointingly little to tell, because the work is all done by a
single call to <a href="2-nst.html#SP9" class="internal">Nests::search_for</a>.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::perform</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">ExtensionCensus::perform</span></span>:<br/>The Mini-Website - <a href="7-tm.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionCensus::perform</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">ExtensionCensus::perform</span></span>:<br/>The Mini-Website - <a href="7-tm.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="7-cns.html#SP2" class="function-link"><span class="function-syntax">ExtensionCensus::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::anything_of_genre</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-nst.html#SP9" class="function-link"><span class="function-syntax">Nests::search_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_data</span><span class="plain-syntax">);</span>
@ -217,19 +169,19 @@ single call to <a href="2-nst.html#SP9" class="internal">Nests::search_for</a>.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_data</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">no_census_errors</span><span class="plain-syntax"> += </span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</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">overridden_by_an_extension_already_found</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="7-cns.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">See if already known from existing data</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-cns.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">See if already known from existing data</span><span class="named-paragraph-number">6.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">overridden_by_an_extension_already_found</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="7-cns.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Add to the census data</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-cns.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Add to the census data</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b>Recall that the higher-priority materials and external nests are scanned
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b>Recall that the higher-priority materials and external nests are scanned
first, so if we find that our new extension has the same title and author as
one already known, it must be one that is overridden.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if already known from existing data</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if already known from existing data</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -243,14 +195,14 @@ one already known, it must be one that is overridden.
<span class="plain-syntax"> </span><span class="identifier-syntax">overridden_by_an_extension_already_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-cns.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b>Assuming the new extension was not overridden in this way, we come here.
<ul class="endnotetexts"><li>This code is used in <a href="7-cns.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>Assuming the new extension was not overridden in this way, we come here.
Because we didn't check the version number text for validity, it might
through being invalid be longer than we expect: in case this is so, we
truncate it.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to the census data</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to the census data</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -259,7 +211,7 @@ truncate it.
<span class="plain-syntax"> </span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">overriding_a_built_in_extension</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">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</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="7-cns.html#SP7">&#167;7</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="7-cns.html#SP6">&#167;6</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dct.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-dct.html">dct</a></li><li class="progresscurrent">cns</li><li class="progresssection"><a href="7-ip.html">ip</a></li><li class="progresssection"><a href="7-ip2.html">ip2</a></li><li class="progresssection"><a href="7-tr.html">tr</a></li><li class="progressnext"><a href="7-ip.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -143,7 +143,7 @@ record marked "to be erased" will not be saved back to the file in due course.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure extension_dictionary_entry is accessed in 3/bg, 3/ib, 5/ks, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure extension_dictionary_entry is accessed in 3/bg, 3/ib, 5/ks, 7/ip, 7/tr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
@ -517,7 +517,7 @@ fact, the HTML rendering of the dictionary constructed above.
</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">ExtensionDictionary::write_to_HTML</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">ExtensionDictionary::write_to_HTML</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_1_2">&#167;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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionDictionary::write_to_HTML</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">n</span><span class="plain-syntax"> = </span><a href="7-dct.html#SP12" class="function-link"><span class="function-syntax">ExtensionDictionary::sort_extension_dictionary</span></a><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">n</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_letter</span><span class="plain-syntax"> = </span><span class="character-syntax">'a'</span><span class="plain-syntax">;</span>
@ -592,7 +592,7 @@ extension lexicographically earlier than the second (the right one).
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">known_extension_clash</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionDictionary::new_clash</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">ExtensionDictionary::new_clash</span></span>:<br/><a href="7-dct.html#SP17">&#167;17</a>, <a href="7-dct.html#SP17_2">&#167;17.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">known_extension_clash</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionDictionary::new_clash</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">ExtensionDictionary::new_clash</span></span>:<br/><a href="7-dct.html#SP17">&#167;17</a>, <a href="7-dct.html#SP17_2">&#167;17.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_known_flag</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">known_extension_clash</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">known_extension_clash</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kec</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">leftx</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
@ -655,7 +655,7 @@ not seem to have arisen from homonyms like "lead" (the substance) versus
</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">ExtensionDictionary::extension_clash</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">ExtensionDictionary::extension_clash</span></span>:<br/><a href="7-dct.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ede1</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionDictionary::extension_clash</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">ExtensionDictionary::extension_clash</span></span>:<br/><a href="7-dct.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ede1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ede2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">right</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">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leftx</span><span class="plain-syntax">, *</span><span class="identifier-syntax">rightx</span><span class="plain-syntax">;</span>
@ -727,7 +727,7 @@ clashes in a concise, human-readable way, which is what we now do.
</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">ExtensionDictionary::list_known_extension_clashes</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">ExtensionDictionary::list_known_extension_clashes</span></span>:<br/><a href="7-dct.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionDictionary::list_known_extension_clashes</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">ExtensionDictionary::list_known_extension_clashes</span></span>:<br/><a href="7-dct.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">known_extension_clash</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kec</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">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">known_extension_clash</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="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dct.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Write the headnote about what extension clashes mean</span><span class="named-paragraph-number">18.1</span></a></span><span class="plain-syntax">;</span>

File diff suppressed because it is too large Load diff

View file

@ -214,8 +214,7 @@ our E, and return 0 in response to the ECD call to prevent further ECD calls.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compatibility</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">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S&amp;nbsp;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::write_icons</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ip2.html#SP2_2_1">&#167;2.2.1</a>.</li></ul>

View file

@ -110,7 +110,7 @@ same either way. Here are the functions for (a) and (b) respectively:
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::go</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">force_update</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dct.html#SP8" class="function-link"><span class="function-syntax">ExtensionDictionary::read_from_file</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extension_census</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="7-cns.html#SP7" class="function-link"><span class="function-syntax">ExtensionCensus::perform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-cns.html#SP6" class="function-link"><span class="function-syntax">ExtensionCensus::perform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Time-stamp extensions used in the project as being last used today</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Write index pages</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Write individual pages on individual extensions</span><span class="named-paragraph-number">2.3</span></a></span><span class="plain-syntax">;</span>
@ -140,9 +140,7 @@ documentation as used today until the next run, for obscure timing reasons.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-ip.html#SP1" class="function-link"><span class="function-syntax">ExtensionIndex::write</span></a><span class="plain-syntax">(</span><a href="7-tm.html#SP4" class="function-link"><span class="function-syntax">ExtensionWebsite::index_URL</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions.html"</span><span class="plain-syntax">), </span><span class="constant-syntax">HOME_EXTPAGE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-ip.html#SP1" class="function-link"><span class="function-syntax">ExtensionIndex::write</span></a><span class="plain-syntax">(</span><a href="7-tm.html#SP4" class="function-link"><span class="function-syntax">ExtensionWebsite::index_URL</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ExtIndex.html"</span><span class="plain-syntax">), </span><span class="constant-syntax">INDEX_EXTPAGE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ip.html#SP1" class="function-link"><span class="function-syntax">ExtensionIndex::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-tm.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>&#167;2.3. </b>Each extension gets its own page in the external documentation area, but
@ -220,7 +218,7 @@ in the same area but not as part of the site.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::index_URL</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">ExtensionWebsite::index_URL</span></span>:<br/><a href="7-tm.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::index_URL</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">ExtensionWebsite::index_URL</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="7-tm.html#SP3" class="function-link"><span class="function-syntax">ExtensionWebsite::home_URL</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</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">P</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">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>

View file

@ -21,6 +21,7 @@ which use this module:
@e extension_census_CLASS
@e extension_census_datum_CLASS
@e extension_dictionary_entry_CLASS
@e extensions_key_item_CLASS
@e heading_CLASS
@e heading_tree_CLASS
@e inbuild_copy_CLASS
@ -54,6 +55,7 @@ DECLARE_CLASS(element_activation)
DECLARE_CLASS(extension_census_datum)
DECLARE_CLASS(extension_census)
DECLARE_CLASS(extension_dictionary_entry)
DECLARE_CLASS(extensions_key_item)
DECLARE_CLASS(heading_tree)
DECLARE_CLASS(heading)
DECLARE_CLASS(inbuild_copy)

View file

@ -232,7 +232,7 @@ each extension's page is generated from its |inbuild_work|.
=
void Works::begin_extension_link(OUTPUT_STREAM, inbuild_work *work, text_stream *rubric) {
TEMPORARY_TEXT(link)
WRITE_TO(link, "href='inform://Extensions/Extensions/");
WRITE_TO(link, "href='inform://Extensions/Documentation/");
Works::escape_apostrophes(link, work->author_name);
WRITE_TO(link, "/");
Works::escape_apostrophes(link, work->title);

View file

@ -90,53 +90,6 @@ int ExtensionCensus::ecd_used(extension_census_datum *ecd) {
return E->has_historically_been_used;
}
@ The following give some sorting criteria, and are functions fit to be
handed to |qsort|.
=
int ExtensionCensus::compare_ecd_by_title(const void *ecd1, const void *ecd2) {
extension_census_datum *e1 = *((extension_census_datum **) ecd1);
extension_census_datum *e2 = *((extension_census_datum **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->found_as->copy);
inform_extension *E2 = Extensions::from_copy(e2->found_as->copy);
return Extensions::compare_by_title(E2, E1);
}
int ExtensionCensus::compare_ecd_by_author(const void *ecd1, const void *ecd2) {
extension_census_datum *e1 = *((extension_census_datum **) ecd1);
extension_census_datum *e2 = *((extension_census_datum **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->found_as->copy);
inform_extension *E2 = Extensions::from_copy(e2->found_as->copy);
return Extensions::compare_by_author(E2, E1);
}
int ExtensionCensus::compare_ecd_by_installation(const void *ecd1, const void *ecd2) {
extension_census_datum *e1 = *((extension_census_datum **) ecd1);
extension_census_datum *e2 = *((extension_census_datum **) ecd2);
int d = ExtensionCensus::installation_region(e1) -
ExtensionCensus::installation_region(e2);
if (d != 0) return d;
inform_extension *E1 = Extensions::from_copy(e1->found_as->copy);
inform_extension *E2 = Extensions::from_copy(e2->found_as->copy);
return Extensions::compare_by_edition(E1, E2);
}
int ExtensionCensus::compare_ecd_by_date(const void *ecd1, const void *ecd2) {
extension_census_datum *e1 = *((extension_census_datum **) ecd1);
extension_census_datum *e2 = *((extension_census_datum **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->found_as->copy);
inform_extension *E2 = Extensions::from_copy(e2->found_as->copy);
return Extensions::compare_by_date(E1, E2);
}
int ExtensionCensus::compare_ecd_by_length(const void *ecd1, const void *ecd2) {
extension_census_datum *e1 = *((extension_census_datum **) ecd1);
extension_census_datum *e2 = *((extension_census_datum **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->found_as->copy);
inform_extension *E2 = Extensions::from_copy(e2->found_as->copy);
return Extensions::compare_by_length(E1, E2);
}
@h Performing the census.
For some reason a census often makes a good story (cf. Luke 2:1-5), but here
there's disappointingly little to tell, because the work is all done by a

View file

@ -2,25 +2,40 @@
To generate the two top-level pages in the extension mini-website.
@h Writing the extensions home pages.
There are two of these, both with the same surround:
@e HOME_EXTPAGE from 1
@e INDEX_EXTPAGE
@h Writing the extensions home page.
There were once two of these, but now there's just one.
=
void ExtensionIndex::write(filename *F, int content, extension_census *C) {
void ExtensionIndex::write(inform_project *proj) {
filename *F = ExtensionWebsite::index_URL(proj, I"Extensions.html");
if (F == NULL) return;
linked_list *L = NEW_LINKED_LIST(inbuild_search_result);
linked_list *U = NEW_LINKED_LIST(inbuild_copy);
linked_list *R = NEW_LINKED_LIST(inbuild_requirement);
@<See what we have installed and used@>;
text_stream HOMEPAGE_struct;
text_stream *OUT = &HOMEPAGE_struct;
if (STREAM_OPEN_TO_FILE(OUT, F, UTF8_ENC) == FALSE) return;
InformPages::header(OUT, I"Extensions", JAVASCRIPT_FOR_EXTENSIONS_IRES, NULL);
@<Write the body of the HTML@>;
InformPages::footer(OUT);
STREAM_CLOSE(OUT);
}
@<See what we have installed and used@> =
linked_list *search_list = NEW_LINKED_LIST(inbuild_nest);
inbuild_nest *materials = Projects::materials_nest(proj);
if (materials) ADD_TO_LINKED_LIST(materials, inbuild_nest, search_list);
inbuild_nest *internal = Supervisor::internal();
if (internal) ADD_TO_LINKED_LIST(internal, inbuild_nest, search_list);
if (LinkedLists::len(search_list) > 0) {
inbuild_requirement *req = Requirements::anything_of_genre(extension_bundle_genre);
Nests::search_for(req, search_list, L);
}
ExtensionIndex::find_used_extensions(proj, U, R);
@<Write the body of the HTML@> =
HTML::begin_html_table(OUT, NULL, TRUE, 0, 4, 0, 0, 0);
HTML::first_html_column(OUT, 0);
@ -31,186 +46,132 @@ void ExtensionIndex::write(filename *F, int content, extension_census *C) {
HTML_OPEN_WITH("div", "class=\"headingpanellayout headingpanelalt\"");
HTML_OPEN_WITH("div", "class=\"headingtext\"");
HTML::begin_span(OUT, I"headingpaneltextalt");
WRITE("Installed Extensions");
WRITE("Extensions in this Project");
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_OPEN_WITH("div", "class=\"headingrubric\"");
HTML::begin_span(OUT, I"headingpanelrubricalt");
WRITE("Bundles of extra rules or phrases to extend what Inform can do");
WRITE("Those installed and those used");
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_CLOSE("div");
@<Write the heading details text for the page@>;
@<Display the location of installed extensions@>;
HTML::end_html_row(OUT);
HTML::end_html_table(OUT);
HTML_TAG("hr");
@<Write the main content for the page@>;
@<Write the heading details text for the page@> =
switch (content) {
case HOME_EXTPAGE:
@<Display the location of installed extensions@>;
@<Display a warning about any census errors which turned up@>;
break;
case INDEX_EXTPAGE:
HTML_OPEN("p");
WRITE("Whenever an extension is used, its definitions are entered into the "
"following index. (Thus, a newly installed but never-used extension "
"is not indexed yet.).");
HTML_CLOSE("p");
break;
}
@<Write the main content for the page@> =
switch (content) {
case HOME_EXTPAGE: @<Display an alphabetised directory@>; break;
case INDEX_EXTPAGE: ExtensionDictionary::write_to_HTML(OUT); break;
}
HTML_OPEN("p");
HTML_OPEN("b");
WRITE("The project '%S' currently uses...", proj->as_copy->edition->work->title);
HTML_CLOSE("b");
HTML_CLOSE("p");
int usage_state = TRUE;
@<Display an alphabetised directory@>;
HTML_TAG("hr");
HTML_OPEN("p");
HTML_OPEN("b");
WRITE("These are available, but are not used by '%S'...", proj->as_copy->edition->work->title);
HTML_CLOSE("b");
HTML_CLOSE("p");
usage_state = FALSE;
@<Display an alphabetised directory@>;
@ From here on, then, all the code in this section generates the main directory
page, not the index of terms, which is all handled by
//ExtensionDictionary::write_to_HTML//.
@<Display the location of installed extensions@> =
int nps = 0, nbi = 0, ni = 0;
extension_census_datum *ecd;
LOOP_OVER(ecd, extension_census_datum) {
if (Nests::get_tag(ecd->found_as->nest) == MATERIALS_NEST_TAG) nps++;
else if (Nests::get_tag(ecd->found_as->nest) == INTERNAL_NEST_TAG) nbi++;
else ni++;
int nbi = 0, nps = 0;
inbuild_search_result *ecd;
LOOP_OVER_LINKED_LIST(ecd, inbuild_search_result, L) {
if (Nests::get_tag(ecd->nest) == INTERNAL_NEST_TAG) nbi++;
else nps++;
}
HTML_OPEN("p");
pathname *P = Nests::get_location(Projects::materials_nest(proj));
P = Pathnames::down(P, I"Extensions");
PasteButtons::open_file(OUT, P, NULL, PROJECT_SPECIFIC_SYMBOL);
WRITE("&nbsp;");
if (nps > 0) {
WRITE("%d extension%s installed in the .materials folder for the "
"project '%S'. (Click the purple folder icon to show the location.)",
nps, (nps==1)?" is":"s are", proj->as_copy->edition->work->title);
} else {
WRITE("No extensions are installed in the .materials folder for the "
"project '%S'. (Click the purple folder icon to show the location. "
"Extensions should be put in the 'Extensions' subfolder of this: you "
"can put them there yourself, or use the Inform app to install them "
"for you.)", proj->as_copy->edition->work->title);
}
HTML_CLOSE("p");
HTML_OPEN("p");
HTML_TAG_WITH("img", "src='inform:/doc_images/builtin_ext.png' border=0");
WRITE("&nbsp;You have "
"%d extensions built-in to this copy of Inform, marked with a grey folder "
"icon in the catalogue below.",
nbi);
WRITE("&nbsp;");
WRITE("As well as being able to use extensions installed into its own folder, "
"any project can use extensions which come built into the Inform app. There "
"are currently %d.", nbi);
HTML_CLOSE("p");
HTML_OPEN("p");
if (ni == 0) {
HTML_TAG_WITH("img", "src='inform:/doc_images/folder4.png' border=0");
WRITE("&nbsp;You have no other extensions installed at present.");
} else {
#ifdef INDEX_MODULE
PasteButtons::open_file(OUT, ExtensionCensus::external_path(C), NULL,
"src='inform:/doc_images/folder4.png' border=0");
#endif
WRITE("&nbsp;You have %d further extension%s installed. These are marked "
"with a blue folder icon in the catalogue below. (Click it to see "
"where the file is stored on your computer.) "
"For more extensions, visit <b>www.inform7.com</b>.",
ni, (ni==1)?"":"s");
}
HTML_CLOSE("p");
if (nps > 0) {
HTML_OPEN("p");
#ifdef INDEX_MODULE
PasteButtons::open_file(OUT, ExtensionCensus::internal_path(C),
NULL, PROJECT_SPECIFIC_SYMBOL);
#endif
WRITE("&nbsp;You have %d extension%s in the .materials folder for the "
"current project. (Click the purple folder icon to show the "
"location.) %s not available to other projects.",
nps, (nps==1)?"":"s", (nps==1)?"This is":"These are");
HTML_CLOSE("p");
}
@ We sometimes position a warning prominently at the top of the listing,
because otherwise its position at the bottom will be invisible unless the user
scrolls a long way:
@<Display a warning about any census errors which turned up@> =
if ((C->no_census_errors > 0) &&
(NUMBER_CREATED(extension_census_datum) >= 20)) { /* it's a short page anyway */
HTML_OPEN("p");
HTML_TAG_WITH("img", "border=0 src=inform:/doc_images/misinstalled.png");
WRITE("&nbsp;"
"<b>Warning</b>. One or more extensions are installed incorrectly: "
"see details below.");
HTML_CLOSE("p");
}
@ The following is an alphabetised directory of extensions by author and then
title, along with some useful information about them, and then a list of
any oddities found in the external extensions area.
@<Display an alphabetised directory@> =
int key_vms = FALSE, key_override = FALSE, key_builtin = FALSE,
key_pspec = FALSE, key_bullet = FALSE;
@<Display the census radio buttons@>;
int no_entries = NUMBER_CREATED(extension_census_datum);
extension_census_datum **sorted_census_results = Memory::calloc(no_entries,
sizeof(extension_census_datum *), EXTENSION_DICTIONARY_MREASON);
for (int d=1; d<=5; d++) {
linked_list *key_list = NEW_LINKED_LIST(extensions_key_item);
if (usage_state == FALSE) @<Display the census radio buttons@>;
int no_entries = LinkedLists::len(L);
inbuild_search_result **sorted_census_results = Memory::calloc(no_entries,
sizeof(inbuild_search_result *), EXTENSION_DICTIONARY_MREASON);
for (int d=((usage_state)?4:1); d<=((usage_state)?4:3); d++) {
@<Start an HTML division for this sorted version of the census@>;
int no_entries_in_set = 0;
@<Sort the census into the appropriate order@>;
@<Display the sorted version of the census@>;
@<Print the key to any symbols used in the census lines@>;
@<Transcribe any census errors@>;
HTML_CLOSE("div");
}
@<Print the key to any symbols used in the census lines@>;
@<Transcribe any census errors@>;
Memory::I7_array_free(sorted_census_results, EXTENSION_DICTIONARY_MREASON,
no_entries, sizeof(extension_census_datum *));
no_entries, sizeof(inbuild_search_result *));
@ I am the first to admit that this implementation is not inspired. There
are five radio buttons, and number 2 is selected by default.
are three radio buttons, and number 1 is selected by default.
@<Display the census radio buttons@> =
HTML_OPEN("p");
WRITE("Sort catalogue: ");
WRITE("Sort this list: ");
HTML_OPEN_WITH("a",
"href=\"#\" style=\"text-decoration: none\" "
"onclick=\"openExtra('disp1', 'plus1'); closeExtra('disp2', 'plus2'); "
"closeExtra('disp3', 'plus3'); closeExtra('disp4', 'plus4'); "
"closeExtra('disp5', 'plus5'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus1\" src=inform:/doc_images/extrarboff.png");
"closeExtra('disp3', 'plus3'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus1\" src=inform:/doc_images/extrarbon.png");
WRITE("&nbsp;By title");
HTML_CLOSE("a");
WRITE(" | ");
HTML_OPEN_WITH("a",
"href=\"#\" style=\"text-decoration: none\" "
"onclick=\"closeExtra('disp1', 'plus1'); openExtra('disp2', 'plus2'); "
"closeExtra('disp3', 'plus3'); closeExtra('disp4', 'plus4'); "
"closeExtra('disp5', 'plus5'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus2\" src=inform:/doc_images/extrarbon.png");
"closeExtra('disp3', 'plus3'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus2\" src=inform:/doc_images/extrarboff.png");
WRITE("&nbsp;By author");
HTML_CLOSE("a");
WRITE(" | ");
HTML_OPEN_WITH("a",
"href=\"#\" style=\"text-decoration: none\" "
"onclick=\"closeExtra('disp1', 'plus1'); closeExtra('disp2', 'plus2'); "
"openExtra('disp3', 'plus3'); closeExtra('disp4', 'plus4'); "
"closeExtra('disp5', 'plus5'); return false;\"");
"openExtra('disp3', 'plus3'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus3\" src=inform:/doc_images/extrarboff.png");
WRITE("&nbsp;By installation");
HTML_CLOSE("a");
WRITE(" | ");
HTML_OPEN_WITH("a",
"href=\"#\" style=\"text-decoration: none\" "
"onclick=\"closeExtra('disp1', 'plus1'); closeExtra('disp2', 'plus2'); "
"closeExtra('disp3', 'plus3'); openExtra('disp4', 'plus4'); "
"closeExtra('disp5', 'plus5'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus4\" src=inform:/doc_images/extrarboff.png");
WRITE("&nbsp;By date used");
HTML_CLOSE("a");
WRITE(" | ");
HTML_OPEN_WITH("a",
"href=\"#\" style=\"text-decoration: none\" "
"onclick=\"closeExtra('disp1', 'plus1'); closeExtra('disp2', 'plus2'); "
"closeExtra('disp3', 'plus3'); closeExtra('disp4', 'plus4'); "
"openExtra('disp5', 'plus5'); return false;\"");
HTML_TAG_WITH("img", "border=0 id=\"plus5\" src=inform:/doc_images/extrarboff.png");
WRITE("&nbsp;By word count");
WRITE("&nbsp;By location");
HTML_CLOSE("a");
HTML_CLOSE("p");
@ Consequently, of the five divisions, number 2 is shown and the others
@ Consequently, of the three divisions, number 1 is shown and the others
hidden, by default.
@<Start an HTML division for this sorted version of the census@> =
char *display = "none";
if (d == SORT_CE_BY_AUTHOR) display = "block";
if ((d == SORT_CE_BY_TITLE) || (d == SORT_CE_BY_USAGE)) display = "block";
HTML_OPEN_WITH("div", "id=\"disp%d\" style=\"display: %s;\"", d, display);
@ The key at the foot only explicates those symbols actually used, and
@ -218,30 +179,13 @@ doesn't explicate the "unindexed" symbol at all, since that's actually
just a blank image used for horizontal spacing to keep margins straight.
@<Print the key to any symbols used in the census lines@> =
if ((key_builtin) || (key_override) || (key_bullet) || (key_vms) || (key_pspec)) {
if (LinkedLists::len(key_list) > 0) {
HTML_OPEN("p");
WRITE("Key: ");
if (key_bullet) {
HTML_TAG_WITH("img", "%s", INDEXED_SYMBOL);
WRITE(" Used&nbsp;");
}
if (key_builtin) {
HTML_TAG_WITH("img", "%s", BUILT_IN_SYMBOL);
WRITE(" Built in&nbsp;");
}
if (key_pspec) {
HTML_TAG_WITH("img", "%s", PROJECT_SPECIFIC_SYMBOL);
WRITE(" Project specific&nbsp;");
}
if (key_override) {
HTML_TAG_WITH("img", "%s", OVERRIDING_SYMBOL);
WRITE(" Your version overrides the one built in&nbsp;");
}
if (key_vms) {
#ifdef CORE_MODULE
HTML_TAG("br");
ExtensionIndex::write_key(OUT);
#endif
extensions_key_item *eki;
LOOP_OVER_LINKED_LIST(eki, extensions_key_item, key_list) {
HTML_TAG_WITH("img", "%S", eki->image_URL);
WRITE("&nbsp;%S &nbsp;&nbsp;", eki->gloss);
}
HTML_CLOSE("p");
}
@ -250,25 +194,32 @@ just a blank image used for horizontal spacing to keep margins straight.
of extensions found by the census:
@<Transcribe any census errors@> =
if (C->no_census_errors > 0) {
int no_census_errors = 0;
for (int i=0; i<no_entries_in_set; i++) {
inbuild_search_result *ecd = sorted_census_results[i];
no_census_errors +=
LinkedLists::len(ecd->copy->errors_reading_source_text);
}
if (no_census_errors > 0) {
@<Include the headnote explaining what census errors are@>;
inbuild_search_result *R;
LOOP_OVER_LINKED_LIST(R, inbuild_search_result, C->raw_data)
if (LinkedLists::len(R->copy->errors_reading_source_text) > 0) {
for (int i=0; i<no_entries_in_set; i++) {
inbuild_search_result *ecd = sorted_census_results[i];
if (LinkedLists::len(ecd->copy->errors_reading_source_text) > 0) {
copy_error *CE;
LOOP_OVER_LINKED_LIST(CE, copy_error,
R->copy->errors_reading_source_text) {
ecd->copy->errors_reading_source_text) {
#ifdef INDEX_MODULE
HTML::open_indented_p(OUT, 2, "hanging");
#endif
#ifndef INDEX_MODULE
HTML_OPEN("p");
#endif
WRITE("<b>%X</b> - ", R->copy->edition->work);
WRITE("<b>%X</b> - ", ecd->copy->edition->work);
CopyErrors::write(OUT, CE);
HTML_CLOSE("p");
}
}
}
}
@ We only want to warn people here: not to stop them from using Inform
@ -293,25 +244,32 @@ until they put matters right.
@d SORT_CE_BY_TITLE 1
@d SORT_CE_BY_AUTHOR 2
@d SORT_CE_BY_INSTALL 3
@d SORT_CE_BY_DATE 4
@d SORT_CE_BY_LENGTH 5
@d SORT_CE_BY_LOCATION 3
@d SORT_CE_BY_USAGE 4
@<Sort the census into the appropriate order@> =
int i = 0;
extension_census_datum *ecd;
LOOP_OVER(ecd, extension_census_datum)
sorted_census_results[i++] = ecd;
inbuild_search_result *ecd;
LOOP_OVER_LINKED_LIST(ecd, inbuild_search_result, L) {
int found = FALSE;
inbuild_copy *C;
LOOP_OVER_LINKED_LIST(C, inbuild_copy, U)
if (C == ecd->copy) {
found = TRUE;
break;
}
if (found == usage_state) sorted_census_results[i++] = ecd;
}
no_entries_in_set = i;
int (*criterion)(const void *, const void *) = NULL;
switch (d) {
case SORT_CE_BY_TITLE: criterion = ExtensionCensus::compare_ecd_by_title; break;
case SORT_CE_BY_AUTHOR: criterion = ExtensionCensus::compare_ecd_by_author; break;
case SORT_CE_BY_INSTALL: criterion = ExtensionCensus::compare_ecd_by_installation; break;
case SORT_CE_BY_DATE: criterion = ExtensionCensus::compare_ecd_by_date; break;
case SORT_CE_BY_LENGTH: criterion = ExtensionCensus::compare_ecd_by_length; break;
case SORT_CE_BY_TITLE: criterion = ExtensionIndex::compare_ecd_by_title; break;
case SORT_CE_BY_AUTHOR: criterion = ExtensionIndex::compare_ecd_by_author; break;
case SORT_CE_BY_LOCATION: criterion = ExtensionIndex::compare_ecd_by_location; break;
case SORT_CE_BY_USAGE: criterion = ExtensionIndex::compare_ecd_by_title; break;
default: internal_error("no such sorting criterion");
}
qsort(sorted_census_results, (size_t) no_entries, sizeof(extension_census_datum *),
qsort(sorted_census_results, (size_t) no_entries_in_set, sizeof(inbuild_search_result *),
criterion);
@ Standard rows have black text on striped background colours, these being
@ -322,9 +280,8 @@ the usual ones seen in Mac OS X applications such as iTunes.
@<Show a titling row explaining the census sorting, if necessary@>;
int stripe = 0;
TEMPORARY_TEXT(current_author_name)
int i, current_installation = -1;
for (i=0; i<no_entries; i++) {
extension_census_datum *ecd = sorted_census_results[i];
for (int i=0; i<no_entries_in_set; i++) {
inbuild_search_result *ecd = sorted_census_results[i];
@<Insert a subtitling row in the census sorting, if necessary@>;
stripe = 1 - stripe;
if (stripe == 0)
@ -341,53 +298,39 @@ the usual ones seen in Mac OS X applications such as iTunes.
@<Show a titling row explaining the census sorting, if necessary@> =
switch (d) {
case SORT_CE_BY_TITLE:
case SORT_CE_BY_USAGE:
@<Begin a tinted census line@>;
WRITE("Extensions in alphabetical order");
@<End a tinted census line@>;
break;
case SORT_CE_BY_DATE:
case SORT_CE_BY_LOCATION:
@<Begin a tinted census line@>;
WRITE("Extensions in order of date used (most recent first)");
@<End a tinted census line@>;
break;
case SORT_CE_BY_LENGTH:
@<Begin a tinted census line@>;
WRITE("Extensions in order of word count (longest first)");
WRITE("Extensions grouped by location");
@<End a tinted census line@>;
break;
}
@<Insert a subtitling row in the census sorting, if necessary@> =
if ((d == SORT_CE_BY_AUTHOR) &&
(Str::ne(current_author_name, ecd->found_as->copy->edition->work->author_name))) {
Str::copy(current_author_name, ecd->found_as->copy->edition->work->author_name);
(Str::ne(current_author_name, ecd->copy->edition->work->author_name))) {
Str::copy(current_author_name, ecd->copy->edition->work->author_name);
@<Begin a tinted census line@>;
@<Print the author's line in the extension census table@>;
@<End a tinted census line@>;
stripe = 0;
}
if ((d == SORT_CE_BY_INSTALL) &&
(ExtensionCensus::installation_region(ecd) != current_installation)) {
current_installation = ExtensionCensus::installation_region(ecd);
@<Begin a tinted census line@>;
@<Print the installation region in the extension census table@>;
@<End a tinted census line@>;
stripe = 0;
}
@<Show a final titling row closing the census sorting@> =
@<Begin a tinted census line@>;
HTML::begin_span(OUT, I"smaller");
WRITE("%d extensions installed", no_entries);
WRITE("%d extensions in total", no_entries_in_set);
HTML::end_span(OUT);
@<End a tinted census line@>;
@ Usually white text on a grey background.
@<Begin a tinted census line@> =
int span = 4;
if (d == SORT_CE_BY_TITLE) span = 3;
HTML::first_html_column_coloured(OUT, 0, I"tintedrow", span);
HTML::first_html_column_coloured(OUT, 0, I"tintedrow", 4);
HTML::begin_span(OUT, I"extensioncensusentry");
WRITE("&nbsp;");
@ -398,103 +341,86 @@ the usual ones seen in Mac OS X applications such as iTunes.
@ Used only in "by author".
@<Print the author's line in the extension census table@> =
WRITE("%S", ecd->found_as->copy->edition->work->raw_author_name);
extension_census_datum *ecd2;
int cu = 0, cn = 0, j;
for (j = i; j < no_entries; j++) {
ecd2 = sorted_census_results[j];
if (Str::ne(current_author_name,
ecd2->found_as->copy->edition->work->author_name)) break;
if (ExtensionCensus::ecd_used(ecd2)) cu++;
else cn++;
}
WRITE("&nbsp;&nbsp;");
HTML::begin_span(OUT, I"smaller");
WRITE("(%d extension%s", cu+cn, (cu+cn==1)?"":"s");
if ((cu == 0) && (cn == 1)) WRITE(", unused");
else if ((cu == 0) && (cn == 2)) WRITE(", both unused");
else if ((cu == 0) && (cn > 2)) WRITE(", all unused");
else if ((cn == 0) && (cu == 1)) WRITE(", used");
else if ((cn == 0) && (cu == 2)) WRITE(", both used");
else if ((cn == 0) && (cu > 2)) WRITE(", all used");
else if (cn+cu > 0) WRITE(", %d used, %d unused", cu, cn);
WRITE(")");
HTML::end_span(OUT);
@ Used only in "by installation".
@<Print the installation region in the extension census table@> =
switch (current_installation) {
case 0:
WRITE("Supplied in the .materials folder&nbsp;&nbsp;");
HTML::begin_span(OUT, I"smaller");
WRITE("%p", ExtensionCensus::internal_path(C));
HTML::end_span(OUT); break;
case 1: WRITE("Built in to Inform"); break;
case 2: WRITE("User installed but overriding a built-in extension"); break;
case 3:
WRITE("User installed&nbsp;&nbsp;");
HTML::begin_span(OUT, I"smaller");
WRITE("%p", ExtensionCensus::external_path(C));
HTML::end_span(OUT); break;
}
WRITE("%S", ecd->copy->edition->work->raw_author_name);
@
@d UNINDEXED_SYMBOL "border=\"0\" src=\"inform:/doc_images/unindexed_bullet.png\""
@d INDEXED_SYMBOL "border=\"0\" src=\"inform:/doc_images/indexed_bullet.png\""
@d PROBLEM_SYMBOL "border=\"0\" height=\"12\" src=\"inform:/doc_images/census_problem.png\""
@d REVEAL_SYMBOL "border=\"0\" src=\"inform:/doc_images/Reveal.png\""
@d HELP_SYMBOL "border=\"0\" src=\"inform:/doc_images/help.png\""
@d PASTE_SYMBOL "border=\"0\" src=\"inform:/doc_images/paste.png\""
@<Print the census line for this extension@> =
@<Print column 1 of the census line@>;
HTML::next_html_column_nw(OUT, 0);
if (d != SORT_CE_BY_TITLE) {
@<Print column 2 of the census line@>;
HTML::next_html_column_nw(OUT, 0);
}
@<Print column 2 of the census line@>;
HTML::next_html_column_nw(OUT, 0);
@<Print column 3 of the census line@>;
HTML::next_html_column_w(OUT, 0);
@<Print column 4 of the census line@>;
@ The appearance of the line is
>> (bullet) The Title (by The Author) (VM requirement icons)
where all is optional except the title part.
@<Print column 1 of the census line@> =
char *bulletornot = UNINDEXED_SYMBOL;
if (ExtensionCensus::ecd_used(ecd)) {
bulletornot = INDEXED_SYMBOL; key_bullet = TRUE;
}
WRITE("&nbsp;");
HTML_TAG_WITH("img", "%s", bulletornot);
Works::begin_extension_link(OUT,
ecd->found_as->copy->edition->work, ExtensionCensus::ecd_rubric(ecd));
HTML::begin_span(OUT, I"extensionindexentry");
if (d != SORT_CE_BY_AUTHOR) {
WRITE("%S", ecd->found_as->copy->edition->work->raw_title);
if (Str::len(ecd->found_as->copy->edition->work->raw_title) +
Str::len(ecd->found_as->copy->edition->work->raw_author_name) > 45) {
WRITE("%S", ecd->copy->edition->work->raw_title);
if (Str::len(ecd->copy->edition->work->raw_title) +
Str::len(ecd->copy->edition->work->raw_author_name) > 45) {
HTML_TAG("br");
WRITE("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
} else {
WRITE(" ");
}
WRITE("by %S", ecd->found_as->copy->edition->work->raw_author_name);
WRITE("by %S", ecd->copy->edition->work->raw_author_name);
} else {
WRITE("%S", ecd->found_as->copy->edition->work->raw_title);
WRITE("%S", ecd->copy->edition->work->raw_title);
}
HTML::end_span(OUT);
Works::end_extension_link(OUT, ecd->found_as->copy->edition->work);
compatibility_specification *C = ecd->found_as->copy->edition->compatibility;
if (Str::len(C->parsed_from) > 0) {
@<Append icons which signify the VM requirements of the extension@>;
key_vms = TRUE;
filename *F = ExtensionWebsite::abs_page_URL(proj, ecd->copy->edition, -1);
if (TextFiles::exists(F)) {
WRITE(" ");
TEMPORARY_TEXT(link)
TEMPORARY_TEXT(URL)
WRITE_TO(URL, "%f", ExtensionWebsite::rel_page_URL(ecd->copy->edition, -1));
WRITE_TO(link, "href='inform:/");
Works::escape_apostrophes(link, URL);
WRITE_TO(link, "' style=\"text-decoration: none\"");
HTML_OPEN_WITH("a", "%S", link);
DISCARD_TEXT(link)
HTML_TAG_WITH("img", "%s", HELP_SYMBOL);
ExtensionIndex::add_to_key(key_list, HELP_SYMBOL, I"Documentation (click to read)");
HTML_CLOSE("a");
}
inform_extension *E = Extensions::from_copy(ecd->copy);
parse_node *at = Extensions::get_inclusion_sentence(E);
if (at) {
wording W = Node::get_text(at);
source_location sl = Lexer::word_location(Wordings::first_wn(W));
SourceLinks::link(OUT, sl, TRUE);
ExtensionIndex::add_to_key(key_list, REVEAL_SYMBOL, I"Included here (click to see)");
}
if (LinkedLists::len(ecd->copy->errors_reading_source_text) > 0) {
WRITE(" ");
HTML_TAG_WITH("img", "%s", PROBLEM_SYMBOL);
ExtensionIndex::add_to_key(key_list, PROBLEM_SYMBOL, I"Has errors (see below)");
} else if (usage_state == FALSE) {
WRITE(" ");
TEMPORARY_TEXT(inclusion_text)
WRITE_TO(inclusion_text, "Include %X.\n\n\n", ecd->copy->edition->work);
PasteButtons::paste_text(OUT, inclusion_text);
DISCARD_TEXT(inclusion_text)
ExtensionIndex::add_to_key(key_list, PASTE_SYMBOL,
I"Source text to Include this (click to paste in)");
}
compatibility_specification *C = ecd->copy->edition->compatibility;
if (Str::len(C->parsed_from) > 0)
@<Append icons which signify the VM requirements of the extension@>;
@ VM requirements are parsed by feeding them into the lexer and calling the
same routines as would be used when parsing headings about VM requirements
in a normal run of Inform. Note that because the requirements are in round
@ -502,15 +428,12 @@ brackets, which the lexer will split off as distinct words, we can ignore
the first and last word and just look at what is in between:
@<Append icons which signify the VM requirements of the extension@> =
WRITE("&nbsp;%S", C->parsed_from);
#ifdef CORE_MODULE
ExtensionIndex::write_icons(OUT, C);
#endif
ExtensionIndex::write_icons(OUT, key_list, C);
@<Print column 2 of the census line@> =
HTML::begin_span(OUT, I"smaller");
if (VersionNumbers::is_null(ecd->found_as->copy->edition->version) == FALSE)
WRITE("v&nbsp;%v", &(ecd->found_as->copy->edition->version));
if (VersionNumbers::is_null(ecd->copy->edition->version) == FALSE)
WRITE("v&nbsp;%v", &(ecd->copy->edition->version));
else
WRITE("--");
HTML::end_span(OUT);
@ -518,48 +441,72 @@ the first and last word and just look at what is in between:
@
@d BUILT_IN_SYMBOL "border=\"0\" src=\"inform:/doc_images/builtin_ext.png\""
@d OVERRIDING_SYMBOL "border=\"0\" src=\"inform:/doc_images/override_ext.png\""
@d PROJECT_SPECIFIC_SYMBOL "border=\"0\" src=\"inform:/doc_images/pspec_ext.png\""
@d ARCH_16_SYMBOL "border=\"0\" src=\"inform:/doc_images/vm_z8.png\""
@d ARCH_32_SYMBOL "border=\"0\" src=\"inform:/doc_images/vm_glulx.png\""
@<Print column 3 of the census line@> =
char *opener = "src='inform:/doc_images/folder4.png' border=0";
if (Nests::get_tag(ecd->found_as->nest) == INTERNAL_NEST_TAG) {
opener = BUILT_IN_SYMBOL; key_builtin = TRUE;
if (Nests::get_tag(ecd->nest) == INTERNAL_NEST_TAG) {
opener = BUILT_IN_SYMBOL;
ExtensionIndex::add_to_key(key_list, BUILT_IN_SYMBOL, I"Built in");
}
if (ecd->overriding_a_built_in_extension) {
opener = OVERRIDING_SYMBOL; key_override = TRUE;
if (Nests::get_tag(ecd->nest) == MATERIALS_NEST_TAG) {
opener = PROJECT_SPECIFIC_SYMBOL;
ExtensionIndex::add_to_key(key_list, PROJECT_SPECIFIC_SYMBOL, I"Installed in .materials");
}
if (Nests::get_tag(ecd->found_as->nest) == MATERIALS_NEST_TAG) {
opener = PROJECT_SPECIFIC_SYMBOL; key_pspec = TRUE;
}
if (Nests::get_tag(ecd->found_as->nest) == INTERNAL_NEST_TAG)
if (Nests::get_tag(ecd->nest) == INTERNAL_NEST_TAG)
HTML_TAG_WITH("img", "%s", opener)
else {
#ifdef INDEX_MODULE
pathname *area = ExtensionManager::path_within_nest(ecd->found_as->nest);
pathname *area = ExtensionManager::path_within_nest(ecd->nest);
PasteButtons::open_file(OUT, area,
ecd->found_as->copy->edition->work->raw_author_name, opener);
ecd->copy->edition->work->raw_author_name, opener);
#endif
}
@<Print column 4 of the census line@> =
inform_extension *E = Extensions::from_copy(ecd->found_as->copy);
HTML::begin_span(OUT, I"smaller");
if ((d == SORT_CE_BY_DATE) || (d == SORT_CE_BY_INSTALL)) {
WRITE("%S", Extensions::get_usage_date(E));
} else if (d == SORT_CE_BY_LENGTH) {
if (Extensions::get_word_count(E) == 0)
WRITE("--");
if (d == SORT_CE_BY_LOCATION) {
if (Nests::get_tag(ecd->nest) == INTERNAL_NEST_TAG)
WRITE("Built in to Inform");
else
WRITE("%d words", Extensions::get_word_count(E));
WRITE("Installed in this project");
} else {
if (Str::len(ExtensionCensus::ecd_rubric(ecd)) > 0)
WRITE("%S", ExtensionCensus::ecd_rubric(ecd));
if (Str::len(ExtensionIndex::ecd_rubric(ecd)) > 0)
WRITE("%S", ExtensionIndex::ecd_rubric(ecd));
else
WRITE("--");
}
HTML::end_span(OUT);
@h The key.
There is just no need to do this efficiently in either running time or memory.
=
typedef struct extensions_key_item {
struct text_stream *image_URL;
struct text_stream *gloss;
CLASS_DEFINITION
} extensions_key_item;
void ExtensionIndex::add_to_key(linked_list *L, char *URL, text_stream *gloss) {
TEMPORARY_TEXT(as_text)
WRITE_TO(as_text, "%s", URL);
int found = FALSE;
extensions_key_item *eki;
LOOP_OVER_LINKED_LIST(eki, extensions_key_item, L)
if (Str::eq(eki->image_URL, as_text))
found = TRUE;
if (found == FALSE) {
eki = CREATE(extensions_key_item);
eki->image_URL = Str::duplicate(as_text);
eki->gloss = Str::duplicate(gloss);
ADD_TO_LINKED_LIST(eki, extensions_key_item, L);
}
DISCARD_TEXT(as_text)
}
@h Icons for virtual machines.
And everything else is cosmetic: printing, or showing icons to signify,
the current VM or some set of permitted VMs. The following plots the
@ -573,45 +520,125 @@ void ExtensionIndex::plot_icon(OUTPUT_STREAM, target_vm *VM) {
}
}
void ExtensionIndex::write_key(OUTPUT_STREAM) {
WRITE("Extensions compatible with specific story file formats only: ");
int i = 0;
target_vm *VM;
LOOP_OVER(VM, target_vm) {
if (TargetVMs::debug_enabled(VM)) continue; /* avoids listing twice */
if (i++ > 0) WRITE(", ");
ExtensionIndex::plot_icon(OUT, VM);
TargetVMs::write(OUT, VM);
}
}
@h Displaying VM restrictions.
Given a word range, we describe the result as concisely as we can with a
row of icons (but do not bother for the common case where some extension
has no restriction on its use).
=
void ExtensionIndex::write_icons(OUTPUT_STREAM, compatibility_specification *C) {
int something = FALSE, everything = TRUE;
void ExtensionIndex::write_icons(OUTPUT_STREAM, linked_list *key_list,
compatibility_specification *C) {
int something_16 = FALSE, everything_16 = TRUE, something_32 = FALSE, everything_32 = TRUE;
target_vm *VM;
LOOP_OVER(VM, target_vm)
if (Compatibility::test(C, VM))
something = TRUE;
else
everything = FALSE;
if (something == FALSE) WRITE("none");
else if (everything == FALSE) {
if (Architectures::is_16_bit(VM->architecture)) {
if (Compatibility::test(C, VM))
something_16 = TRUE;
else
everything_16 = FALSE;
} else {
if (Compatibility::test(C, VM))
something_32 = TRUE;
else
everything_32 = FALSE;
}
if ((everything_16) && (everything_32)) return;
if ((everything_16) && (something_32 == FALSE)) {
WRITE(" ");
dictionary *shown_already = Dictionaries::new(16, TRUE);
LOOP_OVER(VM, target_vm)
if (Compatibility::test(C, VM)) {
text_stream *icon = VM->VM_image;
if (Str::len(icon) > 0) {
if (Dictionaries::find(shown_already, icon) == NULL) {
ExtensionIndex::plot_icon(OUT, VM);
WRITE_TO(Dictionaries::create_text(shown_already, icon), "X");
}
HTML_TAG_WITH("img", "%s", ARCH_16_SYMBOL);
ExtensionIndex::add_to_key(key_list, ARCH_16_SYMBOL, I"Z-machine only (16-bit)");
return;
}
if ((everything_32) && (something_16 == FALSE)) {
WRITE(" ");
HTML_TAG_WITH("img", "%s", ARCH_32_SYMBOL);
ExtensionIndex::add_to_key(key_list, ARCH_32_SYMBOL, I"Glulx only (32-bit)");
return;
}
WRITE(" - %S ", C->parsed_from);
dictionary *shown_already = Dictionaries::new(16, TRUE);
LOOP_OVER(VM, target_vm)
if (Compatibility::test(C, VM)) {
text_stream *icon = VM->VM_image;
if (Str::len(icon) > 0) {
if (Dictionaries::find(shown_already, icon) == NULL) {
ExtensionIndex::plot_icon(OUT, VM);
WRITE_TO(Dictionaries::create_text(shown_already, icon), "X");
ExtensionIndex::add_to_key(key_list, ARCH_16_SYMBOL, I"Z-machine only (16-bit)");
ExtensionIndex::add_to_key(key_list, ARCH_32_SYMBOL, I"Glulx only (32-bit)");
}
}
}
}
}
@
=
void ExtensionIndex::find_used_extensions(inform_project *proj,
linked_list *U, linked_list *R) {
build_vertex *V = Copies::construct_project_graph(proj->as_copy);
ExtensionIndex::find_used_extensions_r(V, Graphs::get_unique_graph_scan_count(), U, R);
}
void ExtensionIndex::find_used_extensions_r(build_vertex *V, int scan_count,
linked_list *U, linked_list *R) {
if (V->type == COPY_VERTEX) {
inbuild_copy *C = V->as_copy;
if ((C->edition->work->genre == extension_genre) ||
(C->edition->work->genre == extension_bundle_genre)) {
if (C->last_scanned != scan_count) {
ADD_TO_LINKED_LIST(C, inbuild_copy, U);
C->last_scanned = scan_count;
}
}
}
if (V->type == REQUIREMENT_VERTEX) {
if ((V->as_requirement->work->genre == extension_genre) ||
(V->as_requirement->work->genre == extension_bundle_genre)) {
ADD_TO_LINKED_LIST(V->as_requirement, inbuild_requirement, R);
}
}
build_vertex *W;
LOOP_OVER_LINKED_LIST(W, build_vertex, V->build_edges)
ExtensionIndex::find_used_extensions_r(W, scan_count, U, R);
LOOP_OVER_LINKED_LIST(W, build_vertex, V->use_edges)
ExtensionIndex::find_used_extensions_r(W, scan_count, U, R);
}
@h Sorting criteria.
The following give some sorting criteria, and are functions fit to be
handed to |qsort|.
=
int ExtensionIndex::compare_ecd_by_title(const void *ecd1, const void *ecd2) {
inbuild_search_result *e1 = *((inbuild_search_result **) ecd1);
inbuild_search_result *e2 = *((inbuild_search_result **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->copy);
inform_extension *E2 = Extensions::from_copy(e2->copy);
return Extensions::compare_by_title(E2, E1);
}
int ExtensionIndex::compare_ecd_by_author(const void *ecd1, const void *ecd2) {
inbuild_search_result *e1 = *((inbuild_search_result **) ecd1);
inbuild_search_result *e2 = *((inbuild_search_result **) ecd2);
inform_extension *E1 = Extensions::from_copy(e1->copy);
inform_extension *E2 = Extensions::from_copy(e2->copy);
return Extensions::compare_by_author(E2, E1);
}
int ExtensionIndex::compare_ecd_by_location(const void *ecd1, const void *ecd2) {
inbuild_search_result *e1 = *((inbuild_search_result **) ecd1);
inbuild_search_result *e2 = *((inbuild_search_result **) ecd2);
int d = Nests::get_tag(e1->nest) - Nests::get_tag(e2->nest);
if (d != 0) return d;
return ExtensionIndex::compare_ecd_by_title(ecd1, ecd2);
}
int ExtensionIndex::ecd_used(inbuild_search_result *ecd) {
inform_extension *E = Extensions::from_copy(ecd->copy);
return E->has_historically_been_used;
}
text_stream *ExtensionIndex::ecd_rubric(inbuild_search_result *ecd) {
return Extensions::get_rubric(Extensions::from_copy(ecd->copy));
}

View file

@ -134,8 +134,7 @@ our E, and return 0 in response to the ECD call to prevent further ECD calls.
@<Write up any restrictions on VM usage@> =
compatibility_specification *C = E->as_copy->edition->compatibility;
if (Str::len(C->parsed_from) > 0) {
WRITE("%S&nbsp;", C->parsed_from);
ExtensionIndex::write_icons(OUT, C);
WRITE("%S", C->parsed_from);
}
@<Write up the version number, if any, and location@> =

View file

@ -48,7 +48,7 @@ void ExtensionWebsite::index_after_compilation(inform_project *proj) {
void ExtensionWebsite::go(inform_project *proj, int force_update) {
ExtensionDictionary::read_from_file();
extension_census *C = ExtensionCensus::perform(proj);
ExtensionCensus::perform(proj);
@<Time-stamp extensions used in the project as being last used today@>;
@<Write index pages@>;
@<Write individual pages on individual extensions@>;
@ -70,9 +70,7 @@ documentation as used today until the next run, for obscure timing reasons.
}
@<Write index pages@> =
ExtensionIndex::write(ExtensionWebsite::index_URL(proj, I"Extensions.html"), HOME_EXTPAGE, C);
if (proj == NULL)
ExtensionIndex::write(ExtensionWebsite::index_URL(proj, I"ExtIndex.html"), INDEX_EXTPAGE, C);
ExtensionIndex::write(proj);
@ Each extension gets its own page in the external documentation area, but
this page can have two forms:
@ -194,3 +192,55 @@ filename *ExtensionWebsite::page_URL(inform_project *proj, inbuild_edition *edit
DISCARD_TEXT(leaf)
return F;
}
filename *ExtensionWebsite::abs_page_URL(inform_project *proj, inbuild_edition *edition,
int eg_number) {
TEMPORARY_TEXT(leaf)
Editions::write_canonical_leaf(leaf, edition);
pathname *P;
if (proj) {
P = Projects::materials_path(proj);
if (P == NULL) return NULL;
P = Pathnames::down(P, I"Extensions");
P = Pathnames::down(P, I"Reserved");
P = Pathnames::down(P, I"Documentation");
} else {
P = ExtensionWebsite::home_URL(NULL);
if (P == NULL) return NULL;
P = Pathnames::down(P, I"Extensions");
}
P = Pathnames::down(P, edition->work->author_name);
if (proj) {
P = Pathnames::down(P, leaf);
Str::clear(leaf);
if (eg_number > 0) WRITE_TO(leaf, "eg%d.html", eg_number);
else WRITE_TO(leaf, "index.html");
} else {
if (eg_number > 0) WRITE_TO(leaf, "-eg%d", eg_number);
WRITE_TO(leaf, ".html");
}
filename *F = Filenames::in(P, leaf);
DISCARD_TEXT(leaf)
return F;
}
filename *ExtensionWebsite::rel_page_URL(inbuild_edition *edition, int eg_number) {
TEMPORARY_TEXT(leaf)
Editions::write_canonical_leaf(leaf, edition);
pathname *P = NULL;
P = Pathnames::down(P, I"Extensions");
P = Pathnames::down(P, I"Reserved");
P = Pathnames::down(P, I"Documentation");
P = Pathnames::down(P, edition->work->author_name);
P = Pathnames::down(P, leaf);
Str::clear(leaf);
if (eg_number > 0) WRITE_TO(leaf, "eg%d.html", eg_number);
else WRITE_TO(leaf, "index.html");
filename *F = Filenames::in(P, leaf);
DISCARD_TEXT(leaf)
return F;
}

View file

@ -1,15 +1,15 @@
Size of lexicon: 3129 excerpt meanings
Stored among 846 words out of total vocabulary of 10735
716 words have a start list: longest belongs to report (with 293 meanings)
Size of lexicon: 3141 excerpt meanings
Stored among 849 words out of total vocabulary of 10759
719 words have a start list: longest belongs to report (with 293 meanings)
15 words have an end list: longest belongs to case (with 6 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: 110344
of which unsuccessful: 92205
of which successful: 18139
Number of attempts to retrieve: 110380
of which unsuccessful: 92237
of which successful: 18143
Total attempts to match against excerpt meanings: 276472
of which, total with incorrect hash codes: 253735
of which, total with correct hash codes: 22737
of which, total which matched: 19906
Total attempts to match against excerpt meanings: 279269
of which, total with incorrect hash codes: 256529
of which, total with correct hash codes: 22740
of which, total which matched: 19910

File diff suppressed because it is too large Load diff

View file

@ -306,12 +306,18 @@ USAGE: ph_titlecase 0 0 0
USAGE: ph_sentencecase 0 0 0
USAGE: ph_matches 0 0 0
USAGE: ph_exactlymatches 0 0 0
USAGE: ph_textfirstindex 0 0 0
USAGE: ph_textlastindex 0 0 0
USAGE: ph_textlength 0 0 0
USAGE: ph_nummatches 0 0 0
USAGE: ph_matchesre 0 0 0
USAGE: ph_exactlymatchesre 0 0 0
USAGE: ph_nummatchesre 0 0 0
USAGE: ph_matchtext 0 0 0
USAGE: ph_subexpressiontext 0 0 0
USAGE: ph_refirstindex 0 0 0
USAGE: ph_relastindex 0 0 0
USAGE: ph_relength 0 0 0
USAGE: ph_subform 0 0 0
USAGE: ph_replacechar 0 0 0
USAGE: ph_replaceword 0 0 0

View file

@ -1,13 +1,13 @@
Total memory consumption was 135609K = 132 MB
Total memory consumption was 135759K = 133 MB
---- was used for 2111059 objects, in 373571 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2113337 objects, in 374034 frames in 0 x 800K = 0K = 0 MB:
31.1% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.4% text_stream_array 4802 x 100 = 480200 objects, 27044864 bytes
18.2% linked_list 45247 objects, 25338320 bytes
10.2% inter_symbol_array 134 x 1024 = 137216 objects, 14274752 bytes
10.0% inter_error_stash_array 106 x 1024 = 108544 objects, 13897024 bytes
7.6% parse_node 133440 objects, 10675200 bytes
19.4% text_stream_array 4809 x 100 = 480900 objects, 27084288 bytes
18.2% linked_list 45329 objects, 25384240 bytes
10.3% inter_symbol_array 135 x 1024 = 138240 objects, 14381280 bytes
9.9% inter_error_stash_array 106 x 1024 = 108544 objects, 13897024 bytes
7.6% parse_node 133539 objects, 10683120 bytes
5.4% verb_conjugation 164 objects, 7610912 bytes
4.1% parse_node_annotation_array 357 x 500 = 178500 objects, 5723424 bytes
3.4% scan_directory 1148 objects, 4738944 bytes
@ -16,59 +16,59 @@ Total memory consumption was 135609K = 132 MB
1.9% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
1.5% inter_schema_token 14157 objects, 2151864 bytes
1.4% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.3% package_request 21270 objects, 1871760 bytes
1.3% vocabulary_entry_array 164 x 100 = 16400 objects, 1842048 bytes
1.3% package_request 21299 objects, 1874312 bytes
1.3% vocabulary_entry_array 165 x 100 = 16500 objects, 1853280 bytes
1.1% dict_entry_array 483 x 100 = 48300 objects, 1561056 bytes
1.0% inter_symbols_table 26838 objects, 1502928 bytes
1.0% inter_symbols_table 26878 objects, 1505168 bytes
1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
1.0% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes
0.9% inter_package 26838 objects, 1288224 bytes
0.9% inter_package 26878 objects, 1290144 bytes
0.8% map_data 672 objects, 1128960 bytes
0.7% id_body 957 objects, 1094808 bytes
0.7% id_body 964 objects, 1102816 bytes
0.7% adjective_meaning 208 objects, 1030016 bytes
0.7% inter_schema_node 9050 objects, 1013600 bytes
0.7% excerpt_meaning 3129 objects, 976248 bytes
0.7% excerpt_meaning 3141 objects, 979992 bytes
0.6% production 3973 objects, 921736 bytes
0.6% ptoken 8643 objects, 898872 bytes
0.6% grammatical_usage 3641 objects, 873840 bytes
0.6% individual_form 2574 objects, 864864 bytes
0.6% grammatical_usage 3647 objects, 875280 bytes
0.6% individual_form 2580 objects, 866880 bytes
0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes
0.3% local_variable_array 49 x 100 = 4900 objects, 471968 bytes
0.2% verb_usage 1148 objects, 394912 bytes
0.2% dictionary 7726 objects, 370848 bytes
0.2% rule 472 objects, 370048 bytes
0.2% rule 478 objects, 374752 bytes
0.2% dictionary 7747 objects, 371856 bytes
0.2% verb_form 388 objects, 350752 bytes
0.2% noun 2389 objects, 286680 bytes
0.1% compilation_subtask 3380 objects, 270400 bytes
0.2% noun 2395 objects, 287400 bytes
0.1% compilation_subtask 3386 objects, 270880 bytes
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% inference_subject 667 objects, 261464 bytes
0.1% vanilla_function 3794 objects, 242816 bytes
0.1% vanilla_function 3803 objects, 243392 bytes
0.1% binary_predicate 326 objects, 172128 bytes
0.1% hierarchy_location 1181 objects, 170064 bytes
0.1% linguistic_stock_item 3332 objects, 159936 bytes
0.1% rule_family_data 403 objects, 148304 bytes
0.1% hierarchy_location 1186 objects, 170784 bytes
0.1% linguistic_stock_item 3338 objects, 160224 bytes
0.1% rule_family_data 404 objects, 148672 bytes
0.1% nonterminal 774 objects, 142416 bytes
---- nascent_array 2126 objects, 136064 bytes
---- inference 1703 objects, 122616 bytes
---- pcalc_term_array 3 x 1000 = 3000 objects, 120096 bytes
---- documentation_ref 1270 objects, 111760 bytes
---- documentation_ref 1276 objects, 112288 bytes
---- inter_schema 1539 objects, 110808 bytes
---- imperative_defn 1395 objects, 100440 bytes
---- noun_usage 2412 objects, 96480 bytes
---- imperative_defn 1402 objects, 100944 bytes
---- noun_usage 2418 objects, 96720 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- inter_tree 7 objects, 95704 bytes
---- preposition 274 objects, 87680 bytes
---- lexical_cluster 2529 objects, 80928 bytes
---- lexical_cluster 2535 objects, 81120 bytes
---- kind_variable_declaration 1656 objects, 79488 bytes
---- rulebook 407 objects, 78144 bytes
---- label_namespace 1480 objects, 71040 bytes
---- spatial_data 672 objects, 64512 bytes
---- linked_list_item_array 4 x 1000 = 4000 objects, 64128 bytes
---- kind_constructor 78 objects, 63648 bytes
---- booking 868 objects, 62496 bytes
---- kind_macro_definition 9 objects, 62280 bytes
---- booking 863 objects, 62136 bytes
---- actions_rcd_data 1914 objects, 61248 bytes
---- scenes_rcd_data 1914 objects, 61248 bytes
---- actions_rcd_data 1928 objects, 61696 bytes
---- scenes_rcd_data 1928 objects, 61696 bytes
---- command_grammar 130 objects, 58240 bytes
---- table 7 objects, 56672 bytes
---- pcalc_func_array 1 x 1000 objects, 56032 bytes
@ -78,16 +78,16 @@ Total memory consumption was 135609K = 132 MB
---- response_message 408 objects, 52224 bytes
---- ap_clause_array 2 x 400 = 800 objects, 51264 bytes
---- HTML_tag_array 1 x 1000 objects, 48032 bytes
---- heading 207 objects, 46368 bytes
---- heading 212 objects, 47488 bytes
---- text_substitution 438 objects, 42048 bytes
---- to_family_data 506 objects, 40480 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- to_family_data 512 objects, 40960 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 672 objects, 37632 bytes
---- production_list 631 objects, 35336 bytes
---- regions_data 672 objects, 32256 bytes
---- counting_data 672 objects, 32256 bytes
---- regions_data 672 objects, 32256 bytes
---- property_permission 96 objects, 31488 bytes
---- filename 767 objects, 30680 bytes
---- parse_node_tree 34 objects, 29648 bytes
@ -103,7 +103,7 @@ Total memory consumption was 135609K = 132 MB
---- pipeline_step 15 objects, 20280 bytes
---- action_name 90 objects, 20160 bytes
---- build_vertex 164 objects, 19680 bytes
---- timed_rules_rfd_data 403 objects, 19344 bytes
---- timed_rules_rfd_data 404 objects, 19392 bytes
---- method 398 objects, 19104 bytes
---- instance 162 objects, 18144 bytes
---- pcalc_prop_deferral 86 objects, 17888 bytes
@ -116,7 +116,7 @@ Total memory consumption was 135609K = 132 MB
---- booking_list 407 objects, 13024 bytes
---- web_bibliographic_datum 203 objects, 12992 bytes
---- adjective_iname_holder 323 objects, 12920 bytes
---- uniqueness_count 481 objects, 11544 bytes
---- uniqueness_count 482 objects, 11568 bytes
---- inter_construct 32 objects, 11008 bytes
---- heading_tree 34 objects, 10608 bytes
---- stopwatch_timer 123 objects, 9840 bytes
@ -133,7 +133,7 @@ Total memory consumption was 135609K = 132 MB
---- text_literal_holder 163 objects, 6520 bytes
---- section_md 62 objects, 5952 bytes
---- parsed_use_option_setting 80 objects, 5760 bytes
---- compatibility_specification 115 objects, 5520 bytes
---- compatibility_specification 117 objects, 5616 bytes
---- build_script 164 objects, 5248 bytes
---- activity 35 objects, 5040 bytes
---- explicit_action_array 1 x 100 objects, 4832 bytes
@ -144,8 +144,8 @@ Total memory consumption was 135609K = 132 MB
---- use_option 32 objects, 4352 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- parse_node_annotation_type 119 objects, 3808 bytes
---- method_set 108 objects, 3456 bytes
---- definition 48 objects, 3456 bytes
---- method_set 108 objects, 3456 bytes
---- submodule_request 86 objects, 3440 bytes
---- property_setting_bp_data 84 objects, 3360 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
@ -154,8 +154,8 @@ Total memory consumption was 135609K = 132 MB
---- JSON_single_requirement 55 objects, 2640 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- scene 1 object, 2352 bytes
---- build_step 28 objects, 2016 bytes
@ -165,11 +165,11 @@ Total memory consumption was 135609K = 132 MB
---- inform_pipeline 24 objects, 1536 bytes
---- inbuild_requirement 37 objects, 1480 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- inter_node_array 35 objects, 1400 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- inter_node_array 35 objects, 1400 bytes
---- JSON_requirement 42 objects, 1344 bytes
---- table_column 16 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- inbuild_search_result 29 objects, 1160 bytes
@ -178,8 +178,8 @@ Total memory consumption was 135609K = 132 MB
---- runtime_kind_structure 13 objects, 1040 bytes
---- quantifier 16 objects, 1024 bytes
---- web_md 7 objects, 1008 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- JSON_pair_requirement 29 objects, 928 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- kit_configuration 21 objects, 840 bytes
@ -192,18 +192,18 @@ Total memory consumption was 135609K = 132 MB
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 576 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- module 7 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- module 7 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- i6_memory_setting 15 objects, 480 bytes
---- equation 4 objects, 480 bytes
---- bp_family 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- article_usage 8 objects, 384 bytes
---- inbuild_genre 8 objects, 384 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- tree_inventory 1 object, 320 bytes
---- grammatical_category 8 objects, 320 bytes
@ -213,10 +213,10 @@ Total memory consumption was 135609K = 132 MB
---- module_request 8 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- up_family 9 objects, 288 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- kit_dependency 5 objects, 240 bytes
---- inform_project 1 object, 232 bytes
@ -224,43 +224,43 @@ Total memory consumption was 135609K = 132 MB
---- adjective_meaning_family 7 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- build_skill 5 objects, 200 bytes
---- attachment_instruction 5 objects, 200 bytes
---- code_generator 5 objects, 200 bytes
---- element_activation 6 objects, 192 bytes
---- attachment_instruction 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inference_subject_family 5 objects, 160 bytes
---- element_activation 6 objects, 192 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_language 1 object, 104 bytes
---- group_together_function 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- build_methodology 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- compile_task_data 1 object, 80 bytes
---- group_together_function 2 objects, 80 bytes
---- figures_data 1 object, 56 bytes
---- inform_kit_ittt 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- inter_warehouse 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- star_invention 1 object, 48 bytes
---- loop_over_scope 1 object, 40 bytes
---- HTML_file_state 1 object, 48 bytes
---- inform_kit_ittt 1 object, 48 bytes
---- I6_generation_data 1 object, 40 bytes
---- target_pragma_setting 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- target_pragma_setting 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
99.9% was used for memory not allocated for objects:
100.0% was used for memory not allocated for objects:
61.4% text stream storage 85280520 bytes in 499960 claims
3.8% dictionary storage 5364736 bytes in 7726 claims
61.4% text stream storage 85418584 bytes in 500747 claims
3.8% dictionary storage 5374976 bytes in 7747 claims
---- sorting 3320 bytes in 547 claims
5.1% source text 7200000 bytes in 3 claims
7.7% source text details 10800000 bytes in 2 claims
0.1% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
3.2% inter symbols storage 4566640 bytes in 28213 claims
12.0% inter bytecode storage 16757840 bytes in 15 claims
3.2% inter symbols storage 4571760 bytes in 28253 claims
12.0% inter bytecode storage 16757532 bytes in 15 claims
4.4% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
1.2% instance-of-kind counting 1705636 bytes in 1 claim
@ -269,5 +269,5 @@ Total memory consumption was 135609K = 132 MB
---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280672 bytes in 2002 claims
-139.-9% was overhead - -194346184 bytes = -189791K = -185 MB
-139.-9% was overhead - -194592480 bytes = -190031K = -185 MB

View file

@ -1,25 +1,25 @@
<s-literal> hits 2126/24584 nti 23 constraint (none) extremes [1, infinity)
<s-literal> hits 2126/24594 nti 23 constraint (none) extremes [1, infinity)
English:
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/1482) constraint DS = {23} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 274/751) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {23} extremes [4, 4]
(hits 274/752) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {23} extremes [4, 4]
(@1)<quoted-text>=1
(hits 1570/5726) (matched: 'Represents geographical locations, both indoor
and outdoor, which are not necessarily areas in a building. A player in one
room is mostly unable to sense, or interact with, anything in a different room.
Rooms are arranged in a map.') constraint (none) extremes [1, 1]
<s-literal-real-number>=1
(hits 11/10277) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(hits 11/10282) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(@1)<s-literal-truth-state>=1
(hits 100/721) (matched: 'false') constraint CS = {17} extremes [1, 1]
<s-literal-list>=1
(hits 0/1703) constraint DS = {19} extremes [2, infinity)
(hits 0/1705) constraint DS = {19} extremes [2, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/3441) constraint DS = {23} extremes [2, infinity)
(hits 0/3446) constraint DS = {23} extremes [2, infinity)
<s-literal-time>=1
(hits 0/3993) constraint DW = {20, 21, 22} extremes [2, 5]
(hits 0/3994) constraint DW = {20, 21, 22} extremes [2, 5]
<s-literal-unit-notation>=1
(hits 0/10166) constraint (none) extremes [1, infinity)
(hits 0/10171) constraint (none) extremes [1, infinity)

View file

@ -28,8 +28,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'asking for information'
UNPARSED_NOUN_NT'out of world'
IMPERATIVE_NT'carry out asking for information' {unit: 3} {imperative definition: 815}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 816}
IMPERATIVE_NT'carry out asking for information' {unit: 3} {imperative definition: 822}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 823}
HEADING_NT'section 1 - errands' {heading 5} {under: H5'section 1 - errands'} {unit: 3}
SENTENCE_NT'the current actor is a person which varies' {unit: 3} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
@ -39,8 +39,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'current owner' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'current owner' {nonlocal: 'current owner'(var)person}} {created here}
COMMON_NOUN_NT'person which varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=people variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 817}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 818}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 824}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 825}
SENTENCE_NT'a person can be active or passive' {unit: 3} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
@ -56,34 +56,34 @@ ROOT_NT
VERB_NT'are' {verb 'be' 3p p act IS_TENSE +ve}
PROPER_NOUN_NT'character movement rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: character movement}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'the first character movement rule' {unit: 3} {imperative definition: 819}
IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 820}
IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 821}
IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 3} {imperative definition: 822}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 823}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 824}
IMPERATIVE_NT'the first character movement rule' {unit: 3} {imperative definition: 826}
IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 827}
IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 828}
IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 3} {imperative definition: 829}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 830}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 831}
SENTENCE_NT'the shopowner rules is a rulebook' {unit: 3} {classified} {clears pronouns}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'shopowner rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopowner}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 825}
IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 3} {imperative definition: 826}
IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 3} {imperative definition: 827}
IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 828}
IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 832}
IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 3} {imperative definition: 833}
IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 3} {imperative definition: 834}
IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 835}
SENTENCE_NT'filing is an action applying to one thing' {unit: 3} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'filing'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 3} {imperative definition: 829}
IMPERATIVE_NT'carry out someone filing' {unit: 3} {imperative definition: 830}
IMPERATIVE_NT'report someone filing' {unit: 3} {imperative definition: 831}
IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 3} {imperative definition: 836}
IMPERATIVE_NT'carry out someone filing' {unit: 3} {imperative definition: 837}
IMPERATIVE_NT'report someone filing' {unit: 3} {imperative definition: 838}
SENTENCE_NT'the shopper rules is a rulebook' {unit: 3} {classified} {clears pronouns}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'shopper rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopper}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 832}
IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 833}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 834}
IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 839}
IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 840}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 841}
DEFN_CONT_NT'a room is air-conditioned' {unit: 3}
CODE_BLOCK_NT
CODE_BLOCK_NT {control structure: IF}
@ -141,8 +141,8 @@ ROOT_NT
COMMON_NOUN_NT'artwork' {indefinite 'an' n/m/f nom/acc s} {refined} {creation: << kind=artwork(x) >>} {refers: infs'artwork'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of an artwork' {unit: 3} {imperative definition: 835}
IMPERATIVE_NT'after printing the name of an artwork' {unit: 3} {imperative definition: 836}
IMPERATIVE_NT'before printing the name of an artwork' {unit: 3} {imperative definition: 842}
IMPERATIVE_NT'after printing the name of an artwork' {unit: 3} {imperative definition: 843}
SENTENCE_NT'an artwork can be submitted or reserved' {unit: 3} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'an artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
@ -155,49 +155,49 @@ ROOT_NT
COMMON_NOUN_NT'book' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=book(x) >>} {refers: infs'book'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}
COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 3} {imperative definition: 837}
IMPERATIVE_NT'carry out someone resolving a book' {unit: 3} {imperative definition: 838}
IMPERATIVE_NT'report someone resolving a book' {unit: 3} {imperative definition: 839}
IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 840}
IMPERATIVE_NT'before grouping together books' {unit: 3} {imperative definition: 841}
IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 3} {imperative definition: 844}
IMPERATIVE_NT'carry out someone resolving a book' {unit: 3} {imperative definition: 845}
IMPERATIVE_NT'report someone resolving a book' {unit: 3} {imperative definition: 846}
IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 847}
IMPERATIVE_NT'before grouping together books' {unit: 3} {imperative definition: 848}
SENTENCE_NT'a stamped envelope is a kind of thing' {unit: 3} {classified} {interpretation of subject: infs'book'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'stamped envelope' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=stamped envelope(x) >>} {refers: infs'stamped envelope'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 3} {imperative definition: 842}
IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 3} {imperative definition: 843}
IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 3} {imperative definition: 844}
IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 3} {imperative definition: 845}
IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 3} {imperative definition: 849}
IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 3} {imperative definition: 850}
IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 3} {imperative definition: 851}
IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 3} {imperative definition: 852}
SENTENCE_NT'a dvd is a kind of artwork' {unit: 3} {classified} {interpretation of subject: infs'stamped envelope'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'dvd' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=dvd(x) >>} {refers: infs'dvd'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}
COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 3} {imperative definition: 846}
IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 3} {imperative definition: 847}
IMPERATIVE_NT'report someone resolving a dvd' {unit: 3} {imperative definition: 848}
IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 3} {imperative definition: 849}
IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 850}
IMPERATIVE_NT'before grouping together dvds' {unit: 3} {imperative definition: 851}
IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 3} {imperative definition: 853}
IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 3} {imperative definition: 854}
IMPERATIVE_NT'report someone resolving a dvd' {unit: 3} {imperative definition: 855}
IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 3} {imperative definition: 856}
IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 857}
IMPERATIVE_NT'before grouping together dvds' {unit: 3} {imperative definition: 858}
SENTENCE_NT'approaching is an action applying to one thing' {unit: 3} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'approaching'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'carry out someone approaching' {unit: 3} {imperative definition: 852}
IMPERATIVE_NT'carry out someone approaching' {unit: 3} {imperative definition: 859}
SENTENCE_NT'a coupon is a kind of thing' {unit: 3} {classified} {interpretation of subject: infs'dvd'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'coupon' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=coupon(x) >>} {refers: infs'coupon'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 3} {imperative definition: 853}
IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 3} {imperative definition: 860}
SENTENCE_NT'the block giving rule is not listed in any rulebook' {unit: 3} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {rule placement sense: negative} {special meaning: rule-listed-in}
UNPARSED_NOUN_NT'the block giving rule'
UNPARSED_NOUN_NT'in any rulebook'
IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 3} {imperative definition: 854}
IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 3} {imperative definition: 855}
IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 3} {imperative definition: 856}
IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 3} {imperative definition: 861}
IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 3} {imperative definition: 862}
IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 3} {imperative definition: 863}
SENTENCE_NT'infection color is a kind of value' {unit: 3} {classified} {interpretation of subject: infs'coupon'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'infection color' {refined} {creation: << kind=infection color(x) >>} {refers: infs'object'-k} {eval: TEST_VALUE_NT} {created here}
@ -257,7 +257,7 @@ ROOT_NT
AND_NT',' {refined}
PROPER_NOUN_NT'saffron silk' {refined} {refers: infs'saffron silk'} {eval: CONSTANT_NT'saffron silk' {kind: infection color} {instance: I81'saffron silk'[infection color]} {enumeration: 25}} {created here}
PROPER_NOUN_NT'cookie dough cream' {refined} {refers: infs'cookie dough cream'} {eval: CONSTANT_NT'cookie dough cream' {kind: infection color} {instance: I82'cookie dough cream'[infection color]} {enumeration: 26}} {created here}
IMPERATIVE_NT'to say list of flavors' {unit: 3} {imperative definition: 857}
IMPERATIVE_NT'to say list of flavors' {unit: 3} {imperative definition: 864}
SENTENCE_NT'understand "ask vanessa for [flavored ice cream]" as buying ' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"ask vanessa for [flavored ice cream]"'
@ -270,8 +270,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'buying the flavor'
UNPARSED_NOUN_NT'applying to one infection color'
IMPERATIVE_NT'check buying the flavor' {unit: 3} {imperative definition: 858}
IMPERATIVE_NT'carry out buying the flavor' {unit: 3} {imperative definition: 859}
IMPERATIVE_NT'check buying the flavor' {unit: 3} {imperative definition: 865}
IMPERATIVE_NT'carry out buying the flavor' {unit: 3} {imperative definition: 866}
SENTENCE_NT'understand "ice cream" or "cream" or "ice" or "sherbet" or "' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"ice cream" or "cream" or "ice" or "sherbet" or "sorbet"'
@ -305,12 +305,12 @@ ROOT_NT
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'the infection color property'
UNPARSED_NOUN_NT'referring to an ice cream cone'
IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 3} {imperative definition: 860}
IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 3} {imperative definition: 861}
IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 3} {imperative definition: 862}
IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 3} {imperative definition: 863}
IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 3} {imperative definition: 867}
IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 3} {imperative definition: 868}
IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 3} {imperative definition: 869}
IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 3} {imperative definition: 870}
HEADING_NT'section 2 - infection rules' {heading 5} {under: H5'section 2 - infection rules'} {unit: 3}
IMPERATIVE_NT'this is the infection rule' {unit: 3} {imperative definition: 864}
IMPERATIVE_NT'this is the infection rule' {unit: 3} {imperative definition: 871}
SENTENCE_NT'a person can be infected or clean' {unit: 3} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
@ -323,11 +323,11 @@ ROOT_NT
COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
ALLOWED_NT'has' {refined}
UNPARSED_NOUN_NT'infection color' {indefinite 'an' n/m/f nom/acc s} {refined}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 865}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 866}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 867}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 868}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 869}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 872}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 873}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 874}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 875}
IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 876}
SENTENCE_NT'understand "sneeze on [something]" as sneezing on' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"sneeze on [something]"'
@ -336,11 +336,11 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'sneezing on'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'check sneezing on' {unit: 3} {imperative definition: 870}
IMPERATIVE_NT'carry out sneezing on' {unit: 3} {imperative definition: 871}
IMPERATIVE_NT'carry out someone sneezing on' {unit: 3} {imperative definition: 872}
IMPERATIVE_NT'report sneezing on' {unit: 3} {imperative definition: 873}
IMPERATIVE_NT'report someone sneezing on' {unit: 3} {imperative definition: 874}
IMPERATIVE_NT'check sneezing on' {unit: 3} {imperative definition: 877}
IMPERATIVE_NT'carry out sneezing on' {unit: 3} {imperative definition: 878}
IMPERATIVE_NT'carry out someone sneezing on' {unit: 3} {imperative definition: 879}
IMPERATIVE_NT'report sneezing on' {unit: 3} {imperative definition: 880}
IMPERATIVE_NT'report someone sneezing on' {unit: 3} {imperative definition: 881}
SENTENCE_NT'understand "inject [someone] with [something]" as injecting ' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"inject [someone] with [something]"'
@ -361,10 +361,10 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'injecting it with'
UNPARSED_NOUN_NT'applying to two things'
IMPERATIVE_NT'check injecting it with' {unit: 3} {imperative definition: 875}
IMPERATIVE_NT'carry out injecting it with' {unit: 3} {imperative definition: 876}
IMPERATIVE_NT'after injecting the player with something' {unit: 3} {imperative definition: 877}
IMPERATIVE_NT'report injecting it with' {unit: 3} {imperative definition: 878}
IMPERATIVE_NT'check injecting it with' {unit: 3} {imperative definition: 882}
IMPERATIVE_NT'carry out injecting it with' {unit: 3} {imperative definition: 883}
IMPERATIVE_NT'after injecting the player with something' {unit: 3} {imperative definition: 884}
IMPERATIVE_NT'report injecting it with' {unit: 3} {imperative definition: 885}
HEADING_NT'section 3 - geography' {heading 5} {under: H5'section 3 - geography'} {unit: 3}
INCLUSION_NT'include locksmith by emily short' {unit: 3}
HEADING_NT'version 14 of locksmith by emily short begins here' {heading 0} {under: H0'version 14 of locksmith by emily short begins here'} {includes: Locksmith by Emily Short v14 } {unit: 3}
@ -389,9 +389,9 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'going toward'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'check going toward' {unit: 3} {imperative definition: 916}
IMPERATIVE_NT'carry out going toward' {unit: 3} {imperative definition: 917}
IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 3} {imperative definition: 918}
IMPERATIVE_NT'check going toward' {unit: 3} {imperative definition: 923}
IMPERATIVE_NT'carry out going toward' {unit: 3} {imperative definition: 924}
IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 3} {imperative definition: 925}
SENTENCE_NT'understand "stop" or "cease" as stopping' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"stop" or "cease"'
@ -400,11 +400,11 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'stopping'
UNPARSED_NOUN_NT'applying to nothing'
IMPERATIVE_NT'carry out stopping' {unit: 3} {imperative definition: 919}
IMPERATIVE_NT'report stopping' {unit: 3} {imperative definition: 920}
IMPERATIVE_NT'after going to an air-conditioned room' {unit: 3} {imperative definition: 921}
IMPERATIVE_NT'after going from an air-conditioned room' {unit: 3} {imperative definition: 922}
IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 3} {imperative definition: 923}
IMPERATIVE_NT'carry out stopping' {unit: 3} {imperative definition: 926}
IMPERATIVE_NT'report stopping' {unit: 3} {imperative definition: 927}
IMPERATIVE_NT'after going to an air-conditioned room' {unit: 3} {imperative definition: 928}
IMPERATIVE_NT'after going from an air-conditioned room' {unit: 3} {imperative definition: 929}
IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 3} {imperative definition: 930}
SENTENCE_NT'the alfred cralle pool hall is a room' {unit: 3} {classified} {interpretation of subject: infs'person'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'alfred cralle pool hall' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'alfred cralle pool hall'} {eval: CONSTANT_NT'alfred cralle pool hall' {kind: object} {instance: I83'alfred cralle pool hall'} {enumeration: 0}} {created here}
@ -446,7 +446,7 @@ ROOT_NT
PROPER_NOUN_NT'felt door' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'felt door'} {eval: CONSTANT_NT'felt door' {kind: door} {instance: I85'felt door'} {enumeration: 0}}
PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}
PROPER_NOUN_NT'"It has a prominent lock, designed for an old-fashioned key.' {refined} {eval: CONSTANT_NT'"It has a prominent lock, designed for an old-fashioned key.' {kind: text}}
IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 3} {imperative definition: 924}
IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 3} {imperative definition: 931}
SENTENCE_NT'nancy johnson memorial square is west of the felt door' {unit: 3} {classified} {interpretation of subject: infs'key to the city'}
VERB_NT'is west of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: west of}
PROPER_NOUN_NT'nancy johnson memorial square' {refined} {refers: infs'nancy johnson memorial square'} {eval: CONSTANT_NT'nancy johnson memorial square' {kind: object} {instance: I87'nancy johnson memorial square'} {enumeration: 0}} {created here}
@ -508,8 +508,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'slot' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'slot'} {eval: CONSTANT_NT'slot' {kind: object} {instance: I92'slot'} {enumeration: 0}}
COMMON_NOUN_NT'container' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'container'} {creation: << kind=container(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'carry out inserting something into the slot' {unit: 3} {imperative definition: 925}
IMPERATIVE_NT'report inserting something into the slot' {unit: 3} {imperative definition: 926}
IMPERATIVE_NT'carry out inserting something into the slot' {unit: 3} {imperative definition: 932}
IMPERATIVE_NT'report inserting something into the slot' {unit: 3} {imperative definition: 933}
SENTENCE_NT'hamwi street is northeast of an iron gate' {unit: 3} {classified} {interpretation of subject: infs'slot'}
VERB_NT'is northeast of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: northeast of}
PROPER_NOUN_NT'hamwi street' {refined} {refers: infs'hamwi street'} {eval: CONSTANT_NT'hamwi street' {kind: object} {instance: I93'hamwi street'} {enumeration: 0}} {created here}
@ -533,7 +533,7 @@ ROOT_NT
AND_NT'and' {refined}
ADJECTIVE_NT'lockable' {refined} {predicate: lockable} {creation: << lockable(x) ^ lockable(x) >>}
ADJECTIVE_NT'unlocked' {refined} {predicate: unlocked} {creation: << unlocked(x) ^ unlocked(x) >>}
IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 3} {imperative definition: 927}
IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 3} {imperative definition: 934}
SENTENCE_NT'cold comfort ice cream is north of a metal door' {unit: 3} {classified} {interpretation of subject: infs'iron gate'}
VERB_NT'is north of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: north of}
PROPER_NOUN_NT'cold comfort ice cream' {refined} {refers: infs'cold comfort ice cream'} {eval: CONSTANT_NT'cold comfort ice cream' {kind: object} {instance: I95'cold comfort ice cream'} {enumeration: 0}} {created here}
@ -639,8 +639,8 @@ ROOT_NT
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"glass"'
UNPARSED_NOUN_NT'the box'
IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 3} {imperative definition: 928}
IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 3} {imperative definition: 929}
IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 3} {imperative definition: 935}
IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 3} {imperative definition: 936}
SENTENCE_NT'the syringe is in the emergency box' {unit: 3} {classified} {interpretation of subject: infs'emergency box'}
VERB_NT'is in' {verb 'be' 3p s act IS_TENSE +ve} {prep1: in}
PROPER_NOUN_NT'syringe' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'syringe'} {eval: CONSTANT_NT'syringe' {kind: object} {instance: I104'syringe'} {enumeration: 0}} {created here}
@ -743,8 +743,8 @@ ROOT_NT
SENTENCE_NT'use full-length room descriptions' {unit: 3} {classified}
VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}
UNPARSED_NOUN_NT'full-length room descriptions'
IMPERATIVE_NT'after looking in an outdoors room' {unit: 3} {imperative definition: 930}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 931}
IMPERATIVE_NT'after looking in an outdoors room' {unit: 3} {imperative definition: 937}
IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 938}
DEFN_CONT_NT'a door is proximate' {unit: 3}
CODE_BLOCK_NT
CODE_BLOCK_NT {control structure: IF}
@ -765,7 +765,7 @@ ROOT_NT
INVOCATION_NT'yes' {phrase invoked: <no-inter-name>}
INVOCATION_LIST_NT'no' {unit: 3}
INVOCATION_NT'no' {phrase invoked: <no-inter-name>}
IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 3} {imperative definition: 932}
IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 3} {imperative definition: 939}
SENTENCE_NT'blank is a room' {unit: 3} {classified} {interpretation of subject: infs'key to the city'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'blank' {refined} {refers: infs'blank'} {eval: CONSTANT_NT'blank' {kind: object} {instance: I108'blank'} {enumeration: 0}} {created here}
@ -991,15 +991,15 @@ ROOT_NT
PROPER_NOUN_NT'ned' {refined} {refers: infs'ned'} {eval: CONSTANT_NT'ned' {kind: man} {instance: I161'ned'} {enumeration: 0}}
RELATIONSHIP_NT'owns' {meaning: ownership-r} {refined}
PROPER_NOUN_NT'movie rental' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'movie rental store'} {eval: CONSTANT_NT'movie rental store' {kind: object} {instance: I99'movie rental store'} {enumeration: 0}}
IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 3} {imperative definition: 933}
IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 3} {imperative definition: 940}
SENTENCE_NT'the description of a person is usually "[The noun] [if the n' {unit: 3} {classified} {interpretation of subject: infs'ned'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
X_OF_Y_NT'description of a person' {definite 'the' n/m/f s/p nom/acc} {refined}
COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}
PROPER_NOUN_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {refined} {eval: CONSTANT_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {kind: text}}
IMPERATIVE_NT'after examining another person who is carrying something' {unit: 3} {imperative definition: 934}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 935}
IMPERATIVE_NT'after examining another person who is carrying something' {unit: 3} {imperative definition: 941}
IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 942}
HEADING_NT'section 5 - conversation' {heading 5} {under: H5'section 5 - conversation'} {unit: 3}
SENTENCE_NT'a person has a table name called conversation' {unit: 3} {classified}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
@ -1008,8 +1008,8 @@ ROOT_NT
PROPERTYCALLED_NT'called'
UNPARSED_NOUN_NT'table name' {indefinite 'a' n/m/f nom/acc s}
UNPARSED_NOUN_NT'conversation'
IMPERATIVE_NT'instead of asking someone about something' {unit: 3} {imperative definition: 936}
IMPERATIVE_NT'instead of telling someone about something' {unit: 3} {imperative definition: 937}
IMPERATIVE_NT'instead of asking someone about something' {unit: 3} {imperative definition: 943}
IMPERATIVE_NT'instead of telling someone about something' {unit: 3} {imperative definition: 944}
SENTENCE_NT'understand "recap" or "recall" or "review" as recalling conv' {unit: 3} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"recap" or "recall" or "review"'
@ -1018,7 +1018,7 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'recalling conversations'
UNPARSED_NOUN_NT'applying to nothing'
IMPERATIVE_NT'carry out recalling conversations' {unit: 3} {imperative definition: 938}
IMPERATIVE_NT'carry out recalling conversations' {unit: 3} {imperative definition: 945}
SENTENCE_NT'the conversation of a person is usually table of general chi' {unit: 3} {classified} {interpretation of subject: infs'person'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
X_OF_Y_NT'conversation of a person' {definite 'the' n/m/f s/p nom/acc} {refined}
@ -1033,7 +1033,7 @@ ROOT_NT
PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}
PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data} {meaning: {table of vanessa chatter = TABLE_MC}}}
TABLE_NT'table of vanessa chatter topic reply summary turn stamp char' {unit: 3}
IMPERATIVE_NT'after reading a command' {unit: 3} {imperative definition: 939}
IMPERATIVE_NT'after reading a command' {unit: 3} {imperative definition: 946}
HEADING_NT'section 6 - movement description' {heading 5} {under: H5'section 6 - movement description'} {unit: 3}
SENTENCE_NT'a person has some text called walk style' {unit: 3} {classified}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
@ -1080,8 +1080,8 @@ ROOT_NT
PROPER_NOUN_NT'"sashay"' {refined} {eval: CONSTANT_NT'"sashay"' {kind: text}}
TABLE_NT'table of visible exits character second third heading chosen' {unit: 3}
TABLE_NT'table of visible entrances character second third heading ch' {unit: 3}
IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 3} {imperative definition: 940}
IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 3} {imperative definition: 941}
IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 3} {imperative definition: 947}
IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 3} {imperative definition: 948}
SENTENCE_NT'a door has a person called last opener' {unit: 3} {classified} {interpretation of subject: infs'person'}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: << kind=door(x) >>} {eval: TEST_VALUE_NT}
@ -1089,21 +1089,21 @@ ROOT_NT
PROPERTYCALLED_NT'called'
UNPARSED_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s}
UNPARSED_NOUN_NT'last opener'
IMPERATIVE_NT'report someone opening a door' {unit: 3} {imperative definition: 942}
IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 3} {imperative definition: 943}
IMPERATIVE_NT'report someone opening a door' {unit: 3} {imperative definition: 949}
IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 3} {imperative definition: 950}
SENTENCE_NT'the last thing named is a thing that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'last thing named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last thing named' {nonlocal: 'last thing named'(var)thing}} {created here}
COMMON_NOUN_NT'thing that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=things variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 3} {imperative definition: 944}
IMPERATIVE_NT'report someone going a direction' {unit: 3} {imperative definition: 945}
IMPERATIVE_NT'this is the movement reporting rule' {unit: 3} {imperative definition: 946}
IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 3} {imperative definition: 947}
IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 3} {imperative definition: 951}
IMPERATIVE_NT'report someone going a direction' {unit: 3} {imperative definition: 952}
IMPERATIVE_NT'this is the movement reporting rule' {unit: 3} {imperative definition: 953}
IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 3} {imperative definition: 954}
SENTENCE_NT'the last person named is a person that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'last person named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last person named' {nonlocal: 'last person named'(var)person}} {created here}
COMMON_NOUN_NT'person that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=people variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 3} {imperative definition: 948}
IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 3} {imperative definition: 955}
SENTENCE_NT'group size is a number that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}} {created here}
@ -1112,19 +1112,19 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number} {meaning: {group size = VARIABLE_MC}}}
PROPER_NOUN_NT'1' {refined} {eval: CONSTANT_NT'1' {kind: number} {explicit literal} {number: 1}}
IMPERATIVE_NT'to clear marked people' {unit: 3} {imperative definition: 949}
IMPERATIVE_NT'before listing nondescript items' {unit: 3} {imperative definition: 950}
IMPERATIVE_NT'to describe patients' {unit: 3} {imperative definition: 951}
IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 3} {imperative definition: 952}
IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 3} {imperative definition: 953}
IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 3} {imperative definition: 954}
IMPERATIVE_NT'to clear marked people' {unit: 3} {imperative definition: 956}
IMPERATIVE_NT'before listing nondescript items' {unit: 3} {imperative definition: 957}
IMPERATIVE_NT'to describe patients' {unit: 3} {imperative definition: 958}
IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 3} {imperative definition: 959}
IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 3} {imperative definition: 960}
IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 3} {imperative definition: 961}
TABLE_NT'table of dipping phrases dipping "looks as though dipped in"' {unit: 3}
SENTENCE_NT'a door is usually scenery' {unit: 3} {classified} {interpretation of subject: infs'door'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: << kind=door(x) >>} {eval: TEST_VALUE_NT}
ADJECTIVE_NT'scenery' {refined} {predicate: scenery} {creation: << scenery(x) ^ scenery(x) >>}
IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 3} {imperative definition: 955}
IMPERATIVE_NT'to say optional comma' {unit: 3} {imperative definition: 956}
IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 3} {imperative definition: 962}
IMPERATIVE_NT'to say optional comma' {unit: 3} {imperative definition: 963}
SENTENCE_NT'test me with go to cold comfort / z / z / z / z / ask vaness' {unit: 3} {classified}
VERB_NT'test' {verb 'test' 3p p act IS_TENSE +ve} {prep2: with} {special meaning: test-with}
UNPARSED_NOUN_NT'me'

View file

@ -1,29 +1,30 @@
100.0% in inform7 run
68.1% in compilation to Inter
46.2% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass//
3.7% in //MajorNodes::pass_1//
68.3% in compilation to Inter
46.3% in //Sequence::undertake_queued_tasks//
4.7% in //MajorNodes::pre_pass//
3.6% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile//
1.1% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.4% in //RTPhrasebook::compile_entries//
1.1% in //Sequence::lint_inter//
0.7% in //ImperativeDefinitions::compile_first_block//
0.7% in //Sequence::undertake_queued_tasks//
0.3% in //CompletionModule::compile//
0.3% in //MajorNodes::pass_2//
0.3% in //RTKindConstructors::compile_permissions//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
4.5% not specifically accounted for
27.6% in running Inter pipeline
9.4% in step 14/15: generate inform6 -> auto.inf
7.1% in step 5/15: load-binary-kits
5.6% in step 6/15: make-synoptic-module
4.4% not specifically accounted for
27.5% in running Inter pipeline
9.1% in step 14/15: generate inform6 -> auto.inf
6.9% in step 5/15: load-binary-kits
5.8% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
0.3% in step 11/15: eliminate-redundant-labels
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
1.9% not specifically accounted for
3.7% in supervisor
1.8% not specifically accounted for
3.6% in supervisor
0.4% not specifically accounted for

View file

@ -147,16 +147,53 @@ The language of play is a natural language that varies.
The parameter-object is an object that varies.
The parameter-object variable is defined by Inter as "parameter_value".
Chapter - Startup
Startup rules is a rulebook.
The startup rulebook is accessible to Inter as "STARTUP_RB".
Startup rules have outcomes allow startup (success) and deny startup (failure).
Shutdown rules is a rulebook.
The shutdown rulebook is accessible to Inter as "SHUTDOWN_RB".
Starting the virtual machine (documented at act_startvm) is an activity.
Starting the virtual machine (documented at act_startvm) is an activity on nothing.
The starting the virtual machine activity is accessible to Inter as "STARTING_VIRTUAL_MACHINE_ACT".
The final code startup rule is listed first in for starting the virtual machine.
The final code startup rule is defined by Inter as "FINAL_CODE_STARTUP_R".
The for starting the virtual machine rules have default no outcome.
First startup rule (this is the virtual machine startup rule):
carry out the starting the virtual machine activity.
Section - Startup A (for Glulx only)
The start capturing startup text rule is listed in the before starting the virtual machine rules.
The start capturing startup text rule translates into Inter as "CAPTURE_STARTUP_TEXT_R".
Section - Startup B
The platform specific startup rule is listed in the before starting the virtual machine rules.
The platform specific startup rule translates into Inter as "PLATFORM_SPECIFIC_STARTUP_R".
The initialise memory rule is listed in the before starting the virtual machine rules.
The initialise memory rule translates into Inter as "INITIALISE_MEMORY_R".
The seed random number generator rule is listed in the before starting the virtual machine rules.
The seed random number generator rule translates into Inter as "SEED_RANDOM_NUMBER_GENERATOR_R".
Section - Startup C (for Glulx only)
The recover Glk objects rule is listed in the before starting the virtual machine rules.
The recover Glk objects rule translates into Inter as "GGRecoverObjects".
The sound channel initialisation rule is listed in the for starting the virtual machine rules.
The sound channel initialisation rule translates into Inter as "SOUND_CHANNEL_INIT_R".
The open built-in windows rule is listed in the for starting the virtual machine rules.
The open built-in windows rule translates into Inter as "OPEN_BUILT_IN_WINDOWS_R".
The display captured startup text rule is listed in the for starting the virtual machine rules.
The display captured startup text rule translates into Inter as "END_CAPTURE_STARTUP_TEXT_R".
Chapter - Printing activities
Printing the name of something (hidden in RULES command) (documented at act_pn) is an activity.
The printing the name activity is accessible to Inter as "PRINTING_THE_NAME_ACT".
@ -877,6 +914,15 @@ To replace line number (N - a number) in (T - text) with (replace - text)
To replace paragraph number (N - a number) in (T - text) with (replace - text)
(documented at ph_replacepara):
(- TEXT_TY_ReplaceBlob(PARA_BLOB, {-lvalue-by-reference:T}, {N}, {-by-reference:replace}); -).
To decide what number is the first index of text match
(documented at ph_textfirstindex):
(- (match0_idx2 ~= 0) * (match0_idx + 1) -).
To decide what number is the last index of text match
(documented at ph_textlastindex):
(- match0_idx2 -).
To decide what number is the length of text match
(documented at ph_textlength):
(- (match0_idx2 - match0_idx) -).
Section 3 - Regular Expressions
@ -894,6 +940,15 @@ To decide what text is text matching regular expression
To decide what text is text matching subexpression (N - a number)
(documented at ph_subexpressiontext):
(- TEXT_TY_RE_GetMatchVar({N}) -).
To decide what number is the first index of subexpression (n - a number)
(documented at ph_refirstindex):
(- (RE_Subexpressions-->{n}-->RE_DATA2 ~= 0) * (RE_Subexpressions-->{n}-->RE_DATA1 + 1) -).
To decide what number is the last index of subexpression (n - a number)
(documented at ph_relastindex):
(- ((RE_Subexpressions-->{n}-->RE_DATA2 >= 0) * RE_Subexpressions-->{n}-->RE_DATA2) -).
To decide what number is the length of subexpression (n - a number)
(documented at ph_relength):
(- (RE_Subexpressions-->{n}-->RE_DATA2 - RE_Subexpressions-->{n}-->RE_DATA1) -).
To decide what number is number of times (T - text) matches the regular expression
(find - text),case insensitively
(documented at ph_nummatchesre):
@ -1431,12 +1486,13 @@ Definition: a text is substituted rather than unsubstituted if I6 routine
Definition: a table name is empty rather than non-empty if the number of filled rows in it is 0.
Definition: a table name is full rather than non-full if the number of blank rows in it is 0.
Definition: a rulebook is empty rather than non-empty if I6 routine "RulebookEmpty" says so (it
contains no rules, so that following it does nothing and makes no decision).
Definition: a nothing based rulebook is empty rather than non-empty if I6 routine
"RulebookEmpty" says so (it contains no rules, so that following it does
nothing and makes no decision).
Definition: an activity is empty rather than non-empty if I6 routine "ActivityEmpty" says so (its
before, for and after rulebooks are all empty).
Definition: an activity is going on if I6 routine "TestActivity" says so (one
Definition: an activity on nothing is empty rather than non-empty if I6 routine
"ActivityEmpty" says so (its before, for and after rulebooks are all empty).
Definition: an activity on nothing is going on if I6 routine "TestActivity" says so (one
of its three rulebooks is currently being run).
Definition: a list of values is empty rather than non-empty if I6 routine

View file

@ -222,8 +222,8 @@ ph_abide ph_abidefor ph_abideanon _ doc338 "19.14" "19.14. Abide by"
rules_internal _ doc339 "19.15" "19.15. Two rulebooks used internally"
ph_charnum ph_numchars ph_wordnum ph_numwords ph_pwordnum ph_numpwords ph_upwordnum ph_numupwords ph_linenum ph_numlines ph_paranum ph_numparas _ doc343 "20.3" "20.3. Characters, words, punctuated words, unpunctuated words, lines, paragraphs"
ph_inlower ph_inupper ph_lowercase ph_uppercase ph_titlecase ph_sentencecase _ doc344 "20.4" "20.4. Upper and lower case letters"
ph_matches ph_exactlymatches ph_nummatches _ doc345 "20.5" "20.5. Matching and exactly matching"
ph_matchesre ph_exactlymatchesre ph_nummatchesre ph_matchtext ph_subexpressiontext _ doc346 "20.6" "20.6. Regular expression matching"
ph_matches ph_exactlymatches ph_textfirstindex ph_textlastindex ph_textlength ph_nummatches _ doc345 "20.5" "20.5. Matching and exactly matching"
ph_matchesre ph_exactlymatchesre ph_nummatchesre ph_matchtext ph_subexpressiontext ph_refirstindex ph_relastindex ph_relength _ doc346 "20.6" "20.6. Regular expression matching"
ph_subform _ doc347 "20.7" "20.7. Making new text with text substitutions"
ph_replacechar ph_replaceword ph_replacepword ph_replaceupword ph_replaceline ph_replacepara ph_replace ph_replacewordin ph_replacepwordin ph_replacere _ doc348 "20.8" "20.8. Replacements"
kind_listof _ doc350 "21.1" "21.1. Lists and entries"

View file

@ -2,30 +2,8 @@ Startup Template.
How programs for this architecture start up the virtual machine.
@ |VM_PreInitialise()| is called; then the "starting the virtual machine"
activity runs; and then |VM_Initialise()| is called.
@ |VM_Check_Functionality()| doesn't need to do anything in Z-Code.
=
[ VM_PreInitialise;
];
[ VM_Initialise i;
standard_interpreter = HDR_TERPSTANDARD-->0;
dict_start = HDR_DICTIONARY-->0;
dict_entry_size = dict_start->(dict_start->0 + 1);
dict_start = dict_start + dict_start->0 + 4;
dict_end = dict_start + ((dict_start - 2)-->0) * dict_entry_size;
buffer->0 = INPUT_BUFFER_LEN;
buffer2->0 = INPUT_BUFFER_LEN;
buffer3->0 = INPUT_BUFFER_LEN;
parse->0 = 15;
parse2->0 = 15;
if (BasicInformKit`FIX_RNG_CFGF) {
@random 10000 -> i;
i = -i-2000;
@random i -> i;
}
[ VM_Check_Functionality;
];

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -1,6 +1,6 @@
Capabilities Template.
Miscellaneous capabilities of the 16-bit architecture.
Miscellaneous capabilities of the 32-bit architecture.
@h Summary.
The 32-bit architecture is currently the default targeted by Inform, and is

View file

@ -882,6 +882,81 @@ Constant wintype_TextGrid = 4;
return ret;
];
@ |GGRecoverObjects| handles recovering the Glk objects after restarting or restoring.
=
[ GGRecoverObjects id;
! If GGRecoverObjects() has been called, all these stored IDs are
! invalid, so we start by clearing them all out.
! (In fact, after a restoreundo, some of them may still be good.
! For simplicity, though, we assume the general case.)
gg_mainwin = 0;
gg_statuswin = 0;
gg_quotewin = 0;
gg_scriptfref = 0;
gg_scriptstr = 0;
gg_savestr = 0;
statuswin_cursize = 0;
gg_foregroundchan = 0;
gg_backgroundchan = 0;
gg_commandstr = 0;
gg_command_reading = false;
! Also tell the game to clear its object references.
IdentifyGlkObject(0);
id = glk_stream_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_SAVESTR_ROCK: gg_savestr = id;
GG_SCRIPTSTR_ROCK: gg_scriptstr = id;
GG_COMMANDWSTR_ROCK: gg_commandstr = id;
gg_command_reading = false;
GG_COMMANDRSTR_ROCK: gg_commandstr = id;
gg_command_reading = true;
default: IdentifyGlkObject(1, 1, id, gg_arguments-->0);
}
id = glk_stream_iterate(id, gg_arguments);
}
id = glk_window_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_MAINWIN_ROCK: gg_mainwin = id;
GG_STATUSWIN_ROCK: gg_statuswin = id;
GG_QUOTEWIN_ROCK: gg_quotewin = id;
default: IdentifyGlkObject(1, 0, id, gg_arguments-->0);
}
id = glk_window_iterate(id, gg_arguments);
}
id = glk_fileref_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_SCRIPTFREF_ROCK: gg_scriptfref = id;
default: IdentifyGlkObject(1, 2, id, gg_arguments-->0);
}
id = glk_fileref_iterate(id, gg_arguments);
}
if (glk_gestalt(gestalt_Sound, 0)) {
id = glk_schannel_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_FOREGROUNDCHAN_ROCK: gg_foregroundchan = id;
GG_BACKGROUNDCHAN_ROCK: gg_backgroundchan = id;
default: IdentifyGlkObject(1, 3, id, gg_arguments-->0);
}
id = glk_schannel_iterate(id, gg_arguments);
}
if (gg_foregroundchan ~= 0) { glk_schannel_stop(gg_foregroundchan); }
if (gg_backgroundchan ~= 0) { glk_schannel_stop(gg_backgroundchan); }
}
! Tell the game to tie up any loose ends.
IdentifyGlkObject(2);
rfalse;
];
@h Debugging verb.
This powers the GLKLIST command, when there's a command parser to read it.

View file

@ -2,176 +2,121 @@ Startup Template.
How programs for this architecture start up the virtual machine.
@ This variable is set at startup, to avoid asking the interpreter over
and over again.
@ |VM_Check_Functionality| checks that we are running in a Glk interpreter,
as well as that it supports the minimum requirements, which are currently
that Glk supports unicode, and Glulx supports real numbers. If one of those
requirements is not met an error message will be shown before quitting.
=
Global unicode_gestalt_ok; ! Set if interpreter supports Unicode
[ VM_Check_Functionality res;
@gestalt 4 2 res; ! Test if this interpreter has Glk...
if (res == 0) quit; ! ...without which there would be nothing we could do
@ |VM_Initialise()| is almost the first routine called, except that the
"starting the virtual machine" activity is allowed to go first; and,
come to think of it, memory allocation has to be set up before even that,
and that in turn calls |VM_PreInitialise()| to do the absolute minimum.
! Set the VM's I/O system to be Glk.
@setiosys 2 0;
Arrangements are a little different here compared with the 16-bit architecture,
because some data is retained in the case of a restart.
if (~~glk_gestalt(gestalt_Unicode, 0)) {
Fatal_Error("This storyfile can only be run in an unicode interpreter.");
}
(Many thanks are due to Eliuk Blau, who found several tricky timing errors
here and elsewhere in the Glulx-specific code. Frankly, I feel like hanging
a sign on the following routines which reads "Congratulations on bringing
light to the Dark Room.")
=
[ VM_PreInitialise res;
@gestalt 4 2 res; ! Test if this interpreter has Glk...
if (res == 0) quit; ! ...without which there would be nothing we could do
unicode_gestalt_ok = false;
if (glk_gestalt(gestalt_Unicode, 0))
unicode_gestalt_ok = true;
! Set the VM's I/O system to be Glk.
@setiosys 2 0;
@gestalt 11 0 res; ! Test if this interpreter supports real numbers...
if (res == 0) {
Fatal_Error("This storyfile can only be run in a Glulx interpreter that supports floating-point arithmetic.");
}
];
[ VM_Initialise res sty i;
@gestalt 4 2 res; ! Test if this interpreter has Glk...
if (res == 0) quit; ! ...without which there would be nothing we could do
[ Fatal_Error msg;
gg_mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, GG_MAINWIN_ROCK);
glk_set_window(gg_mainwin);
print "Fatal Error: ", (string) msg, "^";
quit;
];
! First, we must go through all the Glk objects that exist, and see
! if we created any of them. One might think this strange, since the
! program has just started running, but remember that the player might
! have just typed "restart".
@h Capture startup text.
It is a semi-common problem for authors to do something which results in text
being printed before any Glk windows have been opened, which results in a fatal
interpreter error. (Or even worse, an extension is the cause, which the author
should not be expected to know the internal details of.) This is very frustrating,
as the author often will not know what is the cause of the error as any error
messages can't be shown until a Glk window is created; indeed it's often an error
message that is trying to be printed, which the author will never see. To help
authors, while we wait for the virtual machine to be set up (including a Glk
window) we can instead send any text to a memory stream. Then once the VM is ready
we can check if any text was sent to the memory stream, and then finally display
it in the window. We only capture 256 bytes, which may not be all that is attempted
to be printed, but hopefully it gives authors enough to identify the problem.
GGRecoverObjects();
=
Constant PRE_STARTUP_TEXT_CAPTURE_MAX_LEN = 256;
Array Pre_Startup_Text_Capture_Buffer -> PRE_STARTUP_TEXT_CAPTURE_MAX_LEN;
Array Pre_Startup_Text_Capture_Results --> 2;
Global Pre_Startup_Text_Capture_Stream;
! Sound channel initialisation, and RNG fixing, must be done now rather
! than later in case InitGlkWindow() returns a non-zero value.
[ CAPTURE_STARTUP_TEXT_R;
Pre_Startup_Text_Capture_Stream = glk_stream_open_memory(Pre_Startup_Text_Capture_Buffer, PRE_STARTUP_TEXT_CAPTURE_MAX_LEN, filemode_Write, 0);
glk_stream_set_current(Pre_Startup_Text_Capture_Stream);
rfalse;
];
[ END_CAPTURE_STARTUP_TEXT_R len;
glk_stream_close(Pre_Startup_Text_Capture_Stream, Pre_Startup_Text_Capture_Results);
len = Pre_Startup_Text_Capture_Results-->1;
if (len) {
if (len > PRE_STARTUP_TEXT_CAPTURE_MAX_LEN) {
len = PRE_STARTUP_TEXT_CAPTURE_MAX_LEN;
}
glk_put_buffer(Pre_Startup_Text_Capture_Buffer, len);
}
rfalse;
];
@h Set up the Glk objects.
=
[ SOUND_CHANNEL_INIT_R;
if (glk_gestalt(gestalt_Sound, 0)) {
if (gg_foregroundchan == 0)
if (gg_foregroundchan == 0) {
gg_foregroundchan = glk_schannel_create(GG_FOREGROUNDCHAN_ROCK);
if (gg_backgroundchan == 0)
}
if (gg_backgroundchan == 0) {
gg_backgroundchan = glk_schannel_create(GG_BACKGROUNDCHAN_ROCK);
}
if (BasicInformKit`FIX_RNG_CFGF) {
@random 10000 i;
i = -i-2000;
@setrandom i;
}
res = InitGlkWindow(0);
if (res ~= 0) return;
! Now, gg_mainwin and gg_storywin might already be set. If not, set them.
if (gg_mainwin == 0) {
! Open the story window.
res = InitGlkWindow(GG_MAINWIN_ROCK);
if (res == 0) {
! Left-justify the header style
glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Justification, 0);
! Try to make emphasized type in italics and not boldface
glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Weight, 0);
glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Oblique, 1);
gg_mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, GG_MAINWIN_ROCK);
}
if (gg_mainwin == 0) quit; ! If we can't even open one window, give in
} else {
! There was already a story window. We should erase it.
glk_window_clear(gg_mainwin);
}
if (gg_statuswin == 0) {
res = InitGlkWindow(GG_STATUSWIN_ROCK);
if (res == 0) {
statuswin_cursize = statuswin_size;
for (sty=0: sty<style_NUMSTYLES: sty++)
glk_stylehint_set(wintype_TextGrid, sty, stylehint_ReverseColor, 1);
gg_statuswin =
glk_window_open(gg_mainwin, winmethod_Fixed + winmethod_Above,
statuswin_cursize, wintype_TextGrid, GG_STATUSWIN_ROCK);
}
}
! It's possible that the status window couldn't be opened, in which case
! gg_statuswin is now zero. We must allow for that later on.
glk_set_window(gg_mainwin);
InitGlkWindow(1);
! Empty the parse buffer (see bug 0001451)
buffer3-->0 = 0;
}
rfalse;
];
[ GGRecoverObjects id;
! If GGRecoverObjects() has been called, all these stored IDs are
! invalid, so we start by clearing them all out.
! (In fact, after a restoreundo, some of them may still be good.
! For simplicity, though, we assume the general case.)
gg_mainwin = 0;
gg_statuswin = 0;
gg_quotewin = 0;
gg_scriptfref = 0;
gg_scriptstr = 0;
gg_savestr = 0;
statuswin_cursize = 0;
gg_foregroundchan = 0;
gg_backgroundchan = 0;
gg_commandstr = 0;
gg_command_reading = false;
! Also tell the game to clear its object references.
IdentifyGlkObject(0);
[ OPEN_BUILT_IN_WINDOWS_R res sty;
! gg_mainwin and gg_storywin might already be set. If not, create them.
id = glk_stream_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_SAVESTR_ROCK: gg_savestr = id;
GG_SCRIPTSTR_ROCK: gg_scriptstr = id;
GG_COMMANDWSTR_ROCK: gg_commandstr = id;
gg_command_reading = false;
GG_COMMANDRSTR_ROCK: gg_commandstr = id;
gg_command_reading = true;
default: IdentifyGlkObject(1, 1, id, gg_arguments-->0);
}
id = glk_stream_iterate(id, gg_arguments);
}
id = glk_window_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_MAINWIN_ROCK: gg_mainwin = id;
GG_STATUSWIN_ROCK: gg_statuswin = id;
GG_QUOTEWIN_ROCK: gg_quotewin = id;
default: IdentifyGlkObject(1, 0, id, gg_arguments-->0);
}
id = glk_window_iterate(id, gg_arguments);
}
id = glk_fileref_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_SCRIPTFREF_ROCK: gg_scriptfref = id;
default: IdentifyGlkObject(1, 2, id, gg_arguments-->0);
}
id = glk_fileref_iterate(id, gg_arguments);
}
if (glk_gestalt(gestalt_Sound, 0)) {
id = glk_schannel_iterate(0, gg_arguments);
while (id) {
switch (gg_arguments-->0) {
GG_FOREGROUNDCHAN_ROCK: gg_foregroundchan = id;
GG_BACKGROUNDCHAN_ROCK: gg_backgroundchan = id;
default: IdentifyGlkObject(1, 3, id, gg_arguments-->0);
}
id = glk_schannel_iterate(id, gg_arguments);
if (gg_mainwin == 0) {
! Open the story window.
! Left-justify the header style
glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Justification, 0);
! Try to make emphasized type in italics and not boldface
glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Weight, 0);
glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Oblique, 1);
gg_mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, GG_MAINWIN_ROCK);
if (gg_mainwin == 0) {
! If we can't even open one window, give in
quit;
}
if (gg_foregroundchan ~= 0) { glk_schannel_stop(gg_foregroundchan); }
if (gg_backgroundchan ~= 0) { glk_schannel_stop(gg_backgroundchan); }
} else {
! There was already a story window. We should erase it.
glk_window_clear(gg_mainwin);
}
! Tell the game to tie up any loose ends.
IdentifyGlkObject(2);
if (gg_statuswin == 0) {
statuswin_cursize = statuswin_size;
for (sty=0: sty < style_NUMSTYLES: sty++) {
glk_stylehint_set(wintype_TextGrid, sty, stylehint_ReverseColor, 1);
}
gg_statuswin =
glk_window_open(gg_mainwin, winmethod_Fixed + winmethod_Above,
statuswin_cursize, wintype_TextGrid, GG_STATUSWIN_ROCK);
}
! It's possible that the status window couldn't be opened, in which case
! gg_statuswin is now zero. We must allow for that later on.
glk_set_window(gg_mainwin);
rfalse;
];

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -214,7 +214,6 @@ Constant RTP_FILEIOERROR = 48;
Constant RTP_HEAPERROR = 49;
Constant RTP_LISTRANGEERROR = 50;
Constant RTP_REGEXPSYNTAXERROR = 51;
Constant RTP_NOGLULXUNICODE = 52;
Constant RTP_BACKDROPONLY = 53;
Constant RTP_NOTTHING = 54;
Constant RTP_SCENEHASNTSTARTED = 55;

View file

@ -154,8 +154,6 @@ Array RTP_Buffer --> (-1) 0 0 0 0 0 0;
"always be 0 or more.^";
RTP_REGEXPSYNTAXERROR:
print "Syntax error in regular expression.^";
RTP_NOGLULXUNICODE:
print "This interpreter does not support Unicode.^";
RTP_NEGATIVEROOT:
print "You can't take the square root of a negative number.^";
RTP_CANTITERATE:

View file

@ -190,6 +190,9 @@ a previous match, setting them to the empty text.
Array RE_Subexpressions --> 11; ! Address of node for this subexpression
Array Allocated_Match_Vars --> 10; ! Indexed text to hold values of the variables
Global match0_idx; ! for plain text match, index of initial character match
Global match0_idx2; ! for plain text match, index of final character match
[ TEXT_TY_RE_DebugMatchVars txt
offset n i;
print RE_Subexpressions-->10, " collecting subexps^";
@ -1641,6 +1644,8 @@ For an explanation of the use of the word "blob", see "Text.i6t".
switch (ftxtype) {
REGEXP_BLOB: i = TEXT_TY_RE_CompileTree(ftxt, exactly);
CHR_BLOB: i = TEXT_TY_CHR_CompileTree(ftxt, exactly);
match0_idx = -1;
match0_idx2 = 0;
default: "*** bad ftxtype ***";
}
@ -1672,7 +1677,10 @@ For an explanation of the use of the word "blob", see "Text.i6t".
}
print " ***^";
}
if (ftxtype == CHR_BLOB) {
match0_idx = RE_PACKET_space-->RE_DATA1;
match0_idx2 = RE_PACKET_space-->RE_DATA2;
}
if (rtxt == 0) break; ! Accept only one match, replace nothing
if (rtxt ~= 0 or 1) {

View file

@ -2,26 +2,126 @@ Startup Template.
How the program starts up, in a Basic Inform project.
@ Because the functions below are replaced by |WorldModelKit| alternatives
@h Summary.
These rules perform the essential tasks required for setting up the virtual
machine. This includes checking that we are running in a compatible interpreter,
and setting up various built in Glk objects (when running in a Glk interpreter).
These rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
Arrangements are a little different here on the Z-machine, because some
data is retained in the case of a restart.
(Many thanks are due to Eliuk Blau, who found several tricky timing errors
here and elsewhere in the Glulx-specific code. Frankly, I feel like hanging
a sign on the following routines which reads "Congratulations on bringing
light to the Dark Room.")
@h The startup sequence.
As of IE-0022 we have a simplified startup sequence. |Main| calls the |Startup|
function, which does two things: run an Architecture16Kit/Architecture32Kit function
|VM_Check_Functionality| which checks the VM meets the minimum requirements for Inform
(in Glulx it would test a few Glulx/Glk gestalts; in Z-Code it would probably do
nothing.) Then it runs the Startup Rules. And that's it - everything else in the
startup sequence is now in Inform-accessible rules.
Because the functions below are replaced by |WorldModelKit| alternatives
if that kit is present, the following applies only to Basic Inform programs
where |WorldModelKit| is not involved.
=
[ Main;
self = COL_HSIZE; ! To ensure this definition is not optimised out
Startup();
Submain();
];
[ Startup;
VM_Check_Functionality();
say__pc = say__pc | PARA_NORULEBOOKBREAKS;
FollowRulebook(STARTUP_RB);
if (say__pc & PARA_NORULEBOOKBREAKS) say__pc = say__pc - PARA_NORULEBOOKBREAKS;
rfalse;
];
@h Initialise Memory Rule.
This rule amalgamates some minimal initialisations which all need to happen
before we can risk using some of the more exotic I7 kinds:
(a) The language definition might call for initialisation, although the
default language of play (English) does not.
(b) We start the machinery needed to check that property accesses are
valid during play.
(c) We initialise the memory allocation heap, and expand the literal
constants, as hinted above: these are called "block constants" since
they occupy blocks of memory.
(d) Some architecture-specific dictionary and parse buffer related globals
are initialised.
=
[ INITIALISE_MEMORY_R;
VM_PreInitialise();
LanguageInitialise();
HeapInitialise(); ! Create a completely unused memory allocation heap
StackFramingInitialise(); ! Create an empty stack
CreateDynamicRelations(); ! Create relation structures on the heap
#Ifdef TARGET_GLULX;
! Empty the parse buffer (see bug 0001451)
buffer3-->0 = 0;
#Ifnot;
standard_interpreter = HDR_TERPSTANDARD-->0;
dict_start = HDR_DICTIONARY-->0;
dict_entry_size = dict_start->(dict_start->0 + 1);
dict_start = dict_start + dict_start->0 + 4;
dict_end = dict_start + ((dict_start - 2)-->0) * dict_entry_size;
buffer->0 = INPUT_BUFFER_LEN;
buffer2->0 = INPUT_BUFFER_LEN;
buffer3->0 = INPUT_BUFFER_LEN;
parse->0 = 15;
parse2->0 = 15;
#Endif;
rfalse;
];
[ Main;
self = COL_HSIZE; ! To ensure this definition is not optimised out
VM_Initialise();
INITIALISE_MEMORY_R();
SEED_RANDOM_NUMBER_GENERATOR_R();
Submain();
@h Seed Random Number Generator Rule.
Unless a seed is provided by Inform, and it won't be for released story files,
the VM's interpreter is supposed to start up with a good seed in its random
number generator: something usually derived from, say, the milliseconds part
of the current time of day, which is unlikely to repeat or show any pattern
in real-world use. However, early Z-machine interpreters often did this quite
badly, starting with poor seed values which meant that the first few random
numbers always had something in common (being fairly small in their range,
for instance). To obviate this we extract and throw away 100 random numbers
to get the generator going, shaking out more obvious early patterns, but
that cannot really help much if the VM interpreter's RNG is badly written.
"Anyone who considers arithmetical methods of producing random digits is,
of course, in a state of sin" (von Neumann).
=
[ SEED_RANDOM_NUMBER_GENERATOR_R i;
if (BasicInformKit`FIX_RNG_CFGF) {
#Ifdef TARGET_GLULX;
@random 10000 i;
i = -i-2000;
@setrandom i;
#Ifnot;
@random 10000 -> i;
i = -i-2000;
@random i -> i;
#Endif;
}
if (RNG_SEED_AT_START_OF_PLAY) VM_Seed_RNG(RNG_SEED_AT_START_OF_PLAY);
for (i=1: i<=100: i++) random(i);
rfalse;
];

View file

@ -284,49 +284,45 @@ it's clearer to give two definitions, so:
FlexError("ran out with too many simultaneous text conversions");
}
if (unicode_gestalt_ok) {
SuspendRTP();
.RetryWithLargerBuffer;
saved_stream = glk_stream_get_current();
stream = glk_stream_open_memory_uni(buffer, RawBufferSize, filemode_Write, 0);
glk_stream_set_current(stream);
SuspendRTP();
.RetryWithLargerBuffer;
saved_stream = glk_stream_get_current();
stream = glk_stream_open_memory_uni(buffer, RawBufferSize, filemode_Write, 0);
glk_stream_set_current(stream);
@push say__p; @push say__pc;
ClearParagraphing(7);
if (from_snippet) print (PrintSnippet) from_value;
else print (PrintI6Text) from_value;
@pull say__pc; @pull say__p;
@push say__p; @push say__pc;
ClearParagraphing(7);
if (from_snippet) print (PrintSnippet) from_value;
else print (PrintI6Text) from_value;
@pull say__pc; @pull say__p;
results = buffer + buffer_size - 2*WORDSIZE;
glk_stream_close(stream, results);
if (saved_stream) glk_stream_set_current(saved_stream);
ResumeRTP();
results = buffer + buffer_size - 2*WORDSIZE;
glk_stream_close(stream, results);
if (saved_stream) glk_stream_set_current(saved_stream);
ResumeRTP();
len = results-->1;
if (len > RawBufferSize-1) {
! Glulx had to truncate text output because the buffer ran out:
! len is the number of characters which it tried to print
news = RawBufferSize;
while (news < len) news=news*2;
i = VM_AllocateMemory(news*WORDSIZE);
if (i ~= 0) {
if (memory_to_free) VM_FreeMemory(memory_to_free);
memory_to_free = i;
buffer = i;
RawBufferSize = news;
buffer_size = (RawBufferSize + 2)*WORDSIZE;
jump RetryWithLargerBuffer;
}
! Memory allocation refused: all we can do is to truncate the text
len = RawBufferSize-1;
len = results-->1;
if (len > RawBufferSize-1) {
! Glulx had to truncate text output because the buffer ran out:
! len is the number of characters which it tried to print
news = RawBufferSize;
while (news < len) news=news*2;
i = VM_AllocateMemory(news*WORDSIZE);
if (i ~= 0) {
if (memory_to_free) VM_FreeMemory(memory_to_free);
memory_to_free = i;
buffer = i;
RawBufferSize = news;
buffer_size = (RawBufferSize + 2)*WORDSIZE;
jump RetryWithLargerBuffer;
}
buffer-->(len) = 0;
TEXT_TY_CastPrimitiveNesting--;
BlkValueMassCopyFromArray(to_txt, buffer, 4, len+1);
} else {
RunTimeProblem(RTP_NOGLULXUNICODE);
! Memory allocation refused: all we can do is to truncate the text
len = RawBufferSize-1;
}
buffer-->(len) = 0;
TEXT_TY_CastPrimitiveNesting--;
BlkValueMassCopyFromArray(to_txt, buffer, 4, len+1);
if (memory_to_free) VM_FreeMemory(memory_to_free);
];
#endif;

View file

@ -55,14 +55,15 @@ Default LanguageCases 1;
@h Final Code Dependencies.
This function definition is a little misleading. The idea is that the
final code-generator can inject code of its own into the body here: for example,
the final code-generation for Glulx injects code into |FINAL_CODE_STARTUP_R|
the final code-generation for Glulx injects code into |PLATFORM_SPECIFIC_STARTUP_R|
to use accelerated VM support for certain veneer functions.
The other three are also misleading, in that final code-generation can add more
helpful code here: the fallbacks here are basic.
=
[ FINAL_CODE_STARTUP_R addr res;
[ PLATFORM_SPECIFIC_STARTUP_R addr res;
rfalse;
];
[ DebugAction a anames str;
@ -318,27 +319,6 @@ This is not quite so efficient as Memcpy, but not terrible.
rfalse;
];
@h Seed Random Number Generator Rule.
Unless a seed is provided by Inform, and it won't be for released story files,
the VM's interpreter is supposed to start up with a good seed in its random
number generator: something usually derived from, say, the milliseconds part
of the current time of day, which is unlikely to repeat or show any pattern
in real-world use. However, early Z-machine interpreters often did this quite
badly, starting with poor seed values which meant that the first few random
numbers always had something in common (being fairly small in their range,
for instance). To obviate this we extract and throw away 100 random numbers
to get the generator going, shaking out more obvious early patterns, but
that cannot really help much if the VM interpreter's RNG is badly written.
"Anyone who considers arithmetical methods of producing random digits is,
of course, in a state of sin" (von Neumann).
=
[ SEED_RANDOM_NUMBER_GENERATOR_R i;
if (RNG_SEED_AT_START_OF_PLAY) VM_Seed_RNG(RNG_SEED_AT_START_OF_PLAY);
for (i=1: i<=100: i++) random(i);
rfalse;
];
@h Regarding.
These are used with adaptive text.

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"needs": [ {
"need": {
@ -23,7 +23,7 @@
"defines-Main": false,
"provides-kinds": [ "Macros.neptune", "Protocols.neptune", "Core.neptune", "Punctuation.neptune", "Files.neptune" ],
"indexes-with-structure": "Basic.indext",
"configuration-flags": [ "AMERICAN_DIALECT", "AUTHORIAL_MODESTY", "ECHO_COMMANDS", "FIX_RNG", "MEMORY_ECONOMY", "NO_DEPRECATED", "NUMBERED_RULES", "PRINT_ENGINEER_EXPS", "SERIAL_COMMA", "NO_AUTO_PLURAL_NAMES" ],
"configuration-flags": [ "AMERICAN_DIALECT", "AUTHORIAL_MODESTY", "ECHO_COMMANDS", "FIX_RNG", "MEMORY_ECONOMY", "NO_AUTO_PLURAL_NAMES", "NO_DEPRECATED", "NUMBERED_RULES", "PRINT_ENGINEER_EXPS", "SERIAL_COMMA" ],
"configuration-values": [ "STACK_FRAME_CAPACITY", "TEXT_BUFFER_SIZE", "DICT_RESOLUTION" ]
}
}

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"needs": [ {
"need": {

View file

@ -22,10 +22,8 @@ Global EarlyInTurnSequence;
Global IterationsOfTurnSequence;
+replacing(from BasicInformKit) [ Main;
say__pc = say__pc | PARA_NORULEBOOKBREAKS;
rulebook_without_variables = ACTION_PROCESSING_RB;
FollowRulebook(STARTUP_RB);
if (say__pc & PARA_NORULEBOOKBREAKS) say__pc = say__pc - PARA_NORULEBOOKBREAKS;
Startup();
while (true) {
while (deadflag == false) {
EarlyInTurnSequence = true;
@ -38,17 +36,14 @@ Global IterationsOfTurnSequence;
}
];
@h Virtual Machine Startup Rule.
We delegate to the appropriate VM-specific section of code for the real work.
@h Initial Whitespace Rule.
The printing of three blank lines at the start of play is traditional: on early
Z-machine interpreters such as InfoTaskForce and Zip it was a necessity because
of the way they buffered output. On modern windowed ones it still helps to
space the opening text better.
=
[ VIRTUAL_MACHINE_STARTUP_R;
CarryOutActivity(STARTING_VIRTUAL_MACHINE_ACT);
VM_Initialise();
[ INITIAL_WHITESPACE_R;
! It is now safe for the paragraph breaking between rules mechanism to work
if (say__pc & PARA_NORULEBOOKBREAKS) say__pc = say__pc - PARA_NORULEBOOKBREAKS;
print "^^^";
@ -71,13 +66,10 @@ reads, say, "Mrs Bridges is a woman. The player is Mrs Bridges."): in
other circumstances they are often correct, but this must not be relied on.
@h Initialise Memory Rule.
This rule amalgamates some minimal initialisations which all need to happen
before we can risk using some of the more exotic I7 kinds:
In addition to BasicInformKit's memory initialisation, this rule sets up
the initial situation:
(a) The language definition might call for initialisation, although the
default language of play (English) does not.
(b) A handful of variables are filled in. |I7_LOOKMODE| is a constant
A handful of variables are filled in. |I7_LOOKMODE| is a constant
created by the use options "use full-length room descriptions" or
"use abbreviated room descriptions", but otherwise not existing. It is
particularly important that |player| have the correct value, as the
@ -91,23 +83,13 @@ we know better. We do this so that the "update chronological records rule"
cannot see where the player is: see the Standard Rules for an explanation
of why this is, albeit perhaps dubiously, a good thing.
(c) We start the machinery needed to check that property accesses are
valid during play.
(d) And we initialise the memory allocation heap, and expand the literal
constants, as hinted above: these are called "block constants" since
they occupy blocks of memory.
The |not_yet_in_play| flag, which is cleared when the first command is
about to be read from the keyboard, suppresses the standard status line
text: thus, if there is some long text to read before the player finds out
where he is, the surprise will not be spoiled.
=
+replacing(from BasicInformKit) [ INITIALISE_MEMORY_R;
VM_PreInitialise();
LanguageInitialise();
+replacing(keeping)(from BasicInformKit) [ INITIALISE_MEMORY_R;
not_yet_in_play = true;
lookmode = WorldModelKit`ROOM_DESC_DETAIL_CFGV;
player = InitialSituation-->PLAYER_OBJECT_INIS;
@ -115,9 +97,7 @@ where he is, the surprise will not be spoiled.
real_location = nothing;
location = nothing;
HeapInitialise(); ! Create a completely unused memory allocation heap
StackFramingInitialise(); ! Create an empty stack
CreateDynamicRelations(); ! Create relation structures on the heap
replaced`INITIALISE_MEMORY_R();
rfalse;
];

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6W69"
"version": "10.2.0-beta+6W71"
},
"needs": [ {
"need": {

View file

@ -9,6 +9,7 @@ To begin:
run test B;
run test C;
run test D;
run test E;
To run test A:
let Neptune be text;
@ -46,3 +47,124 @@ To run test D:
replace the punctuated word "system," in Neptune with "toad";
replace the punctuated word "." in Neptune with "!";
say "The redacted text: [Neptune][line break]".
To run test E:
say "text ''/'': ";
if "" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text ''/xyzzy: ";
if "" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "'' correctly doesn't match xyzzy.";
say "text trailing substring : plughxyzzy/xyzzy: ";
if "plughxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text leading substring: xyzzyplugh/xyzzy";
if "xyzzyplugh" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text internal substring plughxyzzyplugh/xyzzy: ";
if "plughxyzzyplugh" matches the text "xyzzy", say "t internal substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text multiple substring: xyzzyxyzzy/xyzzy: ";
if "xyzzyxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text non-blank/blank: ";
if "xyzzy" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text identical: xyzzy/xyzzy: ";
if "xyzzy" matches the text "xyzzy", say "text identical: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text reversed trailing substring xyzzy/plughxyzzy: ";
if "xyzzy" matches the text "plughxyzzy", say "text reversed trailing substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed substring xyzzy/xyzzyplugh: ";
if "xyzzy" matches the text "xyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed internal substring xyzzy/plughxyzzyplugh: ";
if "xyzzy" matches the text "plughxyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed multiple substring xyzzy/xyzzyxyzzy: ";
if "xyzzy" matches the text "xyzzyxyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "regexp ''/xyzzy: ";
if "" matches the regular expression "xyzzy", say "regexp blank/non-blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/'': ";
if "xyzzy" matches the regular expression "", say "regexp non-blank/blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/(xyzzy): ";
if "xyzzy" matches the regular expression "(xyzzy)", say "regexp identical: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed trailing substring: xyzzy/plugh(xyzzy): ";
if "xyzzy" matches the regular expression "plugh(xyzzy)", say "regexp reversed trailing substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed substring: xyzzy/(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "(xyzzy)plugh", say "regexp reversed substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "plugh(xyzzy)plugh", say "regexp reversed internal substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp multiple substring: xyzzy/xyzzy(xyzzy)?: ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed trailing substring: plughxyzzy/(xyzzy): ";
if "plughxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed leading substring xyzzyplugh/(xyzzy): ";
if "xyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed internal substring plughxyzzyplugh/(xyzzy): ";
if "plughxyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): ";
if "xyzzyxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "xyzzy/$^: ";
if "xyzzy" matches the regular expression "$^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/$.: ";
if "xyzzy" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "xyzzy/.^: ";
if "xyzzy" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/^$: ";
if "xyzzy" matches the regular expression "^$", say "problem.";
else say "correctly failed to match.";
say "regexp xyzzy/(?:): ";
if "xyzzy" matches the regular expression "(?:)", say "xyzzy/(?:) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
if "xyzzy" matches the regular expression "(.*)", say "xyzzy/(.*) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
if "xyzzy" matches the regular expression "(d?)", say "xyzzy/(d?) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/^$: ";
if "" matches the regular expression "^$", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/.*: ";
if "" matches the regular expression ".*", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
say "''/(?:): ";
if "" matches the regular expression "(?:)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
say "''/(d?): ";
if "" matches the regular expression "(d?)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/$.: ";
if "" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "''/.^: ";
if "" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "shinto/hint substring: ";
if "shinto" matches the text "hint", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "educate/du(cat): ";
if "educate" matches the regular expression "du(cat)", say "educate/ducat first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0] [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp Q*bert/x? :";
if "Q*bert" matches the regular expression "x?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp ham sandwich/(.+)\b(.+): ";
if "ham sandwich" matches the regular expression "(.+)\b(.+)", say "sub0: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0] sub1: first [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1]; sub2: first [first index of subexpression 2]; last [last index of subexpression 2]; length [length of subexpression 2].";
else say "problem.";

View file

@ -9,6 +9,7 @@ To begin:
run test B;
run test C;
run test D;
run test E;
To run test A:
let Neptune be text;
@ -46,3 +47,124 @@ To run test D:
replace the punctuated word "system," in Neptune with "toad";
replace the punctuated word "." in Neptune with "!";
say "The redacted text: [Neptune][line break]".
To run test E:
say "text ''/'': ";
if "" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text ''/xyzzy: ";
if "" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "'' correctly doesn't match xyzzy.";
say "text trailing substring : plughxyzzy/xyzzy: ";
if "plughxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text leading substring: xyzzyplugh/xyzzy";
if "xyzzyplugh" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text internal substring plughxyzzyplugh/xyzzy: ";
if "plughxyzzyplugh" matches the text "xyzzy", say "t internal substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text multiple substring: xyzzyxyzzy/xyzzy: ";
if "xyzzyxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text non-blank/blank: ";
if "xyzzy" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text identical: xyzzy/xyzzy: ";
if "xyzzy" matches the text "xyzzy", say "text identical: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text reversed trailing substring xyzzy/plughxyzzy: ";
if "xyzzy" matches the text "plughxyzzy", say "text reversed trailing substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed substring xyzzy/xyzzyplugh: ";
if "xyzzy" matches the text "xyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed internal substring xyzzy/plughxyzzyplugh: ";
if "xyzzy" matches the text "plughxyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed multiple substring xyzzy/xyzzyxyzzy: ";
if "xyzzy" matches the text "xyzzyxyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "regexp ''/xyzzy: ";
if "" matches the regular expression "xyzzy", say "regexp blank/non-blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/'': ";
if "xyzzy" matches the regular expression "", say "regexp non-blank/blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/(xyzzy): ";
if "xyzzy" matches the regular expression "(xyzzy)", say "regexp identical: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp reversed trailing substring: xyzzy/plugh(xyzzy): ";
if "xyzzy" matches the regular expression "plugh(xyzzy)", say "regexp reversed trailing substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "correctly failed to match.";
say "regexp reversed substring: xyzzy/(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "(xyzzy)plugh", say "regexp reversed substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "correctly failed to match.";
say "regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "plugh(xyzzy)plugh", say "regexp reversed internal substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "correctly failed to match.";
say "regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "correctly failed to match.";
say "regexp multiple substring: xyzzy/xyzzy(xyzzy)?: ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp reversed trailing substring: plughxyzzy/(xyzzy): ";
if "plughxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp reversed leading substring xyzzyplugh/(xyzzy): ";
if "xyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp reversed internal substring plughxyzzyplugh/(xyzzy): ";
if "plughxyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): ";
if "xyzzyxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "xyzzy/$^: ";
if "xyzzy" matches the regular expression "$^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/$.: ";
if "xyzzy" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "xyzzy/.^: ";
if "xyzzy" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/^$: ";
if "xyzzy" matches the regular expression "^$", say "problem.";
else say "correctly failed to match.";
say "regexp xyzzy/(?:): ";
if "xyzzy" matches the regular expression "(?:)", say "xyzzy/(?:) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
if "xyzzy" matches the regular expression "(.*)", say "xyzzy/(.*) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
if "xyzzy" matches the regular expression "(d?)", say "xyzzy/(d?) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "''/^$: ";
if "" matches the regular expression "^$", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/.*: ";
if "" matches the regular expression ".*", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
say "''/(?:): ";
if "" matches the regular expression "(?:)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
say "''/(d?): ";
if "" matches the regular expression "(d?)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "''/$.: ";
if "" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "''/.^: ";
if "" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "shinto/hint substring: ";
if "shinto" matches the text "hint", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "educate/du(cat): ";
if "educate" matches the regular expression "du(cat)", say "educate/ducat first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0]; sub1 [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp Q*bert/x? :";
if "Q*bert" matches the regular expression "x?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp ham sandwich/a(.+)\b(.+): ";
if "ham sandwich" matches the regular expression "a(.+)\b(.+)", say "sub0: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0] sub1: first [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1]; sub2: first [first index of subexpression 2]; last [last index of subexpression 2]; length [length of subexpression 2].";
else say "problem.";

View file

@ -9,6 +9,7 @@ To begin:
run test B;
run test C;
run test D;
run test E;
To run test A:
let Neptune be text;
@ -46,3 +47,125 @@ To run test D:
replace the punctuated word "system," in Neptune with "toad";
replace the punctuated word "." in Neptune with "!";
say "The redacted text: [Neptune][line break]".
To run test E:
say "text ''/'': ";
if "" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text ''/xyzzy: ";
if "" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "'' correctly doesn't match xyzzy.";
say "text trailing substring : plughxyzzy/xyzzy: ";
if "plughxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text leading substring: xyzzyplugh/xyzzy";
if "xyzzyplugh" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text internal substring plughxyzzyplugh/xyzzy: ";
if "plughxyzzyplugh" matches the text "xyzzy", say "t internal substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text multiple substring: xyzzyxyzzy/xyzzy: ";
if "xyzzyxyzzy" matches the text "xyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text non-blank/blank: ";
if "xyzzy" matches the text "", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text identical: xyzzy/xyzzy: ";
if "xyzzy" matches the text "xyzzy", say "text identical: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "text reversed trailing substring xyzzy/plughxyzzy: ";
if "xyzzy" matches the text "plughxyzzy", say "text reversed trailing substring: first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed substring xyzzy/xyzzyplugh: ";
if "xyzzy" matches the text "xyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed internal substring xyzzy/plughxyzzyplugh: ";
if "xyzzy" matches the text "plughxyzzyplugh", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "text reversed multiple substring xyzzy/xyzzyxyzzy: ";
if "xyzzy" matches the text "xyzzyxyzzy", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "correctly failed to match.";
say "regexp ''/xyzzy: ";
if "" matches the regular expression "xyzzy", say "regexp blank/non-blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/'': ";
if "xyzzy" matches the regular expression "", say "regexp non-blank/blank: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp xyzzy/(xyzzy): ";
if "xyzzy" matches the regular expression "(xyzzy)", say "regexp identical: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed trailing substring: xyzzy/plugh(xyzzy): ";
if "xyzzy" matches the regular expression "plugh(xyzzy)", say "regexp reversed trailing substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed substring: xyzzy/(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "(xyzzy)plugh", say "regexp reversed substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: ";
if "xyzzy" matches the regular expression "plugh(xyzzy)plugh", say "regexp reversed internal substring: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "correctly failed to match.";
say "regexp multiple substring: xyzzy/xyzzy(xyzzy)?: ";
if "xyzzy" matches the regular expression "xyzzy(xyzzy)?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed trailing substring: plughxyzzy/(xyzzy): ";
if "plughxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed leading substring xyzzyplugh/(xyzzy): ";
if "xyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed internal substring plughxyzzyplugh/(xyzzy): ";
if "plughxyzzyplugh" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): ";
if "xyzzyxyzzy" matches the regular expression "(xyzzy)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "xyzzy/$^: ";
if "xyzzy" matches the regular expression "$^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/$.: ";
if "xyzzy" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "xyzzy/.^: ";
if "xyzzy" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "xyzzy/^$: ";
if "xyzzy" matches the regular expression "^$", say "problem.";
else say "correctly failed to match.";
say "regexp xyzzy/(?:): ";
if "xyzzy" matches the regular expression "(?:)", say "xyzzy/(?:) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
if "xyzzy" matches the regular expression "(.*)", say "xyzzy/(.*) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
if "xyzzy" matches the regular expression "(d?)", say "xyzzy/(d?) first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/^$: ";
if "" matches the regular expression "^$", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/.*: ";
if "" matches the regular expression ".*", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
say "''/(?:): ";
if "" matches the regular expression "(?:)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
say "''/(d?): ";
if "" matches the regular expression "(d?)", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "''/$.: ";
if "" matches the regular expression "$.", say "problem.";
else say "correctly failed to match.";
say "''/.^: ";
if "" matches the regular expression ".^", say "problem.";
else say "correctly failed to match.";
say "shinto/hint substring: ";
if "shinto" matches the text "hint", say "first [first index of text match]; last [last index of text match]; length [length of text match].";
else say "problem.";
say "educate/du(cat): ";
if "educate" matches the regular expression "du(cat)", say "educate/ducat first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0] [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1].";
else say "problem.";
say "regexp Q*bert/x? :";
if "Q*bert" matches the regular expression "x?", say "first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0].";
else say "problem.";
say "regexp ham sandwich/(.+)\b(.+): ";
if "ham sandwich" matches the regular expression "(.+)\b(.+)", say "sub0: first [first index of subexpression 0]; last [last index of subexpression 0]; length [length of subexpression 0] sub1: first [first index of subexpression 1]; last [last index of subexpression 1]; length [length of subexpression 1]; sub2: first [first index of subexpression 2]; last [last index of subexpression 2]; length [length of subexpression 2].";
else say "problem.";

View file

@ -15,3 +15,44 @@ The original text: the capture of Triton may explain a number of features of the
The redacted text: potato capture of Triton may explain a number of features of potato Neptunian frog, including potato extremely eccentric orbit of Neptune's moon Nereid and potato scarcity of moons as compared to potato other gas giants.
The original text: The capture of Triton may explain a number of features of the Neptunian system, including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants.
The redacted text: The capture of Triton may explain a number of features of the Neptunian toad including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants!
text ""/"": first 0; last 0; length 0.
text ""/xyzzy: "" correctly doesn't match xyzzy.
text trailing substring : plughxyzzy/xyzzy: first 6; last 10; length 5.
text leading substring: xyzzyplugh/xyzzyfirst 1; last 5; length 5.
text internal substring plughxyzzyplugh/xyzzy: t internal substring: first 6; last 10; length 5.
text multiple substring: xyzzyxyzzy/xyzzy: first 1; last 5; length 5.
text non-blank/blank: first 0; last 0; length 0.
text identical: xyzzy/xyzzy: text identical: first 1; last 5; length 5.
text reversed trailing substring xyzzy/plughxyzzy: correctly failed to match.
text reversed substring xyzzy/xyzzyplugh: correctly failed to match.
text reversed internal substring xyzzy/plughxyzzyplugh: correctly failed to match.
text reversed multiple substring xyzzy/xyzzyxyzzy: correctly failed to match.
regexp ""/xyzzy: correctly failed to match.
regexp xyzzy/"": correctly failed to match.
regexp xyzzy/(xyzzy): regexp identical: first 1; last 5; length 5.
regexp reversed trailing substring: xyzzy/plugh(xyzzy): correctly failed to match.
regexp reversed substring: xyzzy/(xyzzy)plugh: correctly failed to match.
regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: correctly failed to match.
regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): correctly failed to match.
regexp multiple substring: xyzzy/xyzzy(xyzzy)?: first 1; last 5; length 5.
regexp reversed trailing substring: plughxyzzy/(xyzzy): first 6; last 10; length 5.
regexp reversed leading substring xyzzyplugh/(xyzzy): first 1; last 5; length 5.
regexp reversed internal substring plughxyzzyplugh/(xyzzy): first 6; last 10; length 5.
regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): first 1; last 5; length 5.
xyzzy/$^: correctly failed to match.
xyzzy/$.: correctly failed to match.
xyzzy/.^: correctly failed to match.
xyzzy/^$: correctly failed to match.
regexp xyzzy/(?:): xyzzy/(?:) first 0; last 0; length 0.
xyzzy/(.*) first 1; last 5; length 5.
xyzzy/(d?) first 0; last 0; length 0.
""/^$: first 0; last 0; length 0.
""/.*: first 0; last 0; length 0.
""/(?:): first 0; last 0; length 0.
""/(d?): first 0; last 0; length 0.
""/$.: correctly failed to match.
""/.^: correctly failed to match.
shinto/hint substring: first 2; last 5; length 4.
educate/du(cat): educate/ducat first 2; last 6; length 5 4; last 6; length 3.
regexp Q*bert/x? :first 0; last 0; length 0.
regexp ham sandwich/(.+)\b(.+): sub0: first 1; last 12; length 12 sub1: first 1; last 4; length 4; sub2: first 5; last 12; length 8.

View file

@ -15,3 +15,44 @@ The original text: the capture of Triton may explain a number of features of the
The redacted text: potato capture of Triton may explain a number of features of potato Neptunian frog, including potato extremely eccentric orbit of Neptune's moon Nereid and potato scarcity of moons as compared to potato other gas giants.
The original text: The capture of Triton may explain a number of features of the Neptunian system, including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants.
The redacted text: The capture of Triton may explain a number of features of the Neptunian toad including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants!
text ""/"": first 0; last 0; length 0.
text ""/xyzzy: "" correctly doesn't match xyzzy.
text trailing substring : plughxyzzy/xyzzy: first 6; last 10; length 5.
text leading substring: xyzzyplugh/xyzzyfirst 1; last 5; length 5.
text internal substring plughxyzzyplugh/xyzzy: t internal substring: first 6; last 10; length 5.
text multiple substring: xyzzyxyzzy/xyzzy: first 1; last 5; length 5.
text non-blank/blank: first 0; last 0; length 0.
text identical: xyzzy/xyzzy: text identical: first 1; last 5; length 5.
text reversed trailing substring xyzzy/plughxyzzy: correctly failed to match.
text reversed substring xyzzy/xyzzyplugh: correctly failed to match.
text reversed internal substring xyzzy/plughxyzzyplugh: correctly failed to match.
text reversed multiple substring xyzzy/xyzzyxyzzy: correctly failed to match.
regexp ""/xyzzy: correctly failed to match.
regexp xyzzy/"": correctly failed to match.
regexp xyzzy/(xyzzy): regexp identical: first 1; last 5; length 5; sub1 1; last 5; length 5.
regexp reversed trailing substring: xyzzy/plugh(xyzzy): correctly failed to match.
regexp reversed substring: xyzzy/(xyzzy)plugh: correctly failed to match.
regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: correctly failed to match.
regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): correctly failed to match.
regexp multiple substring: xyzzy/xyzzy(xyzzy)?: first 1; last 5; length 5; sub1 0; last 0; length 0.
regexp reversed trailing substring: plughxyzzy/(xyzzy): first 6; last 10; length 5; sub1 6; last 10; length 5.
regexp reversed leading substring xyzzyplugh/(xyzzy): first 1; last 5; length 5; sub1 1; last 5; length 5.
regexp reversed internal substring plughxyzzyplugh/(xyzzy): first 6; last 10; length 5; sub1 6; last 10; length 5.
regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): first 1; last 5; length 5; sub1 1; last 5; length 5.
xyzzy/$^: correctly failed to match.
xyzzy/$.: correctly failed to match.
xyzzy/.^: correctly failed to match.
xyzzy/^$: correctly failed to match.
regexp xyzzy/(?:): xyzzy/(?:) first 0; last 0; length 0; sub1 0; last 0; length 0.
xyzzy/(.*) first 1; last 5; length 5; sub1 1; last 5; length 5.
xyzzy/(d?) first 0; last 0; length 0; sub1 0; last 0; length 0.
""/^$: first 0; last 0; length 0.
""/.*: first 0; last 0; length 0.
""/(?:): first 0; last 0; length 0; sub1 0; last 0; length 0.
""/(d?): first 0; last 0; length 0; sub1 0; last 0; length 0.
""/$.: correctly failed to match.
""/.^: correctly failed to match.
shinto/hint substring: first 2; last 5; length 4.
educate/du(cat): educate/ducat first 2; last 6; length 5; sub1 4; last 6; length 3.
regexp Q*bert/x? :first 0; last 0; length 0.
regexp ham sandwich/a(.+)\b(.+): sub0: first 2; last 12; length 11 sub1: first 3; last 4; length 2; sub2: first 5; last 12; length 8.

View file

@ -15,3 +15,44 @@
The redacted text: potato capture of Triton may explain a number of features of potato Neptunian frog, including potato extremely eccentric orbit of Neptune's moon Nereid and potato scarcity of moons as compared to potato other gas giants.
The original text: The capture of Triton may explain a number of features of the Neptunian system, including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants.
The redacted text: The capture of Triton may explain a number of features of the Neptunian toad including the extremely eccentric orbit of Neptune's moon Nereid and the scarcity of moons as compared to the other gas giants!
text ""/"": first 0; last 0; length 0.
text ""/xyzzy: "" correctly doesn't match xyzzy.
text trailing substring : plughxyzzy/xyzzy: first 6; last 10; length 5.
text leading substring: xyzzyplugh/xyzzyfirst 1; last 5; length 5.
text internal substring plughxyzzyplugh/xyzzy: t internal substring: first 6; last 10; length 5.
text multiple substring: xyzzyxyzzy/xyzzy: first 1; last 5; length 5.
text non-blank/blank: first 0; last 0; length 0.
text identical: xyzzy/xyzzy: text identical: first 1; last 5; length 5.
text reversed trailing substring xyzzy/plughxyzzy: correctly failed to match.
text reversed substring xyzzy/xyzzyplugh: correctly failed to match.
text reversed internal substring xyzzy/plughxyzzyplugh: correctly failed to match.
text reversed multiple substring xyzzy/xyzzyxyzzy: correctly failed to match.
regexp ""/xyzzy: correctly failed to match.
regexp xyzzy/"": correctly failed to match.
regexp xyzzy/(xyzzy): regexp identical: first 1; last 5; length 5.
regexp reversed trailing substring: xyzzy/plugh(xyzzy): correctly failed to match.
regexp reversed substring: xyzzy/(xyzzy)plugh: correctly failed to match.
regexp reversed internal substring: xyzzy/plugh(xyzzy)plugh: correctly failed to match.
regexp reversed multiple substring: xyzzy/xyzzy(xyzzy): correctly failed to match.
regexp multiple substring: xyzzy/xyzzy(xyzzy)?: first 1; last 5; length 5.
regexp reversed trailing substring: plughxyzzy/(xyzzy): first 6; last 10; length 5.
regexp reversed leading substring xyzzyplugh/(xyzzy): first 1; last 5; length 5.
regexp reversed internal substring plughxyzzyplugh/(xyzzy): first 6; last 10; length 5.
regexp reversed multiple substring: xyzzyxyzzy/(xyzzy): first 1; last 5; length 5.
xyzzy/$^: correctly failed to match.
xyzzy/$.: correctly failed to match.
xyzzy/.^: correctly failed to match.
xyzzy/^$: correctly failed to match.
regexp xyzzy/(?:): xyzzy/(?:) first 0; last 0; length 0.
xyzzy/(.*) first 1; last 5; length 5.
xyzzy/(d?) first 0; last 0; length 0.
""/^$: first 0; last 0; length 0.
""/.*: first 0; last 0; length 0.
""/(?:): first 0; last 0; length 0.
""/(d?): first 0; last 0; length 0.
""/$.: correctly failed to match.
""/.^: correctly failed to match.
shinto/hint substring: first 2; last 5; length 4.
educate/du(cat): educate/ducat first 2; last 6; length 5 4; last 6; length 3.
regexp Q*bert/x? :first 0; last 0; length 0.
regexp ham sandwich/(.+)\b(.+): sub0: first 1; last 12; length 12 sub1: first 1; last 4; length 4; sub2: first 5; last 12; length 8.

View file

@ -76,7 +76,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
object [15]&nbsp;<a href=#A234><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
object [15]&nbsp;<a href=#A23><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
north&nbsp;
@ -370,7 +370,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
number&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc225.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1362><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
number&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc225.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A25><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
0&nbsp;
@ -387,7 +387,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
real number&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc225.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1363><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
real number&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc225.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A26><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
0&nbsp;
@ -404,7 +404,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
time&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc138.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1379><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
time&nbsp;<a href="Kinds.html?segment2"><img border=0 src=inform:/doc_images/calc1.png></a>&nbsp;<a href=inform:/doc138.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A42><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
9:00 AM&nbsp;
@ -421,7 +421,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
truth state&nbsp;<a href=inform:/doc161.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1364><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
truth state&nbsp;<a href=inform:/doc161.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A27><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
false&nbsp;
@ -438,7 +438,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
text&nbsp;<a href=#A1365><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
text&nbsp;<a href=#A28><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
""&nbsp;
@ -455,7 +455,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
snippet&nbsp;<a href=inform:/doc317.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1366><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
snippet&nbsp;<a href=inform:/doc317.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A29><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<i>word 1 of command</i>&nbsp;
@ -472,7 +472,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
unicode character&nbsp;<a href=#A1367><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
unicode character&nbsp;<a href=#A30><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
unicode 32 (<i>a space</i>)&nbsp;
@ -489,7 +489,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
action&nbsp;<a href=inform:/doc194.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1377><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
action&nbsp;<a href=inform:/doc194.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A40><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
waiting&nbsp;
@ -506,7 +506,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
scene&nbsp;<a href=inform:/doc148.html><img border=0 src=inform:/doc_images/help.png></a> [1]&nbsp;<a href=#A841><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
scene&nbsp;<a href=inform:/doc148.html><img border=0 src=inform:/doc_images/help.png></a> [1]&nbsp;<a href=#A24><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
Entire Game&nbsp;
@ -523,7 +523,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
command parser error [25]&nbsp;<a href=#A1406><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
command parser error [25]&nbsp;<a href=#A16><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
didn't understand error&nbsp;
@ -540,7 +540,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
dynasty&nbsp;<a href="source:story.ni#line3"><img border=0 src=inform:/doc_images/Reveal.png></a> [4]&nbsp;<a href=#A1408><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
dynasty&nbsp;<a href="source:story.ni#line3"><img border=0 src=inform:/doc_images/Reveal.png></a> [4]&nbsp;<a href=#A21><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
Stuart&nbsp;
@ -557,7 +557,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
use option&nbsp;<a href=#A1368><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
use option&nbsp;<a href=#A31><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
the ineffectual option&nbsp;
@ -574,7 +574,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
response&nbsp;<a href=#A1369><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
response&nbsp;<a href=#A32><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
?&nbsp;
@ -591,7 +591,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
verb&nbsp;<a href=inform:/doc220.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1370><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
verb&nbsp;<a href=inform:/doc220.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A33><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
verb be&nbsp;
@ -608,7 +608,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
table name&nbsp;<a href=inform:/doc258.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1371><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
table name&nbsp;<a href=inform:/doc258.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A34><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<i>a table with no rows or columns</i>&nbsp;
@ -625,7 +625,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">equation name&nbsp;<a href=#A1372><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">equation name&nbsp;<a href=#A35><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<span class="indexgrey"><i>an equation doing nothing</i></span>&nbsp;
@ -642,7 +642,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
rulebook outcome&nbsp;<a href=#A1373><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
rulebook outcome&nbsp;<a href=#A36><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
allow access&nbsp;
@ -659,7 +659,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">external file&nbsp;<a href=inform:/doc382.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1374><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">external file&nbsp;<a href=inform:/doc382.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A37><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<span class="indexgrey"><i>a non-file</i></span>&nbsp;
@ -676,7 +676,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">internal file&nbsp;<a href=#A1375><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">internal file&nbsp;<a href=#A38><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<span class="indexgrey"><i>a non-file</i></span>&nbsp;
@ -693,7 +693,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
action name&nbsp;<a href=inform:/doc96.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1378><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
action name&nbsp;<a href=inform:/doc96.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A41><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
waiting action&nbsp;
@ -710,7 +710,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
figure name&nbsp;<a href=inform:/doc374.html><img border=0 src=inform:/doc_images/help.png></a> [1]&nbsp;<a href=#A1380><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
figure name&nbsp;<a href=inform:/doc374.html><img border=0 src=inform:/doc_images/help.png></a> [1]&nbsp;<a href=#A43><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
Figure of cover&nbsp;
@ -727,7 +727,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">sound name&nbsp;<a href=inform:/doc377.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1381><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">sound name&nbsp;<a href=inform:/doc377.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A44><img border=0 src=inform:/doc_images/Below.png></a></span>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
<span class="indexgrey"><i>a silent non-sound</i></span>&nbsp;
@ -749,7 +749,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
natural language [1]&nbsp;<a href=#A1384><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
natural language [1]&nbsp;<a href=#A0><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
English language&nbsp;
@ -766,7 +766,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
grammatical tense&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [5]&nbsp;<a href=#A1386><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
grammatical tense&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [5]&nbsp;<a href=#A17><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
present tense&nbsp;
@ -783,7 +783,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
narrative viewpoint&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [6]&nbsp;<a href=#A1387><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
narrative viewpoint&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [6]&nbsp;<a href=#A18><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
first person singular&nbsp;
@ -800,7 +800,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
grammatical case&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [2]&nbsp;<a href=#A1388><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
grammatical case&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [2]&nbsp;<a href=#A19><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
nominative&nbsp;
@ -817,7 +817,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
grammatical gender&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [3]&nbsp;<a href=#A1389><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
grammatical gender&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> [3]&nbsp;<a href=#A20><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
neuter gender&nbsp;
@ -861,7 +861,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
list of K&nbsp;<a href=inform:/doc350.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A1429><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
list of K&nbsp;<a href=inform:/doc350.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A46><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
{ }
@ -869,7 +869,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
phrase K -> L&nbsp;<a href=#A2185><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
phrase K -> L&nbsp;<a href=#A55><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
<i>always the default value of L</i>
@ -877,7 +877,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey"></span>relation<span class="indexgrey"> of K</span>&nbsp;<a href=#A2190><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey"></span>relation<span class="indexgrey"> of K</span>&nbsp;<a href=#A57><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
<i>a relation never holding</i>
@ -885,7 +885,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">K based</span> rule<span class="indexgrey"> producing L</span>&nbsp;<a href=inform:/doc325.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A2193><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">K based</span> rule<span class="indexgrey"> producing L</span>&nbsp;<a href=inform:/doc325.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A58><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
the little-used do nothing rule
@ -893,7 +893,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">K based</span> rulebook<span class="indexgrey"> producing L</span>&nbsp;<a href=inform:/doc325.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A2196><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">K based</span> rulebook<span class="indexgrey"> producing L</span>&nbsp;<a href=inform:/doc325.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A59><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
the action-processing rules
@ -901,7 +901,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey"></span>activity<span class="indexgrey"> on K</span>&nbsp;<a href=inform:/doc285.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A2199><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey"></span>activity<span class="indexgrey"> on K</span>&nbsp;<a href=inform:/doc285.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A60><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
printing the name
@ -909,7 +909,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
description of K&nbsp;<a href=inform:/doc362.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A2205><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
description of K&nbsp;<a href=inform:/doc362.html><img border=0 src=inform:/doc_images/help.png></a>&nbsp;<a href=#A61><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
<i>matching nothing</i>
@ -917,7 +917,7 @@
</tr>
<tr class="stripetwo">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">K valued</span> property<span class="indexgrey"></span>&nbsp;<a href=#A2207><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">K valued</span> property<span class="indexgrey"></span>&nbsp;<a href=#A62><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
--
@ -925,7 +925,7 @@
</tr>
<tr class="stripeone">
<td style="white-space:nowrap;" align="left" valign="top" height="20">
<span class="indexgrey">K valued</span> table<span class="indexgrey"></span> column<span class="indexgrey"></span>&nbsp;<a href=#A2209><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="indexgrey">K valued</span> table<span class="indexgrey"></span> column<span class="indexgrey"></span>&nbsp;<a href=#A63><img border=0 src=inform:/doc_images/Below.png></a>&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top" colspan="4">
--
@ -958,7 +958,7 @@ Rooms are arranged in a map.<br>
world that is not a room. People, pieces of scenery, furniture, doors and
mislaid umbrellas might all be examples, and so might more surprising things
like the sound of birdsong or a shaft of sunlight.<br>
<i>Usually</i> unlit <i>not</i> lit, inedible <i>not</i> edible, portable <i>not</i> fixed in place, described <i>not</i> undescribed, unmarked for listing <i>not</i> marked for listing, mentioned <i>not</i> unmentioned.<br>
<i>Usually</i> unlit <i>not</i> lit, inedible <i>not</i> edible, portable <i>not</i> fixed in place, described <i>not</i> undescribed, unmarked for listing <i>not</i> marked for listing, unmentioned <i>not</i> mentioned.<br>
<i>Usually not</i> scenery, wearable, pushable between rooms, handled.<br>
<i>Can have</i> description (<i>text</i>), initial appearance (<i>text</i>), matching key (<i>object</i>).<br>
</p>
@ -1195,21 +1195,21 @@ When made with the Glulx setting, an Inform project can include sound effects or
<p class="tightin1"><i>Matches:</i> value, sayable value, understandable value, enumerated value<br>
<p class="tightin1"><span class="indexgrey">English language</span></p>
</p>
<p class="halftightin1"><a name=A17></a><b>grammatical tense&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical tenses)</p>
<p class="halftightin1"><a name=A17></a><b>grammatical tense&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical tenses)</p>
<p class="tightin1"><i>Matches:</i> value, sayable value, understandable value, enumerated value<br>
<p class="tightin1"><span class="indexgrey">present tense</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">past tense</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">perfect tense</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">past perfect tense</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">future tense</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
<p class="tightin1"><span class="indexgrey">present tense</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">past tense</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">perfect tense</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">past perfect tense</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">future tense</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
</p>
<p class="halftightin1"><a name=A18></a><b>narrative viewpoint&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> narrative viewpoints)</p>
<p class="halftightin1"><a name=A18></a><b>narrative viewpoint&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> narrative viewpoints)</p>
<p class="tightin1"><i>Matches:</i> value, sayable value, understandable value, enumerated value<br>
<p class="tightin1"><span class="indexgrey">first person singular</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">second person singular</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">third person singular</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">first person plural</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">second person plural</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">third person plural</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
<p class="tightin1"><span class="indexgrey">first person singular</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">second person singular</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">third person singular</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">first person plural</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">second person plural</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">third person plural</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
</p>
<p class="halftightin1"><a name=A19></a><b>grammatical case&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical cases)</p>
<p class="halftightin1"><a name=A19></a><b>grammatical case&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical cases)</p>
<p class="tightin1"><i>Matches:</i> value, sayable value, understandable value, enumerated value<br>
<p class="tightin1"><span class="indexgrey">nominative</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">accusative</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
<p class="tightin1"><span class="indexgrey">nominative</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">accusative</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
</p>
<p class="halftightin1"><a name=A20></a><b>grammatical gender&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical genders)</p>
<p class="halftightin1"><a name=A20></a><b>grammatical gender&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></b> (<i>plural</i> grammatical genders)</p>
<p class="tightin1"><i>Matches:</i> value, sayable value, understandable value, enumerated value<br>
<p class="tightin1"><span class="indexgrey">neuter gender</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">masculine gender</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">feminine gender</span>&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
<p class="tightin1"><span class="indexgrey">neuter gender</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">masculine gender</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a>, <span class="indexgrey">feminine gender</span>&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a></p>
</p>
<hr>
<p class="halftightin1"><a name=A46></a><b>list of K</b> (<i>plural</i> lists of K)&nbsp;<a href=inform:/doc350.html><img border=0 src=inform:/doc_images/help.png></a></p>

View file

@ -46,8 +46,8 @@ prior named object - <i>object</i><br>
latest parser error - <i>command parser error</i><br>
</p>
<p><b>Grammatical definitions</b><br>
story tense&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> - <i>grammatical tense</i><br>
story viewpoint&nbsp;<a href='inform://Extensions/Extensions/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> - <i>narrative viewpoint</i><br>
story tense&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> - <i>grammatical tense</i><br>
story viewpoint&nbsp;<a href='inform://Extensions/Documentation/Graham%20Nelson/English%20Language.html' title="English Language by Graham Nelson" style="text-decoration: none"><img border=0 src=inform:/doc_images/Revealext.png></a> - <i>narrative viewpoint</i><br>
</p>
<p><b></b><br>
royal family&nbsp;<a href="source:story.ni#line4"><img border=0 src=inform:/doc_images/Reveal.png></a> - <i>dynasty</i><br>

View file

@ -36,8 +36,8 @@ int ActivityRequests::new_activity_SMF(int task, parse_node *V, wording *NPs) {
}
break;
case PASS_1_SMFT:
Activities::new(Kinds::unary_con(CON_activity, K_nil),
Node::get_text(V->next));
Activities::new(Kinds::unary_con(CON_activity, K_object),
Node::get_text(V->next), TRUE);
break;
}
return FALSE;

View file

@ -1391,11 +1391,6 @@ allow one case, where the declaration is redundant and harmless.)
&& (a_kind)) {
if (Kinds::eq(a_kind, g_kind))
@<This sentence redundantly specifies the kind of value for a value@>;
if ((Kinds::get_construct(a_kind) == CON_activity) &&
(Kinds::get_construct(g_kind) == CON_activity) &&
(Kinds::eq(Kinds::unary_construction_material(a_kind), K_object)) &&
(Kinds::eq(Kinds::unary_construction_material(g_kind), K_nil)))
@<Amend kind of activity so that it is based on nothing@>;
if (Kinds::get_construct(a_kind) == CON_description)
@<Issue problem for trying to use a description as a literal@>;
}
@ -1464,15 +1459,6 @@ file: this may possibly be useful to I6 hackers.
}
return;
@ This is a very special case. We get here from "X is an activity based on
nothing" but not from "X is an activity", and so it can be used to override
the default assumption about the basis of an activity.
@<Amend kind of activity so that it is based on nothing@> =
activity *av = Rvalues::to_activity(Node::get_evaluation(px));
if (av) Activities::base_on_nothing(av);
return;
@ My, aren't we charming?
@<Dabble further in ruthless sarcasm@> =

View file

@ -360,7 +360,8 @@ from the tree.
W = GET_RW(<grammatical-gender-marker>, 1);
Annotations::write_int(p, explicit_gender_marker_ANNOT, <<r>> + 1);
}
if (<creation-problem-diagnosis>(W)) W = EMPTY_WORDING;
wording XW = W; DocReferences::position_of_symbol(&XW);
if (<creation-problem-diagnosis>(XW)) W = EMPTY_WORDING;
Node::set_text(p, W);
if (((create_as == NULL) || (Kinds::Behaviour::is_object(create_as))) &&
(prevailing_mood != INITIALLY_CE) &&
@ -666,7 +667,7 @@ them by asserting propositions to be true; we act directly.
Annotations::write_int(current_sentence, clears_pronouns_ANNOT, TRUE);
@<Create a new activity@> =
activity *av = Activities::new(create_as, W);
activity *av = Activities::new(create_as, W, FALSE);
if (av) val = Rvalues::from_activity(av);
Annotations::write_int(current_sentence, clears_pronouns_ANNOT, TRUE);

View file

@ -71,20 +71,17 @@ special Preform of its own; here is the subject phrase:
@
=
activity *Activities::new(kind *K, wording W) {
activity *Activities::new(kind *K, wording W, int bypassed) {
kind *on_kind = Kinds::unary_construction_material(K);
int kind_given = TRUE;
if (Kinds::eq(on_kind, K_nil)) {
kind_given = FALSE; on_kind = K_object;
}
LOG("So %W has kind given = %d, res = %u\n", W, kind_given, on_kind);
if (Kinds::eq(on_kind, K_nil)) kind_given = FALSE;
if (bypassed) { kind_given = FALSE; on_kind = K_object; }
<<ds>> = -1;
<<future>> = FALSE;
<<hide>> = FALSE;
<activity-sentence-subject>(W);
W = GET_RW(<activity-new-name>, 1);
wording doc_symbol = Wordings::one_word(<<ds>>);
@<The name can't have been used before@>;
@<The kind the activity is performed on, if there is one, must be definite@>;
@<If it is not of or for something, then it cannot have a kind@>;
@ -163,18 +160,6 @@ it; actually two -- for example, both "announcing" and "announcing activity".
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
ACTIVITY_MC, Rvalues::from_activity(av), Task::language_of_syntax());
@ The above mechanism for assuming that activities must be based on something --
objects, failing anything else -- can be wrong, and if so, the assertions
machinery call this:
=
void Activities::base_on_nothing(activity *av) {
av->activity_on_what_kind = K_nil;
Rulebooks::base_on_nothing(av->before_rules);
Rulebooks::base_on_nothing(av->for_rules);
Rulebooks::base_on_nothing(av->after_rules);
}
@ And its rulebooks are named with these constructions:
=

View file

@ -5,6 +5,12 @@ to symmetric (for relations).
@ See test case |BIP-Adjectives|.
Something to watch out for here is that the domain of an adjective with an
intentionally broad kind has to be written in a way which considers covariance
and contravariance. Thus, "list of values" matches every list, because "list of K"
is covariant: but "activity on values" does not match every activity, because
"activity on K" is contravariant, and instead "activity on nothing" is needed.
=
Part Four - Adjectival Definitions
@ -24,12 +30,13 @@ Definition: a text is substituted rather than unsubstituted if I6 routine
Definition: a table name is empty rather than non-empty if the number of filled rows in it is 0.
Definition: a table name is full rather than non-full if the number of blank rows in it is 0.
Definition: a rulebook is empty rather than non-empty if I6 routine "RulebookEmpty" says so (it
contains no rules, so that following it does nothing and makes no decision).
Definition: a nothing based rulebook is empty rather than non-empty if I6 routine
"RulebookEmpty" says so (it contains no rules, so that following it does
nothing and makes no decision).
Definition: an activity is empty rather than non-empty if I6 routine "ActivityEmpty" says so (its
before, for and after rulebooks are all empty).
Definition: an activity is going on if I6 routine "TestActivity" says so (one
Definition: an activity on nothing is empty rather than non-empty if I6 routine
"ActivityEmpty" says so (its before, for and after rulebooks are all empty).
Definition: an activity on nothing is going on if I6 routine "TestActivity" says so (one
of its three rulebooks is currently being run).
Definition: a list of values is empty rather than non-empty if I6 routine

View file

@ -78,22 +78,93 @@ Be wary modifying these: rulebooks and activities must be defined in exactly
the right order, matching definitions both in the Inform 7 compiler and in the
template libraries. (Remember that creating an activity creates three rulebooks.)
These rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
(a) The "virtual machine startup rule" carries out necessary steps to
begin execution on the virtual machine in use: this entails relatively little
on the Z-machine versions 5 or 8, but can involve extensive work to get the
screen display working on Glulx or Z6.
(b) The platform specific startup rule contains code which Inform injects for
the specific compilation platform. Note that this is not the same as an
architecture: both Glulx and C use the 32 bit architecture, but are different
platforms, and so might inject different code into this rule.
(c) The "initialise memory rule" starts up the memory allocation heap,
if there is one, and sets some essential I6 variables. If there is any rule
not to meddle with, this is it.
(d) The "seed random number generator rule" seeds the RNG to a fixed value
if Inform has requested this (which it does in response to the |-rng| command
line switch, which is in turn used by the |intest| testing utility: it's a
way to make deterministic tests of programs which use random values).
(e) The "recover Glk objects rule" runs the object recovery process in order to
identify and pre-existing Glk objects after a restart.
(f) The "open built-in windows rule" opens the Glk windows; only after this
point is it safe to print anything.
=
Chapter - Startup
Startup rules is a rulebook.
The startup rulebook is accessible to Inter as "STARTUP_RB".
Startup rules have outcomes allow startup (success) and deny startup (failure).
Shutdown rules is a rulebook.
The shutdown rulebook is accessible to Inter as "SHUTDOWN_RB".
Starting the virtual machine (documented at act_startvm) is an activity.
Starting the virtual machine (documented at act_startvm) is an activity on nothing.
The starting the virtual machine activity is accessible to Inter as "STARTING_VIRTUAL_MACHINE_ACT".
The final code startup rule is listed first in for starting the virtual machine.
The final code startup rule is defined by Inter as "FINAL_CODE_STARTUP_R".
The for starting the virtual machine rules have default no outcome.
First startup rule (this is the virtual machine startup rule):
carry out the starting the virtual machine activity.
Section - Startup A (for Glulx only)
The start capturing startup text rule is listed in the before starting the virtual machine rules.
The start capturing startup text rule translates into Inter as "CAPTURE_STARTUP_TEXT_R".
Section - Startup B
The platform specific startup rule is listed in the before starting the virtual machine rules.
The platform specific startup rule translates into Inter as "PLATFORM_SPECIFIC_STARTUP_R".
The initialise memory rule is listed in the before starting the virtual machine rules.
The initialise memory rule translates into Inter as "INITIALISE_MEMORY_R".
The seed random number generator rule is listed in the before starting the virtual machine rules.
The seed random number generator rule translates into Inter as "SEED_RANDOM_NUMBER_GENERATOR_R".
Section - Startup C (for Glulx only)
The recover Glk objects rule is listed in the before starting the virtual machine rules.
The recover Glk objects rule translates into Inter as "GGRecoverObjects".
@ These rules now set up the built in sound channels and windows.
=
The sound channel initialisation rule is listed in the for starting the virtual machine rules.
The sound channel initialisation rule translates into Inter as "SOUND_CHANNEL_INIT_R".
The open built-in windows rule is listed in the for starting the virtual machine rules.
The open built-in windows rule translates into Inter as "OPEN_BUILT_IN_WINDOWS_R".
The display captured startup text rule is listed in the for starting the virtual machine rules.
The display captured startup text rule translates into Inter as "END_CAPTURE_STARTUP_TEXT_R".
@ However, the two activities for printing names of objects are indeed
functional in Basic Inform.
=
Chapter - Printing activities
Printing the name of something (hidden in RULES command) (documented at act_pn) is an activity.
The printing the name activity is accessible to Inter as "PRINTING_THE_NAME_ACT".

View file

@ -1093,6 +1093,15 @@ To replace line number (N - a number) in (T - text) with (replace - text)
To replace paragraph number (N - a number) in (T - text) with (replace - text)
(documented at ph_replacepara):
(- TEXT_TY_ReplaceBlob(PARA_BLOB, {-lvalue-by-reference:T}, {N}, {-by-reference:replace}); -).
To decide what number is the first index of text match
(documented at ph_textfirstindex):
(- (match0_idx2 ~= 0) * (match0_idx + 1) -).
To decide what number is the last index of text match
(documented at ph_textlastindex):
(- match0_idx2 -).
To decide what number is the length of text match
(documented at ph_textlength):
(- (match0_idx2 - match0_idx) -).
@ ...and for regular expressions, though here we also have access to the
exact text which matched (not interesting in the plain text case since it's
@ -1118,6 +1127,15 @@ To decide what text is text matching regular expression
To decide what text is text matching subexpression (N - a number)
(documented at ph_subexpressiontext):
(- TEXT_TY_RE_GetMatchVar({N}) -).
To decide what number is the first index of subexpression (n - a number)
(documented at ph_refirstindex):
(- (RE_Subexpressions-->{n}-->RE_DATA2 ~= 0) * (RE_Subexpressions-->{n}-->RE_DATA1 + 1) -).
To decide what number is the last index of subexpression (n - a number)
(documented at ph_relastindex):
(- ((RE_Subexpressions-->{n}-->RE_DATA2 >= 0) * RE_Subexpressions-->{n}-->RE_DATA2) -).
To decide what number is the length of subexpression (n - a number)
(documented at ph_relength):
(- (RE_Subexpressions-->{n}-->RE_DATA2 - RE_Subexpressions-->{n}-->RE_DATA1) -).
To decide what number is number of times (T - text) matches the regular expression
(find - text),case insensitively
(documented at ph_nummatchesre):

View file

@ -371,14 +371,14 @@ This is the print the final question rule:
repeat through the Table of Final Question Options:
if the only if victorious entry is false or the story has ended finally:
if there is a final response rule entry
or the final response activity entry [activity] is not empty:
or the final response activity entry is not empty:
if there is a final question wording entry, increase named options count by 1;
if the named options count is less than 1, abide by the immediately quit rule;
say "Would you like to " (A);
repeat through the Table of Final Question Options:
if the only if victorious entry is false or the story has ended finally:
if there is a final response rule entry
or the final response activity entry [activity] is not empty:
or the final response activity entry is not empty:
if there is a final question wording entry:
say final question wording entry;
decrease named options count by 1;
@ -397,7 +397,7 @@ This is the standard respond to final question rule:
repeat through the Table of Final Question Options:
if the only if victorious entry is false or the story has ended finally:
if there is a final response rule entry
or the final response activity entry [activity] is not empty:
or the final response activity entry is not empty:
if the player's command matches the topic entry:
if there is a final response rule entry, abide by final response rule entry;
otherwise carry out the final response activity entry activity;

View file

@ -328,7 +328,7 @@ A thing can be privately-named or publicly-named. A thing is usually publicly-na
A thing can be undescribed or described. A thing is usually described.
A thing can be marked for listing or unmarked for listing. A thing is usually
unmarked for listing.
A thing can be mentioned or unmentioned. A thing is usually mentioned.
A thing can be mentioned or unmentioned. A thing is usually unmentioned.
@ We now have a mixed bag of value properties, all descriptive -- it's an
interesting reflection on how qualitative English text usually is that the

View file

@ -281,7 +281,7 @@ Chapter 2 - Rulebooks
Section 1 - The Standard Rulebooks
Turn sequence rules is a rulebook.
Turn sequence rules is a nothing based rulebook.
The turn sequence rulebook is accessible to Inter as "TURN_SEQUENCE_RB".
@ Now a set of rulebooks to do with the passage of time.
@ -481,34 +481,14 @@ Section 2 - The Standard Rules
The little-used do nothing rule is defined by Inter as "LITTLE_USED_DO_NOTHING_R".
@h Startup.
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
use of that ability here.
These startup rules prepare the various world model specific systems.
The "first" rules here are the ones which get the basic machinery working
to the point where it is safe to run arbitrary I7 source text. They necessarily
do very low-level things, and it is not guaranteed that I7 phrases will behave
to specification if executed before these early rules have finished. So it
is hazardous to obstruct or alter them.
(a) The printing of three blank lines at the start of play is traditional: on early
Z-machine interpreters such as InfoTaskForce and Zip it was a necessity because
of the way they buffered output. On modern windowed ones it still helps to
space the opening text better.
(a) The "initialise memory rule" starts up the memory allocation heap,
if there is one, and sets some essential I6 variables. If there is any rule
not to meddle with, this is it.
(b) The "virtual machine startup rule" carries out necessary steps to
begin execution on the virtual machine in use: this entails relatively little
on the Z-machine versions 5 or 8, but can involve extensive work to get the
screen display working on Glulx or Z6. Before anything else happens, however,
the "starting the virtual machine" activity (see below) is carried out.
(c) The "seed random number generator rule" seeds the RNG to a fixed value
if Inform has requested this (which it does in response to the |-rng| command
line switch, which is in turn used by the |intest| testing utility: it's a
way to make deterministic tests of programs which use random values).
(d) The "update chronological records rule" is described in further detail
(b) The "update chronological records rule" is described in further detail
below, since it appears both here and also in the turn sequence rulebook.
Here it's providing us with a baseline of initial truths from which we can
later assess conditions such as "the marble door has been open". A subtle
@ -520,12 +500,10 @@ Dining Room for three turns". It's as if the player teleports into an
already-existing world, like some Star Trek crewman, just in time for the
first command.
(e) All items begin unmentioned, as might be expected.
(f) And the "position player in model world rule" completes the initial
(c) The "position player in model world rule" completes the initial
construction of the spatial model world.
(g) The "start in the correct scenes rule" ensures that we start out
(d) The "start in the correct scenes rule" ensures that we start out
in the correct scenes. (This can't wait, because it's just conceivable
that somebody has written a rule with a preamble like "When play
begins during the Hunting Season...": it's also where the scene
@ -533,24 +511,18 @@ Entire Game begins.) That completes the necessary preliminaries before
ordinary I7 rules can be run.
=
The start in the correct scenes rule is listed first in the startup rulebook. [7th.]
The position player in model world rule is listed first in the startup rulebook. [6th.]
This is the declare everything initially unmentioned rule:
repeat with item running through things:
now the item is not mentioned.
The declare everything initially unmentioned rule is listed first in the startup rulebook. [5th]
The update chronological records rule is listed first in the startup rulebook. [4th.]
The seed random number generator rule is listed first in the startup rulebook. [3rd.]
The virtual machine startup rule is listed first in the startup rulebook. [2nd.]
The initialise memory rule is listed first in the startup rulebook. [1st.]
The initial whitespace rule is listed in the after starting the virtual machine rules.
The initial whitespace rule translates into Inter as "INITIAL_WHITESPACE_R".
The virtual machine startup rule is defined by Inter as "VIRTUAL_MACHINE_STARTUP_R".
The initialise memory rule is defined by Inter as "INITIALISE_MEMORY_R".
The seed random number generator rule is defined by Inter as "SEED_RANDOM_NUMBER_GENERATOR_R".
The update chronological records rule is defined by Inter as "UPDATE_CHRONOLOGICAL_RECORDS_R".
The position player in model world rule is defined by Inter as "POSITION_PLAYER_IN_MODEL_R".
The update chronological records rule is listed in the after starting the virtual machine rules.
The update chronological records rule translates into Inter as "UPDATE_CHRONOLOGICAL_RECORDS_R".
This is the start in the correct scenes rule: follow the scene changing rules.
The position player in model world rule is listed in the after starting the virtual machine rules.
The position player in model world rule translates into Inter as "POSITION_PLAYER_IN_MODEL_R".
The start in the correct scenes rule is listed in the after starting the virtual machine rules.
This is the start in the correct scenes rule:
follow the scene changing rules.
@ 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
@ -561,18 +533,17 @@ a change to be notified to the player as if it has happened through some
action.
=
The when play begins stage rule is listed in the startup rulebook.
The fix baseline scoring rule is listed in the startup rulebook.
The display banner rule is listed in the startup rulebook.
The initial room description rule is listed in the startup rulebook.
Startup rule (this is the when play begins stage rule):
follow the when play begins rulebook.
This is the when play begins stage rule: follow the when play begins rulebook.
Startup rule (this is the fix baseline scoring rule):
now the last notified score is the score.
This is the fix baseline scoring rule: now the last notified score is the score.
Startup rule (this is the display banner rule):
say "[banner text]".
This is the display banner rule: say "[banner text]".
This is the initial room description rule: try looking.
Startup rule (this is the initial room description rule):
try looking.
@h The turn sequence.
In each turn, a command is read and parsed from the keyboard, and any
@ -633,6 +604,9 @@ A first turn sequence rule (this is the every turn stage rule):
A first turn sequence rule (this is the early scene changing stage rule):
follow the scene changing rules. [4th.]
The generate action rule is listed first in the turn sequence rulebook. [3rd.]
This is the declare everything initially unmentioned rule:
repeat with item running through things:
now the item is not mentioned.
The declare everything initially unmentioned rule is listed first in the turn sequence rulebook. [2nd.]
The parse command rule is listed first in the turn sequence rulebook. [1st.]

View file

@ -39,7 +39,7 @@ void I6TargetCode::declare_function(code_generator *gtr, code_generation *gen,
if (Str::eq(fn_name, I"DebugAction")) @<Inject code at the top of DebugAction@>;
if (Str::eq(fn_name, I"DebugAttribute")) @<Inject code at the top of DebugAttribute@>;
if (Str::eq(fn_name, I"DebugProperty")) @<Inject code at the top of DebugProperty@>;
if (Str::eq(fn_name, I"FINAL_CODE_STARTUP_R")) @<Inject code at the top of FINAL_CODE_STARTUP_R@>;
if (Str::eq(fn_name, I"PLATFORM_SPECIFIC_STARTUP_R")) @<Inject code at the top of PLATFORM_SPECIFIC_STARTUP_R@>;
Vanilla::node(gen, vf->function_body); /* This compiles the body of the function */
@ -126,7 +126,7 @@ a bug in the previous Glulx spec -- but on the other hand, these accelerated
functions do not exist in earlier Glulx implementations. However, takeup of
3.1.3 has been swift. (See Jira bug I7-2328 and I7-1162.)
@<Inject code at the top of FINAL_CODE_STARTUP_R@> =
@<Inject code at the top of PLATFORM_SPECIFIC_STARTUP_R@> =
WRITE("#ifdef TARGET_GLULX;\n");
WRITE("@gestalt 9 0 res;\n");
WRITE("if (res == 0) rfalse;\n");

Some files were not shown because too many files have changed in this diff Show more