1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-17 07:40:47 +03:00

Improved syntax-colouring of weave

This commit is contained in:
Graham Nelson 2020-04-07 23:02:44 +01:00
parent fd4a46ddd8
commit 6e1fb88642
235 changed files with 3871 additions and 4888 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0 'Krypton' (7 April 2020)
v10.1.0-alpha.1+6Q35 'Krypton' (7 April 2020)
## About Inform 7

View file

@ -322,10 +322,10 @@ indefinite singular depends on the text of the object's name.
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">LanguageContractionForms</span><span class="plain">) {</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+9)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+9)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>

View file

@ -308,19 +308,15 @@ We abstract that with two routines to read and write entries.
<p class="inwebparagraph"><code class="display"><span class="extract">BlkValueRead</span></code> takes two compulsory arguments and one optional one. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">BlkValueRead(bv, n)</span>
<span class="identifier">BlkValueRead</span><span class="plain">(</span><span class="identifier">bv</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">reads the nth entry in the long block for <code class="display"><span class="extract">bv</span></code>, whereas
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">BlkValueRead(long_block, n, true)</span>
<span class="identifier">BlkValueRead</span><span class="plain">(</span><span class="identifier">long_block</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">read it from the given long block directly. <code class="display"><span class="extract">BlkValueWrite</span></code> is similar.
@ -458,11 +454,9 @@ they must both be of the same word size but can differ in header size.
Functionally, it's identical to
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">for (n=0: n&lt;no_entries_to_copy: n++)</span>
<span class="plain"> BlkValueWrite(to_bv, n, BlkValueRead(from_bv, n));</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">=0: </span><span class="identifier">n</span><span class="plain">&lt;</span><span class="identifier">no_entries_to_copy</span><span class="plain">: </span><span class="identifier">n</span><span class="plain">++)</span>
<span class="identifier">BlkValueWrite</span><span class="plain">(</span><span class="identifier">to_bv</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">BlkValueRead</span><span class="plain">(</span><span class="identifier">from_bv</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph">but it's much, much faster, and runs in a reasonably small number of cycles
@ -620,19 +614,15 @@ depending on the task in hand.
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. Creation. </b>To create a block value, call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">BlkValueCreate(kind)</span>
<span class="identifier">BlkValueCreate</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">where <code class="display"><span class="extract">K</span></code> is its (strong) kind ID. Optionally, call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">BlkValueCreate(K, short_block)</span>
<span class="identifier">BlkValueCreate</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">short_block</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">to mandate that the short block needs to be located at the given address
@ -645,10 +635,8 @@ outside the heap, for reasons to be seen below.
<p class="inwebparagraph">These work by delegating to:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(CREATE_KOVS, strong_kind, short_block)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">CREATE_KOVS</span><span class="plain">, </span><span class="identifier">strong_kind</span><span class="plain">, </span><span class="identifier">short_block</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">which returns the address of the short block for the new value.
@ -750,10 +738,8 @@ local variables.)
freed by calling the following routine exactly once:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">BlkValueFree(value)</span>
<span class="identifier">BlkValueFree</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">In particular, if a block value is stored in any I6 location which is about
@ -792,10 +778,8 @@ reference count of B.
<p class="inwebparagraph">The support function should respond to:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(COPYSB_KOVS, to_bv, from_bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">COPYSB_KOVS</span><span class="plain">, </span><span class="identifier">to_bv</span><span class="plain">, </span><span class="identifier">from_bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">by copying the short blocks alone.
@ -846,10 +830,8 @@ here's where.
<p class="inwebparagraph">We first call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(KINDDATA_KOVS, to_bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">KINDDATA_KOVS</span><span class="plain">, </span><span class="identifier">to_bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">which asks for an ID for the kinds stored in the BV: for example, for a
@ -873,10 +855,8 @@ spoiling anybody else's day. We resize it to make room for the incoming data;
we copy the raw data of the long block; and finally we:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(COPY_KOVS, to_bv, from_bv, k)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">COPY_KOVS</span><span class="plain">, </span><span class="identifier">to_bv</span><span class="plain">, </span><span class="identifier">from_bv</span><span class="plain">, </span><span class="identifier">k</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">This is where the KOVS should make a proper copy, using <code class="display"><span class="extract">BlkValueCopy</span></code> and
@ -908,10 +888,8 @@ is the value given us by <code class="display"><span class="extract">KINDDATA_KO
asking the kind's support function:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(COPYQUICK_KOVS, to_bv, from_bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">COPYQUICK_KOVS</span><span class="plain">, </span><span class="identifier">to_bv</span><span class="plain">, </span><span class="identifier">from_bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">which should return true if a quick copy is okay, or false if not.
@ -963,10 +941,8 @@ then destroying the data is on us. Since we don't know what's in the
long block, we have to ask the KOVS to do this by means of:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(DESTROY_KOVS, bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">DESTROY_KOVS</span><span class="plain">, </span><span class="identifier">bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">Note that all of this frequently causes recursion: destruction leads to
@ -1017,10 +993,8 @@ corrupting other block values.
<p class="inwebparagraph">We offer the KOVS a chance to handle this for us:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(MAKEMUTABLE_KOVS, bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">MAKEMUTABLE_KOVS</span><span class="plain">, </span><span class="identifier">bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">should return 0 to say that it has done so, or else return the size of the
@ -1064,10 +1038,8 @@ form of a cast, that is, a conversion of data from one kind to another:
or at least, for some kinds of value we can.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(CAST_KOVS, to_bv, original_kind, original_value)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">CAST_KOVS</span><span class="plain">, </span><span class="identifier">to_bv</span><span class="plain">, </span><span class="identifier">original_kind</span><span class="plain">, </span><span class="identifier">original_value</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">casts from the given value, with the given kind, into the existing block
@ -1088,10 +1060,8 @@ This mechanism is used, for example, to cast snippets to text.
<p class="inwebparagraph"><a id="SP26"></a><b>&#167;26. Comparison. </b>And it's a similar story with comparison:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(COMPARE_KOVS, bv_left, bv_right)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">COMPARE_KOVS</span><span class="plain">, </span><span class="identifier">bv_left</span><span class="plain">, </span><span class="identifier">bv_right</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">looks at the data in the two BVs and returns 0 if they are equal, a positive
@ -1126,10 +1096,8 @@ will have different hash codes.
hash code. Otherwise, we ask:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(HASH_KOVS, bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">HASH_KOVS</span><span class="plain">, </span><span class="identifier">bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">to return one for us. Whatever this does, it must at minimum have the
@ -1160,10 +1128,8 @@ The following routines abstract that.
<p class="inwebparagraph">If <code class="display"><span class="extract">ch</span></code> is -1, then:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(READ_FILE_KOVS, bv, auxf, ch)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">READ_FILE_KOVS</span><span class="plain">, </span><span class="identifier">bv</span><span class="plain">, </span><span class="identifier">auxf</span><span class="plain">, </span><span class="identifier">ch</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">returns <code class="display"><span class="extract">true</span></code> or <code class="display"><span class="extract">false</span></code> according to whether it is possible to read data
@ -1173,10 +1139,8 @@ first character of the text read from the file which makes up the serialised
form of the data.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">kovs(WRITE_FILE_KOVS, bv)</span>
<span class="identifier">kovs</span><span class="plain">(</span><span class="identifier">WRITE_FILE_KOVS</span><span class="plain">, </span><span class="identifier">bv</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">is simpler because, strictly speaking, it doesn't write to a file at all: it

View file

@ -138,36 +138,36 @@ used a lookup table for the values of 2^{15-n} where 0&lt;= n &lt;= 11.
<pre class="display">
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">PowersOfTwo_TB</span>
<span class="plain">--&gt; </span><span class="constant">$$100000000000</span>
<span class="constant">$$010000000000</span>
<span class="constant">$$001000000000</span>
<span class="constant">$$000100000000</span>
<span class="constant">$$000010000000</span>
<span class="constant">$$000001000000</span>
<span class="constant">$$000000100000</span>
<span class="constant">$$000000010000</span>
<span class="constant">$$000000001000</span>
<span class="constant">$$000000000100</span>
<span class="constant">$$000000000010</span>
<span class="constant">$$000000000001</span><span class="plain">;</span>
<span class="plain"> --&gt; </span><span class="constant">$$100000000000</span>
<span class="plain"> </span><span class="constant">$$010000000000</span>
<span class="plain"> </span><span class="constant">$$001000000000</span>
<span class="plain"> </span><span class="constant">$$000100000000</span>
<span class="plain"> </span><span class="constant">$$000010000000</span>
<span class="plain"> </span><span class="constant">$$000001000000</span>
<span class="plain"> </span><span class="constant">$$000000100000</span>
<span class="plain"> </span><span class="constant">$$000000010000</span>
<span class="plain"> </span><span class="constant">$$000000001000</span>
<span class="plain"> </span><span class="constant">$$000000000100</span>
<span class="plain"> </span><span class="constant">$$000000000010</span>
<span class="plain"> </span><span class="constant">$$000000000001</span><span class="plain">;</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">IncreasingPowersOfTwo_TB</span>
<span class="plain">--&gt; </span><span class="constant">$$0000000000000001</span>
<span class="constant">$$0000000000000010</span>
<span class="constant">$$0000000000000100</span>
<span class="constant">$$0000000000001000</span>
<span class="constant">$$0000000000010000</span>
<span class="constant">$$0000000000100000</span>
<span class="constant">$$0000000001000000</span>
<span class="constant">$$0000000010000000</span>
<span class="constant">$$0000000100000000</span>
<span class="constant">$$0000001000000000</span>
<span class="constant">$$0000010000000000</span>
<span class="constant">$$0000100000000000</span>
<span class="constant">$$0001000000000000</span>
<span class="constant">$$0010000000000000</span>
<span class="constant">$$0100000000000000</span>
<span class="constant">$$1000000000000000</span><span class="plain">;</span>
<span class="plain"> --&gt; </span><span class="constant">$$0000000000000001</span>
<span class="plain"> </span><span class="constant">$$0000000000000010</span>
<span class="plain"> </span><span class="constant">$$0000000000000100</span>
<span class="plain"> </span><span class="constant">$$0000000000001000</span>
<span class="plain"> </span><span class="constant">$$0000000000010000</span>
<span class="plain"> </span><span class="constant">$$0000000000100000</span>
<span class="plain"> </span><span class="constant">$$0000000001000000</span>
<span class="plain"> </span><span class="constant">$$0000000010000000</span>
<span class="plain"> </span><span class="constant">$$0000000100000000</span>
<span class="plain"> </span><span class="constant">$$0000001000000000</span>
<span class="plain"> </span><span class="constant">$$0000010000000000</span>
<span class="plain"> </span><span class="constant">$$0000100000000000</span>
<span class="plain"> </span><span class="constant">$$0001000000000000</span>
<span class="plain"> </span><span class="constant">$$0010000000000000</span>
<span class="plain"> </span><span class="constant">$$0100000000000000</span>
<span class="plain"> </span><span class="constant">$$1000000000000000</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
@ -585,11 +585,11 @@ here regardless.
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">PARTINV_BIT</span><span class="plain"> = </span><span class="constant">$$0000000010000000</span><span class="plain">; </span><span class="comment">Only brief inventory information after entry</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">DEFART_BIT</span><span class="plain"> = </span><span class="constant">$$0000000100000000</span><span class="plain">; </span><span class="comment">Use the definite article in list</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">WORKFLAG_BIT</span><span class="plain"> = </span><span class="constant">$$0000001000000000</span><span class="plain">; </span><span class="comment">At top level (only), only list objects</span>
<span class="comment">which have the "workflag" attribute</span>
<span class="plain"> </span><span class="comment">which have the "workflag" attribute</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">ISARE_BIT</span><span class="plain"> = </span><span class="constant">$$0000010000000000</span><span class="plain">; </span><span class="comment">Print " is" or " are" before list</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">CONCEAL_BIT</span><span class="plain"> = </span><span class="constant">$$0000100000000000</span><span class="plain">; </span><span class="comment">Omit objects with "concealed" or "scenery":</span>
<span class="comment">if WORKFLAG_BIT also set, then does not</span>
<span class="comment">apply at top level, but does lower down</span>
<span class="plain"> </span><span class="comment">if WORKFLAG_BIT also set, then does not</span>
<span class="plain"> </span><span class="comment">apply at top level, but does lower down</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">NOARTICLE_BIT</span><span class="plain"> = </span><span class="constant">$$0001000000000000</span><span class="plain">; </span><span class="comment">Print no articles, definite or not</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">EXTRAINDENT_BIT</span><span class="plain"> = </span><span class="constant">$$0010000000000000</span><span class="plain">; </span><span class="comment">New in I7: extra indentation of 1 level</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">CFIRSTART_BIT</span><span class="plain"> = </span><span class="constant">$$0100000000000000</span><span class="plain">; </span><span class="comment">Capitalise first article in list</span>

View file

@ -103,19 +103,15 @@ by definition the pointer to the block heading this linked list. For instance,
the data in a text
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"But now I worship a celestiall Sunne"</span>
<span class="string">"But now I worship a celestiall Sunne"</span>
</pre>
<p class="inwebparagraph">might be stored in a list of blocks like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">NULL &lt;-- BN: "But now I wor" &lt;--&gt; BN2: "ship a celestiall Sunne" --&gt; NULL</span>
<span class="identifier">NULL</span><span class="plain"> &lt;-- </span><span class="identifier">BN</span><span class="plain">: </span><span class="string">"But now I wor"</span><span class="plain"> &lt;--&gt; </span><span class="identifier">BN2</span><span class="plain">: </span><span class="string">"ship a celestiall Sunne"</span><span class="plain"> --&gt; </span><span class="identifier">NULL</span>
</pre>
<p class="inwebparagraph">Note that the unique pointer to <code class="display"><span class="extract">BN2</span></code> is the one in the header of the

File diff suppressed because it is too large Load diff

View file

@ -74,7 +74,7 @@ routines.
<span class="identifier">COMPARE_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">LIST_OF_TY_Compare</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">arg2</span><span class="plain">);</span>
<span class="identifier">HASH_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">LIST_OF_TY_Hash</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">);</span>
<span class="identifier">DEBUG_KOVS</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" = {"</span><span class="plain">, (</span><span class="identifier">LIST_OF_TY_Say</span><span class="plain">) </span><span class="identifier">arg1</span><span class="plain">, </span><span class="string">"} of kind "</span><span class="plain">,</span>
<span class="identifier">BlkValueRead</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">LIST_ITEM_KOV_F</span><span class="plain">);</span>
<span class="plain"> </span><span class="identifier">BlkValueRead</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">LIST_ITEM_KOV_F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="comment">We choose not to respond to: CAST_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS</span>
<span class="reserved">rfalse</span><span class="plain">;</span>

View file

@ -67,7 +67,7 @@ number which cannot be negated in 32-bit twos complement arithmetic.
<span class="plain">@</span><span class="identifier">ftonumz</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> </span><span class="identifier">num</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">num</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">endif</span><span class="plain">;</span>
<span class="plain"> #</span><span class="identifier">endif</span><span class="plain">;</span>
<span class="identifier">op</span><span class="plain"> = </span><span class="identifier">num</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">num</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">RunTimeProblem</span><span class="plain">(</span><span class="identifier">RTP_NEGATIVEROOT</span><span class="plain">); </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">; }</span>
<span class="comment">"one" starts at the highest power of four &lt;= the argument.</span>

View file

@ -61,15 +61,13 @@ those positions we look for <code class="display"><span class="extract">say__p</
<code class="display"><span class="extract">say__p</span></code> again) if we find it. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&gt; WAIT</span>
<span class="plain">The clock ticks ominously.</span>
...first rule <span class="plain"> </span>
...skipped line printed at a Divide Paragraph point <span class="plain">Mme Tourmalet rises from her chair and slips out.</span>
second rule <span class="plain"> </span>
...skipped line printed at a Divide Paragraph point <span class="plain">&gt; </span>
<span class="plain">The clock ticks ominously. ...first rule</span>
<span class="plain"> ...skipped line printed at a Divide Paragraph point</span>
<span class="plain">Mme Tourmalet rises from her chair and slips out. ...second rule</span>
<span class="plain"> ...skipped line printed at a Divide Paragraph point</span>
<span class="plain">&gt;</span>
</pre>
<p class="inwebparagraph">A divide paragraph point occurs between any two rules in an action rulebook,
@ -84,8 +82,6 @@ of the first paragraph to appear after the prompt, but only in one situation.
Ordinarily, the first paragraph of any turn appears straight after the prompt:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&gt; EXAMINE DOG</span>
<span class="plain">Mme Tourmalet's borzoi looks as if it means fashion, not business.</span>
@ -98,19 +94,15 @@ the player to go to a new location, when a skipped line is printed before the
room description for the new room. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&gt; SOUTH</span>
<span class="plain"> </span>
...the "going look break" <span class="plain">Rocky Beach</span>
<span class="plain">...the "going look break" here</span>
<span class="plain">Rocky Beach</span>
</pre>
<p class="inwebparagraph">(Note that this is not inherent in the looking action:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&gt; LOOK</span>
<span class="plain">Rocky Beach</span>
@ -130,11 +122,9 @@ no skipped line: as the name implies, it's traditionally used when a
command such as OPEN DOOR is clarified. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(first unlocking the oak door)</span>
...now a command clarification break <span class="plain">You open the oak door.</span>
<span class="plain">(first unlocking the oak door) ...now a command clarification break</span>
<span class="plain">You open the oak door.</span>
</pre>
<p class="inwebparagraph">This is not quite the same thing as a "run paragraph on" break, in which
@ -143,15 +133,13 @@ the skipped line which ought to appear last before the prompt: the idea is
to merge two or more paragraphs together.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&gt; TAKE ALL</span>
<span class="plain">marmot: Taken.</span>
...we run paragraph on here <span class="plain">weasel: Taken.</span>
...and also here <span class="plain"> </span>
...despite which the final skip does occur <span class="plain">&gt; </span>
...before the next prompt</pre>
<span class="plain">marmot: Taken. ...we run paragraph on here</span>
<span class="plain">weasel: Taken. ...and also here</span>
<span class="plain"> ...despite which the final skip does occur</span>
<span class="plain">&gt; ...before the next prompt</span>
</pre>
<p class="inwebparagraph">A more complicated case is "special look spacing", used for the break which
occurs after the (boldface) short name of a room description is printed. This
@ -159,36 +147,30 @@ is tricky because it is sometimes followed directly by a long description, and
we don't want a skipped line:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Villa Christiane</span>
...a special look spacing break <span class="plain">The walled garden of a villa in Cap d'Agde.</span>
<span class="plain"> </span>
...a Divide Paragraph break <span class="plain">Mme Tourmalet's borzoi lazes in the long grass.</span>
<span class="plain">Villa Christiane ...a special look spacing break</span>
<span class="plain">The walled garden of a villa in Cap d'Agde.</span>
<span class="plain">...a Divide Paragraph break</span>
<span class="plain">Mme Tourmalet's borzoi lazes in the long grass.</span>
</pre>
<p class="inwebparagraph">But sometimes it is followed directly by a subsequent paragraph, and again
we want no skip:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Villa Christiane</span>
...a special look spacing break <span class="plain">Mme Tourmalet's borzoi lazes in the long grass.</span>
<span class="plain">Villa Christiane ...a special look spacing break</span>
<span class="plain">Mme Tourmalet's borzoi lazes in the long grass.</span>
</pre>
<p class="inwebparagraph">And sometimes it is the only content of the room description and is followed
only by the prompt:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Villa Christiane</span>
...a special look spacing break <span class="plain"> </span>
...a break inserted before the prompt <span class="plain">&gt; </span>
<span class="plain">Villa Christiane ...a special look spacing break</span>
<span class="plain">...a break inserted before the prompt</span>
<span class="plain">&gt;</span>
</pre>
<p class="inwebparagraph">To recap, we have five kinds of paragraph break:
@ -389,25 +371,25 @@ whatever is the current language of play.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">%10 ~= </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"-"</span><span class="plain">, (</span><span class="identifier">LanguageNumber</span><span class="plain">) </span><span class="identifier">n</span><span class="plain">%10;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"one"</span><span class="plain">;</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"two"</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"three"</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"four"</span><span class="plain">;</span>
<span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"five"</span><span class="plain">;</span>
<span class="constant">6</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"six"</span><span class="plain">;</span>
<span class="constant">7</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"seven"</span><span class="plain">;</span>
<span class="constant">8</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eight"</span><span class="plain">;</span>
<span class="constant">9</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"nine"</span><span class="plain">;</span>
<span class="constant">10</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"ten"</span><span class="plain">;</span>
<span class="constant">11</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eleven"</span><span class="plain">;</span>
<span class="constant">12</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"twelve"</span><span class="plain">;</span>
<span class="constant">13</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"thirteen"</span><span class="plain">;</span>
<span class="constant">14</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"fourteen"</span><span class="plain">;</span>
<span class="constant">15</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"fifteen"</span><span class="plain">;</span>
<span class="constant">16</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"sixteen"</span><span class="plain">;</span>
<span class="constant">17</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"seventeen"</span><span class="plain">;</span>
<span class="constant">18</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eighteen"</span><span class="plain">;</span>
<span class="constant">19</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"nineteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"one"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"two"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"three"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"four"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"five"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">6</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"six"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">7</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"seven"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">8</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eight"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">9</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"nine"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">10</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"ten"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">11</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eleven"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">12</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"twelve"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">13</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"thirteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">14</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"fourteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">15</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"fifteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">16</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"sixteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">17</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"seventeen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">18</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"eighteen"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">19</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"nineteen"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">];</span>

View file

@ -125,11 +125,9 @@ stored as described above: thus the most recent rule or rulebook succeeded
or failed if &mdash;
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(latest_rule_result--&gt;0 == RS_SUCCEEDS)</span>
<span class="plain">(latest_rule_result--&gt;0 == RS_FAILS)</span>
<span class="plain">(</span><span class="identifier">latest_rule_result</span><span class="plain">--&gt;0 == </span><span class="identifier">RS_SUCCEEDS</span><span class="plain">)</span>
<span class="plain">(</span><span class="identifier">latest_rule_result</span><span class="plain">--&gt;0 == </span><span class="identifier">RS_FAILS</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">and otherwise there was no decision.

View file

@ -1135,7 +1135,7 @@ but mostly in order to match against a <code class="display"><span class="extrac
<span class="string">TEXT_TY_RE_DebugNode(token, ftxt, true);</span>
<span class="string">}</span>
<span class="string">if (i &gt;= 1) {</span>
<span class="string">if ((i&lt;RE_Subexpressions--&gt;10) &amp;&amp;</span>
<span class="string"> if ((i&lt;RE_Subexpressions--&gt;10) &amp;&amp;</span>
<span class="string">((RE_Subexpressions--&gt;i)--&gt;RE_DATA1 &gt;= 0)) ch = true;</span>
<span class="string">} else {</span>
<span class="string">rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito,</span>

View file

@ -437,7 +437,7 @@ implements the RELATIONS testing command. Speed is unimportant here.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pr</span><span class="plain"> &amp;&amp; </span><span class="identifier">pr2</span><span class="plain">) {</span>
<span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj1</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr</span><span class="plain">)</span>
<span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr2</span><span class="plain">) {</span>
<span class="plain"> </span><span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sym</span><span class="plain"> &amp;&amp; </span><span class="identifier">obj2</span><span class="plain"> &gt; </span><span class="identifier">obj1</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Relation_TestVtoV</span><span class="plain">(</span><span class="identifier">obj1</span><span class="plain">, </span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">obj2</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">RR_DESCRIPTION</span><span class="plain">), </span><span class="string">":^"</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">=1; }</span>
@ -445,35 +445,35 @@ implements the RELATIONS testing command. Speed is unimportant here.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sym</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" &lt;=&gt; "</span><span class="plain">; </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" &gt;=&gt; "</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">obj2</span><span class="plain">, </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pr</span><span class="plain"> &amp;&amp; (</span><span class="identifier">pr2</span><span class="plain">==0)) {</span>
<span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj1</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr</span><span class="plain">)</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain">=1:</span><span class="identifier">obj2</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;</span><span class="identifier">VTOVS_RIGHT_DOMAIN_SIZE</span><span class="plain">:</span><span class="identifier">obj2</span><span class="plain">++) {</span>
<span class="plain"> </span><span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain">=1:</span><span class="identifier">obj2</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;</span><span class="identifier">VTOVS_RIGHT_DOMAIN_SIZE</span><span class="plain">:</span><span class="identifier">obj2</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Relation_TestVtoV</span><span class="plain">(</span><span class="identifier">obj1</span><span class="plain">, </span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">obj2</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">RR_DESCRIPTION</span><span class="plain">), </span><span class="string">":^"</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">=1; }</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">, (</span><span class="identifier">The</span><span class="plain">) </span><span class="identifier">obj1</span><span class="plain">, </span><span class="string">" &gt;=&gt; "</span><span class="plain">;</span>
<span class="identifier">proutine2</span><span class="plain">.</span><span class="identifier">call</span><span class="plain">(</span><span class="identifier">obj2</span><span class="plain">);</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pr</span><span class="plain">==0) &amp;&amp; (</span><span class="identifier">pr2</span><span class="plain">)) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj1</span><span class="plain">=1:</span><span class="identifier">obj1</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;2:</span><span class="identifier">obj1</span><span class="plain">++)</span>
<span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr2</span><span class="plain">) {</span>
<span class="plain"> </span><span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">pr2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Relation_TestVtoV</span><span class="plain">(</span><span class="identifier">obj1</span><span class="plain">, </span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">obj2</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">RR_DESCRIPTION</span><span class="plain">), </span><span class="string">":^"</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">=1; }</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">;</span>
<span class="identifier">proutine1</span><span class="plain">.</span><span class="identifier">call</span><span class="plain">(</span><span class="identifier">obj1</span><span class="plain">);</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" &gt;=&gt; "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">obj2</span><span class="plain">, </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj1</span><span class="plain">=1:</span><span class="identifier">obj1</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;2:</span><span class="identifier">obj1</span><span class="plain">++)</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain">=1:</span><span class="identifier">obj2</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;</span><span class="identifier">VTOVS_RIGHT_DOMAIN_SIZE</span><span class="plain">:</span><span class="identifier">obj2</span><span class="plain">++)</span>
<span class="plain"> </span><span class="reserved">for</span><span class="plain"> (</span><span class="identifier">obj2</span><span class="plain">=1:</span><span class="identifier">obj2</span><span class="plain">&lt;=</span><span class="identifier">vtov_structure</span><span class="plain">--&gt;</span><span class="identifier">VTOVS_RIGHT_DOMAIN_SIZE</span><span class="plain">:</span><span class="identifier">obj2</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Relation_TestVtoV</span><span class="plain">(</span><span class="identifier">obj1</span><span class="plain">, </span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">obj2</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">relation</span><span class="plain">, </span><span class="identifier">RR_DESCRIPTION</span><span class="plain">), </span><span class="string">":^"</span><span class="plain">; </span><span class="identifier">x</span><span class="plain">=1; }</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">;</span>
@ -481,7 +481,7 @@ implements the RELATIONS testing command. Speed is unimportant here.
<span class="reserved">print</span><span class="plain"> </span><span class="string">" &gt;=&gt; "</span><span class="plain">;</span>
<span class="identifier">proutine2</span><span class="plain">.</span><span class="identifier">call</span><span class="plain">(</span><span class="identifier">obj2</span><span class="plain">);</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="plain">];</span>
</pre>

View file

@ -234,24 +234,24 @@ veneer code added by I6 requires it to be present.
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"** Library error "</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">","</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">, </span><span class="string">") **^** "</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"preposition not found (this should not occur)"</span><span class="plain">;</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Property value not routine or string: ~"</span><span class="plain">, (</span><span class="identifier">property</span><span class="plain">) </span><span class="identifier">p2</span><span class="plain">, </span><span class="string">"~ of ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">,</span>
<span class="string">"~ ("</span><span class="plain">, </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Entry in property list not routine or string: ~"</span><span class="plain">, (</span><span class="identifier">property</span><span class="plain">) </span><span class="identifier">p2</span><span class="plain">, </span><span class="string">"~ list of ~"</span><span class="plain">,</span>
<span class="plain">(</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ ("</span><span class="plain">, </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Too many timers/daemons are active simultaneously.</span>
<span class="string">The limit is the library constant MAX_TIMERS (currently "</span><span class="plain">,</span>
<span class="identifier">MAX_TIMERS</span><span class="plain">, </span><span class="string">") and should be increased"</span><span class="plain">;</span>
<span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Object ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ has no ~time_left~ property"</span><span class="plain">;</span>
<span class="constant">7</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The object ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ can only be used as a player object if it has</span>
<span class="string">the ~number~ property"</span><span class="plain">;</span>
<span class="constant">8</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Attempt to take random entry from an empty table array"</span><span class="plain">;</span>
<span class="constant">9</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">" is not a valid direction property number"</span><span class="plain">;</span>
<span class="constant">10</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The player-object is outside the object tree"</span><span class="plain">;</span>
<span class="constant">11</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The room ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ has no ~description~ property"</span><span class="plain">;</span>
<span class="constant">12</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Tried to set a non-existent pronoun using SetPronoun"</span><span class="plain">;</span>
<span class="constant">13</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"A 'topic' token can only be followed by a preposition"</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"(unexplained)"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"preposition not found (this should not occur)"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Property value not routine or string: ~"</span><span class="plain">, (</span><span class="identifier">property</span><span class="plain">) </span><span class="identifier">p2</span><span class="plain">, </span><span class="string">"~ of ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">,</span>
<span class="plain"> </span><span class="string">"~ ("</span><span class="plain">, </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Entry in property list not routine or string: ~"</span><span class="plain">, (</span><span class="identifier">property</span><span class="plain">) </span><span class="identifier">p2</span><span class="plain">, </span><span class="string">"~ list of ~"</span><span class="plain">,</span>
<span class="plain"> (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ ("</span><span class="plain">, </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Too many timers/daemons are active simultaneously.</span>
<span class="string"> The limit is the library constant MAX_TIMERS (currently "</span><span class="plain">,</span>
<span class="plain"> </span><span class="identifier">MAX_TIMERS</span><span class="plain">, </span><span class="string">") and should be increased"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Object ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ has no ~time_left~ property"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">7</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The object ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ can only be used as a player object if it has</span>
<span class="string"> the ~number~ property"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">8</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Attempt to take random entry from an empty table array"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">9</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">" is not a valid direction property number"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">10</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The player-object is outside the object tree"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">11</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"The room ~"</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">p1</span><span class="plain">, </span><span class="string">"~ has no ~description~ property"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">12</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Tried to set a non-existent pronoun using SetPronoun"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">13</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"A 'topic' token can only be followed by a preposition"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">default</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"(unexplained)"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" **^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifnot</span><span class="plain">;</span>

View file

@ -781,10 +781,8 @@ exact reverse ordering from using it with <code class="display"><span class="ext
Rows with blank entries in <code class="display"><span class="extract">C</span></code> are skipped.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">for (R=TableNextRow(T,C,0,D): R : R=TableNextRow(T,C,R,D)) ...</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">=</span><span class="identifier">TableNextRow</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">,</span><span class="identifier">C</span><span class="plain">,0,</span><span class="identifier">D</span><span class="plain">): </span><span class="identifier">R</span><span class="plain"> : </span><span class="identifier">R</span><span class="plain">=</span><span class="identifier">TableNextRow</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">,</span><span class="identifier">C</span><span class="plain">,</span><span class="identifier">R</span><span class="plain">,</span><span class="identifier">D</span><span class="plain">)) ...</span>
</pre>
<p class="inwebparagraph">will perform a loop of valid row numbers in order of column <code class="display"><span class="extract">C</span></code>.
@ -830,10 +828,10 @@ Rows with blank entries in <code class="display"><span class="extract">C</span><
<span class="identifier">dv</span><span class="plain"> = </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">v</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">signed_arithmetic</span><span class="plain">)</span>
<span class="identifier">f</span><span class="plain"> = (((</span><span class="identifier">dv</span><span class="plain"> &gt; </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">val</span><span class="plain">) || ((</span><span class="identifier">v</span><span class="plain"> == </span><span class="identifier">val</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">row</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">dv</span><span class="plain"> &lt; </span><span class="identifier">min_dv</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">dv</span><span class="plain"> &lt; </span><span class="identifier">min_dv</span><span class="plain">));</span>
<span class="reserved">else</span>
<span class="identifier">f</span><span class="plain"> = (((</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">val</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) || ((</span><span class="identifier">v</span><span class="plain"> == </span><span class="identifier">val</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">row</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">min_dv</span><span class="plain">) &lt; </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">min_dv</span><span class="plain">) &lt; </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain">) { </span><span class="identifier">min_dv</span><span class="plain"> = </span><span class="identifier">dv</span><span class="plain">; </span><span class="identifier">min_at</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; }</span>
<span class="plain">}</span>
@ -851,10 +849,10 @@ Rows with blank entries in <code class="display"><span class="extract">C</span><
<span class="identifier">dv</span><span class="plain"> = </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">v</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">signed_arithmetic</span><span class="plain">)</span>
<span class="identifier">f</span><span class="plain"> = (((</span><span class="identifier">dv</span><span class="plain"> &gt; </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">val</span><span class="plain">) || ((</span><span class="identifier">v</span><span class="plain"> == </span><span class="identifier">val</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">row</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">dv</span><span class="plain"> &lt; </span><span class="identifier">min_dv</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">dv</span><span class="plain"> &lt; </span><span class="identifier">min_dv</span><span class="plain">));</span>
<span class="reserved">else</span>
<span class="identifier">f</span><span class="plain"> = (((</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">dir</span><span class="plain">*</span><span class="identifier">val</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) || ((</span><span class="identifier">v</span><span class="plain"> == </span><span class="identifier">val</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">row</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">min_dv</span><span class="plain">) &lt; </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">dv</span><span class="plain">, </span><span class="identifier">min_dv</span><span class="plain">) &lt; </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain">) { </span><span class="identifier">min_dv</span><span class="plain"> = </span><span class="identifier">dv</span><span class="plain">; </span><span class="identifier">min_at</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; }</span>
<span class="plain">}</span>

View file

@ -135,7 +135,7 @@ special to copy or destroy a text.
<span class="identifier">EXTENT_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_Extent</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">);</span>
<span class="identifier">COMPARE_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_Compare</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">arg2</span><span class="plain">);</span>
<span class="identifier">READ_FILE_KOVS</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arg3</span><span class="plain"> == -1) </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_ReadFile</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">arg2</span><span class="plain">, </span><span class="identifier">arg3</span><span class="plain">);</span>
<span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_ReadFile</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">, </span><span class="identifier">arg2</span><span class="plain">, </span><span class="identifier">arg3</span><span class="plain">);</span>
<span class="identifier">WRITE_FILE_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_WriteFile</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">);</span>
<span class="identifier">HASH_KOVS</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TEXT_TY_Hash</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">);</span>
<span class="identifier">DEBUG_KOVS</span><span class="plain">: </span><span class="identifier">TEXT_TY_Debug</span><span class="plain">(</span><span class="identifier">arg1</span><span class="plain">);</span>
@ -167,10 +167,8 @@ special to copy or destroy a text.
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Creation. </b>A newly created text is a two-word short block with no long block, like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Array ThisIsAText --&gt; PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED;</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">ThisIsAText</span><span class="plain"> --&gt; </span><span class="identifier">PACKED_TEXT_STORAGE</span><span class="plain"> </span><span class="identifier">EMPTY_TEXT_PACKED</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">TEXT_TY_Create</span><span class="plain"> </span><span class="identifier">short_block</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">BlkValueCreateSB2</span><span class="plain">(</span><span class="identifier">short_block</span><span class="plain">, </span><span class="identifier">PACKED_TEXT_STORAGE</span><span class="plain">, </span><span class="identifier">EMPTY_TEXT_PACKED</span><span class="plain">);</span>
<span class="plain">];</span>

View file

@ -540,9 +540,9 @@ line; line 2 is underneath, and so on; columns are similarly numbered from
<pre class="display">
<span class="plain">[ </span><span class="identifier">VM_MoveCursorInStatusLine</span><span class="plain"> </span><span class="identifier">line</span><span class="plain"> </span><span class="identifier">column</span><span class="plain">; </span><span class="comment">1-based position on text grid</span>
<span class="reserved">if</span><span class="plain"> (~~</span><span class="identifier">statuswin_current</span><span class="plain">) {</span>
<span class="plain">@</span><span class="identifier">set_window</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">clr_on</span><span class="plain"> &amp;&amp; </span><span class="identifier">clr_bgstatus</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) @</span><span class="identifier">set_colour</span><span class="plain"> </span><span class="identifier">clr_fgstatus</span><span class="plain"> </span><span class="identifier">clr_bgstatus</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">style</span><span class="plain"> </span><span class="identifier">reverse</span><span class="plain">;</span>
<span class="plain"> @</span><span class="identifier">set_window</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">clr_on</span><span class="plain"> &amp;&amp; </span><span class="identifier">clr_bgstatus</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) @</span><span class="identifier">set_colour</span><span class="plain"> </span><span class="identifier">clr_fgstatus</span><span class="plain"> </span><span class="identifier">clr_bgstatus</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">style</span><span class="plain"> </span><span class="identifier">reverse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">line</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">line</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>

View file

@ -595,7 +595,7 @@ fairly thorough description of its output, which is written into the
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">ReParse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">.</span><span class="identifier">ReType</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">ReType</span><span class="plain">;</span>
<span class="identifier">cobj_flag</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">actors_location</span><span class="plain"> = </span><span class="identifier">ScopeCeiling</span><span class="plain">(</span><span class="identifier">player</span><span class="plain">);</span>
@ -604,7 +604,7 @@ fairly thorough description of its output, which is written into the
<span class="identifier">num_words</span><span class="plain"> = </span><span class="identifier">WordCount</span><span class="plain">(); </span><span class="identifier">players_command</span><span class="plain"> = </span><span class="constant">100</span><span class="plain"> + </span><span class="identifier">num_words</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EndActivity</span><span class="plain">(</span><span class="identifier">READING_A_COMMAND_ACT</span><span class="plain">)) </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">ReType</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">ReParse</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">ReParse</span><span class="plain">;</span>
<span class="identifier">parser_inflection</span><span class="plain"> = </span><span class="identifier">name</span><span class="plain">;</span>
@ -640,7 +640,7 @@ fairly thorough description of its output, which is written into the
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">HDR_DICTIONARY</span><span class="plain">--&gt;0) &gt;= </span><span class="constant">0</span><span class="plain"> &amp;&amp;</span>
<span class="identifier">UnsignedCompare</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">HDR_HIGHMEMORY</span><span class="plain">--&gt;0) &lt; </span><span class="constant">0</span><span class="plain">)</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">j</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">j</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifnot</span><span class="plain">; </span><span class="comment">TARGET_GLULX</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">-&gt;0 == </span><span class="constant">$60</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">j</span><span class="plain">;</span>
@ -657,14 +657,14 @@ fairly thorough description of its output, which is written into the
<span class="identifier">actors_location</span><span class="plain"> = </span><span class="identifier">ScopeCeiling</span><span class="plain">(</span><span class="identifier">player</span><span class="plain">);</span>
<span class="identifier">usual_grammar_after</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">AlmostReParse</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">AlmostReParse</span><span class="plain">;</span>
<span class="identifier">scope_token</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">action_to_be</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="comment">Begin from what we currently think is the verb word</span>
<span class="plain">.</span><span class="identifier">BeginCommand</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">BeginCommand</span><span class="plain">;</span>
<span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">verb_wordnum</span><span class="plain">;</span>
<span class="identifier">verb_word</span><span class="plain"> = </span><span class="identifier">NextWordStopped</span><span class="plain">();</span>
@ -1017,7 +1017,7 @@ most common) case:
<span class="reserved">do</span><span class="plain"> {</span>
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
<span class="plain">} </span><span class="reserved">until</span><span class="plain"> ((</span><span class="identifier">wn</span><span class="plain"> &gt; </span><span class="identifier">num_words</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">l</span><span class="plain"> &amp;&amp; (</span><span class="identifier">l</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">8</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">l</span><span class="plain"> &amp;&amp; (</span><span class="identifier">l</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">8</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wn</span><span class="plain"> &gt; </span><span class="identifier">num_words</span><span class="plain">) {</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
@ -1033,7 +1033,7 @@ most common) case:
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">line_token</span><span class="plain">--&gt;</span><span class="identifier">pcount</span><span class="plain">)-&gt;0 &amp; </span><span class="constant">$20</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">pcount</span><span class="plain">++;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">line_token</span><span class="plain">--&gt;</span><span class="identifier">pcount</span><span class="plain"> ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">line_token</span><span class="plain">--&gt;</span><span class="identifier">pcount</span><span class="plain">)-&gt;0 &amp; </span><span class="constant">$10</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">))</span>
<span class="plain"> ((</span><span class="identifier">line_token</span><span class="plain">--&gt;</span><span class="identifier">pcount</span><span class="plain">)-&gt;0 &amp; </span><span class="constant">$10</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">))</span>
<span class="identifier">pcount</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">pcount</span><span class="plain">++;</span>
@ -1043,7 +1043,7 @@ most common) case:
<span class="reserved">do</span><span class="plain"> {</span>
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
<span class="plain">} </span><span class="reserved">until</span><span class="plain"> ((</span><span class="identifier">wn</span><span class="plain"> &gt;= </span><span class="identifier">num_words</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">l</span><span class="plain"> &amp;&amp; (</span><span class="identifier">l</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">8</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">));</span>
<span class="plain"> (</span><span class="identifier">l</span><span class="plain"> &amp;&amp; (</span><span class="identifier">l</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">8</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain"> &amp;&amp; (</span><span class="identifier">l</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">8</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
@ -1155,7 +1155,7 @@ so that it may be reprinted by the parser later on.
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">2</span><span class="plain">)</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" [line "</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">, </span><span class="string">" token "</span><span class="plain">, </span><span class="identifier">pcount</span><span class="plain">, </span><span class="string">" word "</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">, </span><span class="string">" : "</span><span class="plain">, (</span><span class="identifier">DebugToken</span><span class="plain">) </span><span class="identifier">token</span><span class="plain">,</span>
<span class="string">"]^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="string">"]^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">token</span><span class="plain"> ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">) {</span>
@ -1345,7 +1345,7 @@ fake action <code class="display"><span class="extract">##NotUnderstood</span></
</p>
<pre class="display">
<span class="plain">.</span><span class="identifier">GiveError</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">GiveError</span><span class="plain">;</span>
<span class="identifier">etype</span><span class="plain"> = </span><span class="identifier">best_etype</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) {</span>
@ -1473,19 +1473,19 @@ fake action <code class="display"><span class="extract">##NotUnderstood</span></
<span class="comment">At this point, the return value is all prepared, and we are only looking</span>
<span class="comment">to see if there is a "then" followed by subsequent instruction(s).</span>
<span class="plain">.</span><span class="identifier">LookForMore</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">LookForMore</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wn</span><span class="plain"> &gt; </span><span class="identifier">num_words</span><span class="plain">) </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == </span><span class="identifier">THEN1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN3__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">comma_word</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wn</span><span class="plain"> &gt; </span><span class="identifier">num_words</span><span class="plain">) {</span>
<span class="identifier">held_back_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">held_back_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">hb_wn</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">;</span>
<span class="identifier">held_back_mode</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">best_etype</span><span class="plain"> = </span><span class="identifier">UPTO_PE</span><span class="plain">;</span>
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">GiveError</span><span class="plain">;</span>
@ -1572,7 +1572,7 @@ break down others into elementary tokens
<span class="identifier">t</span><span class="plain"> = </span><span class="identifier">match_scores</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">; @</span><span class="identifier">push</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">@</span><span class="identifier">push</span><span class="plain"> </span><span class="identifier">number_matched</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="identifier">parsetoken_nesting</span><span class="plain">++;</span>
<span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">ParseToken__</span><span class="plain">(</span><span class="identifier">given_ttype</span><span class="plain">, </span><span class="identifier">given_tdata</span><span class="plain">, </span><span class="identifier">token_n</span><span class="plain">, </span><span class="identifier">token</span><span class="plain">);</span>
@ -1607,9 +1607,9 @@ break down others into elementary tokens
<span class="identifier">parser_inflection</span><span class="plain"> = </span><span class="identifier">name</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">given_ttype</span><span class="plain">) {</span>
<span class="identifier">ELEMENTARY_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ELEMENTARY_TT</span><span class="plain">:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">given_tdata</span><span class="plain">) {</span>
<span class="identifier">SPECIAL_TOKEN</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">SPECIAL_TOKEN</span><span class="plain">:</span>
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">TryNumber</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
<span class="identifier">special_word</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
@ -1625,7 +1625,7 @@ break down others into elementary tokens
<span class="identifier">parsed_number</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_NUMBER</span><span class="plain">;</span>
<span class="identifier">NUMBER_TOKEN</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">NUMBER_TOKEN</span><span class="plain">:</span>
<span class="identifier">l</span><span class="plain">=</span><span class="identifier">TryNumber</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">++);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain"> == -1000) {</span>
<span class="identifier">etype</span><span class="plain"> = </span><span class="identifier">NUMBER_PE</span><span class="plain">;</span>
@ -1637,14 +1637,14 @@ break down others into elementary tokens
<span class="identifier">parsed_number</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_NUMBER</span><span class="plain">;</span>
<span class="identifier">CREATURE_TOKEN</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">CREATURE_TOKEN</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">action_to_be</span><span class="plain"> == ##</span><span class="identifier">Answer</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> ##</span><span class="identifier">Ask</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> ##</span><span class="identifier">AskFor</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> ##</span><span class="identifier">Tell</span><span class="plain">)</span>
<span class="identifier">scope_reason</span><span class="plain"> = </span><span class="identifier">TALKING_REASON</span><span class="plain">;</span>
<span class="identifier">TOPIC_TOKEN</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">TOPIC_TOKEN</span><span class="plain">:</span>
<span class="identifier">consult_from</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">line_ttype</span><span class="plain">--&gt;(</span><span class="identifier">token_n</span><span class="plain">+1) ~= </span><span class="identifier">PREPOSITION_TT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">line_token</span><span class="plain">--&gt;(</span><span class="identifier">token_n</span><span class="plain">+1) ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">)) {</span>
<span class="plain"> (</span><span class="identifier">line_token</span><span class="plain">--&gt;(</span><span class="identifier">token_n</span><span class="plain">+1) ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">)) {</span>
<span class="identifier">RunTimeProblem</span><span class="plain">(</span><span class="identifier">RTP_TEXTTOKENTOOHARD</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_PREPOSITION</span><span class="plain">;</span>
<span class="plain">}</span>
@ -1663,7 +1663,7 @@ break down others into elementary tokens
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_PREPOSITION</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PREPOSITION_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">PREPOSITION_TT</span><span class="plain">:</span>
<span class="comment">Is it an unnecessary alternative preposition, when a previous choice</span>
<span class="comment">has already been matched?</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">token</span><span class="plain">-&gt;0) &amp; </span><span class="constant">$10</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_PREPOSITION</span><span class="plain">;</span>
@ -1700,14 +1700,14 @@ break down others into elementary tokens
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PrepositionChain</span><span class="plain">(</span><span class="identifier">o</span><span class="plain">, </span><span class="identifier">token_n</span><span class="plain">) ~= -1) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">GPR_PREPOSITION</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> -1;</span>
<span class="identifier">GPR_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">GPR_TT</span><span class="plain">:</span>
<span class="identifier">l</span><span class="plain"> = </span><span class="reserved">indirect</span><span class="plain">(</span><span class="identifier">given_tdata</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">3</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" [Outside parsing routine returned "</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">l</span><span class="plain">;</span>
<span class="identifier">SCOPE_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">SCOPE_TT</span><span class="plain">:</span>
<span class="identifier">scope_token</span><span class="plain"> = </span><span class="identifier">given_tdata</span><span class="plain">;</span>
<span class="identifier">scope_stage</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
@ -1719,11 +1719,11 @@ break down others into elementary tokens
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">given_tdata</span><span class="plain"> = </span><span class="identifier">MULTI_TOKEN</span><span class="plain">; </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">given_tdata</span><span class="plain"> = </span><span class="identifier">NOUN_TOKEN</span><span class="plain">;</span>
<span class="identifier">ATTR_FILTER_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ATTR_FILTER_TT</span><span class="plain">:</span>
<span class="identifier">token_filter</span><span class="plain"> = </span><span class="constant">1</span><span class="plain"> + </span><span class="identifier">given_tdata</span><span class="plain">;</span>
<span class="identifier">given_tdata</span><span class="plain"> = </span><span class="identifier">NOUN_TOKEN</span><span class="plain">;</span>
<span class="identifier">ROUTINE_FILTER_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ROUTINE_FILTER_TT</span><span class="plain">:</span>
<span class="identifier">token_filter</span><span class="plain"> = </span><span class="identifier">given_tdata</span><span class="plain">;</span>
<span class="identifier">given_tdata</span><span class="plain"> = </span><span class="identifier">NOUN_TOKEN</span><span class="plain">;</span>
@ -1763,7 +1763,7 @@ break down others into elementary tokens
<pre class="display">
<span class="comment">We expect to find a list of objects next in what the player's typed.</span>
<span class="plain">.</span><span class="identifier">ObjectList</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">ObjectList</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">3</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" [Object list from word "</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
@ -1794,19 +1794,19 @@ break down others into elementary tokens
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">.</span><span class="identifier">AssumeDescriptor</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">AssumeDescriptor</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o</span><span class="plain"> == </span><span class="identifier">ME1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">ME2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">ME3__WD</span><span class="plain">) { </span><span class="identifier">pronoun_word</span><span class="plain"> = </span><span class="identifier">o</span><span class="plain">; </span><span class="identifier">pronoun_obj</span><span class="plain"> = </span><span class="identifier">player</span><span class="plain">; }</span>
<span class="identifier">allow_plurals</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">; </span><span class="identifier">desc_wn</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">TryAgain</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">TryAgain</span><span class="plain">;</span>
<span class="comment">First, we parse any descriptive words (like "the", "five" or "every"):</span>
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">Descriptors</span><span class="plain">(</span><span class="identifier">token_allows_multiple</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">etype</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">; }</span>
<span class="plain">.</span><span class="identifier">TryAgain2</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">TryAgain2</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
@ -1860,7 +1860,7 @@ break down others into elementary tokens
<span class="identifier">k</span><span class="plain"> = </span><span class="identifier">multiple_object</span><span class="plain">--&gt;0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+1 : </span><span class="identifier">j</span><span class="plain">&lt;=</span><span class="identifier">k</span><span class="plain"> : </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" Entry "</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="string">": "</span><span class="plain">, (</span><span class="identifier">The</span><span class="plain">) </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">j</span><span class="plain">,</span>
<span class="string">" ("</span><span class="plain">, </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">j</span><span class="plain">, </span><span class="string">")^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">j</span><span class="plain">, </span><span class="string">")^"</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" List now has size "</span><span class="plain">, </span><span class="identifier">k</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -1968,7 +1968,7 @@ break down others into elementary tokens
<span class="comment">"and", "but" and so on? If so, create a multiple-object list if we</span>
<span class="comment">haven't already (and are allowed to).</span>
<span class="plain">.</span><span class="identifier">NextInList</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">NextInList</span><span class="plain">;</span>
<span class="identifier">o</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
@ -2009,7 +2009,7 @@ break down others into elementary tokens
<pre class="display">
<span class="comment">Happy or unhappy endings:</span>
<span class="plain">.</span><span class="identifier">PassToken</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">PassToken</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">many_flag</span><span class="plain">) {</span>
<span class="identifier">single_object</span><span class="plain"> = </span><span class="identifier">GPR_MULTIPLE</span><span class="plain">;</span>
<span class="identifier">multi_context</span><span class="plain"> = </span><span class="identifier">token</span><span class="plain">;</span>
@ -2026,7 +2026,7 @@ break down others into elementary tokens
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">single_object</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">FailToken</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">FailToken</span><span class="plain">;</span>
<span class="comment">If we were only guessing about it being a plural, try again but only</span>
<span class="comment">allowing singulars (so that words like "six" are not swallowed up as</span>
@ -2091,7 +2091,7 @@ or indefinite article.
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">flag</span><span class="plain">=</span><span class="reserved">true</span><span class="plain"> : </span><span class="identifier">flag</span><span class="plain"> :) {</span>
<span class="identifier">o</span><span class="plain"> = </span><span class="identifier">NextWordStopped</span><span class="plain">(); </span><span class="identifier">flag</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=1 : </span><span class="identifier">x</span><span class="plain">&lt;=</span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;0 : </span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x</span><span class="plain">+4)</span>
<span class="plain"> </span><span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=1 : </span><span class="identifier">x</span><span class="plain">&lt;=</span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;0 : </span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x</span><span class="plain">+4)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o</span><span class="plain"> == </span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;</span><span class="identifier">x</span><span class="plain">) {</span>
<span class="identifier">type</span><span class="plain"> = </span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;(</span><span class="identifier">x</span><span class="plain">+2);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type</span><span class="plain"> == </span><span class="identifier">DEFART_PK</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">INDEFART_PK</span><span class="plain">) </span><span class="identifier">flag</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
@ -2118,7 +2118,7 @@ is set; it returns a parser error number, or 0 if no error occurred.
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">flag</span><span class="plain">=</span><span class="reserved">true</span><span class="plain"> : </span><span class="identifier">flag</span><span class="plain"> :) {</span>
<span class="identifier">o</span><span class="plain"> = </span><span class="identifier">NextWordStopped</span><span class="plain">(); </span><span class="identifier">flag</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=1 : </span><span class="identifier">x</span><span class="plain">&lt;=</span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;0 : </span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x</span><span class="plain">+4)</span>
<span class="plain"> </span><span class="reserved">for</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain">=1 : </span><span class="identifier">x</span><span class="plain">&lt;=</span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;0 : </span><span class="identifier">x</span><span class="plain">=</span><span class="identifier">x</span><span class="plain">+4)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o</span><span class="plain"> == </span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;</span><span class="identifier">x</span><span class="plain">) {</span>
<span class="identifier">flag</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="identifier">type</span><span class="plain"> = </span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;(</span><span class="identifier">x</span><span class="plain">+2);</span>
@ -2129,9 +2129,9 @@ is set; it returns a parser error number, or 0 if no error occurred.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type</span><span class="plain"> == </span><span class="identifier">POSSESS_PK</span><span class="plain">) {</span>
<span class="identifier">cto</span><span class="plain"> = </span><span class="identifier">LanguageDescriptors</span><span class="plain">--&gt;(</span><span class="identifier">x</span><span class="plain">+3);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">cto</span><span class="plain">) {</span>
<span class="constant">0</span><span class="plain">: </span><span class="identifier">indef_type</span><span class="plain"> = </span><span class="identifier">indef_type</span><span class="plain"> | </span><span class="identifier">MY_BIT</span><span class="plain">;</span>
<span class="constant">1</span><span class="plain">: </span><span class="identifier">indef_type</span><span class="plain"> = </span><span class="identifier">indef_type</span><span class="plain"> | </span><span class="identifier">THAT_BIT</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">:</span>
<span class="plain"> </span><span class="constant">0</span><span class="plain">: </span><span class="identifier">indef_type</span><span class="plain"> = </span><span class="identifier">indef_type</span><span class="plain"> | </span><span class="identifier">MY_BIT</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="identifier">indef_type</span><span class="plain"> = </span><span class="identifier">indef_type</span><span class="plain"> | </span><span class="identifier">THAT_BIT</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">default</span><span class="plain">:</span>
<span class="identifier">indef_owner</span><span class="plain"> = </span><span class="identifier">PronounValue</span><span class="plain">(</span><span class="identifier">cto</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indef_owner</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">indef_owner</span><span class="plain"> = </span><span class="identifier">InformParser</span><span class="plain">;</span>
<span class="plain">}</span>
@ -2293,8 +2293,8 @@ because we want to allow duplicates).
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wn</span><span class="plain"> &lt;= </span><span class="identifier">num_words</span><span class="plain">) {</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">(); </span><span class="identifier">wn</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> ~= </span><span class="identifier">AND1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">AND2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">AND3__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">comma_word</span>
<span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN3__WD</span>
<span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT3__WD</span><span class="plain">) {</span>
<span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">THEN3__WD</span>
<span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT1__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT2__WD</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">BUT3__WD</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">lookahead</span><span class="plain"> == </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -2327,7 +2327,7 @@ because we want to allow duplicates).
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">Adjudicate</span><span class="plain">(</span><span class="identifier">context</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == -1) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">rtrue</span><span class="plain">; </span><span class="comment">Adjudicate has made a multiple</span>
<span class="comment">object, and we pass it on</span>
<span class="plain"> </span><span class="comment">object, and we pass it on</span>
<span class="plain">}</span>
<span class="comment">If i is non-zero here, one of two things is happening: either</span>
@ -2391,7 +2391,7 @@ because we want to allow duplicates).
<span class="comment">...and get an answer:</span>
<span class="plain">.</span><span class="identifier">WhichOne</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">WhichOne</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=2 : </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">INPUT_BUFFER_LEN</span><span class="plain"> : </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">buffer2</span><span class="plain">-&gt;</span><span class="identifier">i</span><span class="plain"> = </span><span class="character">' '</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">TARGET_ZCODE</span>
@ -2491,7 +2491,7 @@ because we want to allow duplicates).
<span class="comment">and can't easily be guessed (eg, the player typed "take" and there</span>
<span class="comment">were plenty of things which might have been meant).</span>
<span class="plain">.</span><span class="identifier">Incomplete</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">Incomplete</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain"> == </span><span class="identifier">CREATURE_TOKEN</span><span class="plain">) </span><span class="identifier">PARSER_CLARIF_INTERNAL_RM</span><span class="plain">(</span><span class="character">'D'</span><span class="plain">, </span><span class="identifier">actor</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PARSER_CLARIF_INTERNAL_RM</span><span class="plain">(</span><span class="character">'E'</span><span class="plain">, </span><span class="identifier">actor</span><span class="plain">);</span>
@ -2580,7 +2580,7 @@ because we want to allow duplicates).
<span class="identifier">k</span><span class="plain"> = </span><span class="identifier">buffer</span><span class="plain"> + </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> </span><span class="constant">3</span><span class="plain"> </span><span class="identifier">k</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">parse2</span><span class="plain">--&gt;1;</span>
<span class="plain"> </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">parse2</span><span class="plain">--&gt;1;</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> -3;</span>
<span class="identifier">k</span><span class="plain"> = </span><span class="identifier">k</span><span class="plain">--&gt;0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">i</span><span class="plain"> : </span><span class="identifier">l</span><span class="plain">&lt;</span><span class="identifier">i</span><span class="plain">+</span><span class="identifier">k</span><span class="plain"> : </span><span class="identifier">l</span><span class="plain">++) </span><span class="identifier">buffer</span><span class="plain">-&gt;</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">buffer</span><span class="plain">-&gt;(</span><span class="identifier">l</span><span class="plain">+2);</span>
@ -2698,10 +2698,10 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="plain">{ </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">advance_warning</span><span class="plain">==-1)</span>
<span class="plain">{ </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain">==</span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain">)</span>
<span class="plain">{ </span><span class="identifier">good_ones</span><span class="plain">++; </span><span class="identifier">last</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain">==</span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">)</span>
<span class="plain">{ </span><span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">)~=</span><span class="identifier">actor</span><span class="plain">) { </span><span class="identifier">good_ones</span><span class="plain">++; </span><span class="identifier">last</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">; }</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="plain">}</span>
<span class="reserved">else</span>
<span class="plain">{ </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain">==</span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">n</span><span class="plain">~=</span><span class="identifier">advance_warning</span><span class="plain">)</span>
@ -2709,7 +2709,7 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain">==</span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">n</span><span class="plain"> </span><span class="reserved">in</span><span class="plain"> </span><span class="identifier">advance_warning</span><span class="plain">)</span>
<span class="plain">{ </span><span class="identifier">good_ones</span><span class="plain">++; </span><span class="identifier">last</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">; }</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain">==</span><span class="identifier">CREATURE_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">CreatureTest</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">)==1)</span>
<span class="plain">{ </span><span class="identifier">good_ones</span><span class="plain">++; </span><span class="identifier">last</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">; }</span>
@ -2754,7 +2754,7 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indef_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain"> &amp;&amp; </span><span class="identifier">indef_type</span><span class="plain"> &amp; </span><span class="identifier">PLURAL_BIT</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">context</span><span class="plain"> ~= </span><span class="identifier">MULTI_TOKEN</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">MULTIHELD_TOKEN</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">MULTIEXCEPT_TOKEN</span>
<span class="reserved">or</span><span class="plain"> </span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">) {</span>
<span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">) {</span>
<span class="identifier">etype</span><span class="plain"> = </span><span class="identifier">MULTI_PE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> -1;</span>
<span class="plain">}</span>
@ -2797,7 +2797,7 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="identifier">indef_wanted</span><span class="plain"> &amp;&amp; </span><span class="identifier">indef_wanted</span><span class="plain"> &lt; </span><span class="identifier">INDEF_ALL_WANTED</span><span class="plain">) {</span>
<span class="identifier">etype</span><span class="plain"> = </span><span class="identifier">TOOFEW_PE</span><span class="plain">; </span><span class="identifier">multi_wanted</span><span class="plain"> = </span><span class="identifier">indef_wanted</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Too few found^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Too few found^"</span><span class="plain">;</span>
<span class="identifier">multi_had</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> -1;</span>
<span class="plain">}</span>
@ -2823,7 +2823,7 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">flag</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">match_classes</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">-</span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain">--; </span><span class="identifier">number_of_classes</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">n</span><span class="plain">--; </span><span class="identifier">number_of_classes</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">) {</span>
@ -2831,7 +2831,7 @@ routines to clear up this mess, so we can't economise on working them out).
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0 : </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">number_matched</span><span class="plain"> : </span><span class="identifier">i</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">match_classes</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">)</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">, (</span><span class="identifier">The</span><span class="plain">) </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">") --- group "</span><span class="plain">,</span>
<span class="identifier">match_classes</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">match_classes</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
@ -2893,7 +2893,7 @@ This only ever throws things out, never adds new ones.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">multi_context</span><span class="plain"> == </span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=1,</span><span class="identifier">low</span><span class="plain">=0 : </span><span class="identifier">i</span><span class="plain">&lt;=</span><span class="identifier">multiple_object</span><span class="plain">--&gt;0 : </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> ( (</span><span class="identifier">multi_context</span><span class="plain">==</span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> ~= </span><span class="identifier">second_p</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">multi_context</span><span class="plain">==</span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> </span><span class="reserved">in</span><span class="plain"> </span><span class="identifier">second_p</span><span class="plain">)) {</span>
<span class="plain"> (</span><span class="identifier">multi_context</span><span class="plain">==</span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain"> &amp;&amp; </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> </span><span class="reserved">in</span><span class="plain"> </span><span class="identifier">second_p</span><span class="plain">)) {</span>
<span class="identifier">low</span><span class="plain">++;</span>
<span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">low</span><span class="plain"> = </span><span class="identifier">multiple_object</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">}</span>
@ -3021,7 +3021,7 @@ evaluate the possibilities is discussed in detail in the DM4.)
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" Scoring match list: indef mode "</span><span class="plain">, </span><span class="identifier">indef_mode</span><span class="plain">, </span><span class="string">" type "</span><span class="plain">,</span>
<span class="identifier">indef_type</span><span class="plain">, </span><span class="string">", satisfying "</span><span class="plain">, </span><span class="identifier">threshold</span><span class="plain">, </span><span class="string">" requirements:^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">indef_type</span><span class="plain">, </span><span class="string">", satisfying "</span><span class="plain">, </span><span class="identifier">threshold</span><span class="plain">, </span><span class="string">" requirements:^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">PREFER_HELD</span><span class="plain">;</span>
@ -3080,10 +3080,10 @@ evaluate the possibilities is discussed in detail in the DM4.)
<span class="identifier">match_scores</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">match_scores</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">its_score</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">, (</span><span class="identifier">The</span><span class="plain">) </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">,</span>
<span class="string">") in "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">its_owner</span><span class="plain">, </span><span class="string">" : "</span><span class="plain">, </span><span class="identifier">match_scores</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">" points^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="string">") in "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">its_owner</span><span class="plain">, </span><span class="string">" : "</span><span class="plain">, </span><span class="identifier">match_scores</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">, </span><span class="string">" points^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain"> }</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0 : </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">number_matched</span><span class="plain"> : </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> == -1) {</span>
@ -3117,8 +3117,8 @@ It returns -1 if there are no possible choices.
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_trace</span><span class="plain"> &gt;= </span><span class="constant">4</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">best</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" Best guess ran out of choices^"</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" Best guess "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">earliest</span><span class="plain">,</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">best</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" Best guess ran out of choices^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" Best guess "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">earliest</span><span class="plain">,</span>
<span class="string">" ("</span><span class="plain">, </span><span class="identifier">match_list</span><span class="plain">--&gt;</span><span class="identifier">earliest</span><span class="plain">, </span><span class="string">")^"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">DEBUG</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">best</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> -1;</span>
@ -3175,11 +3175,11 @@ for some function f.)
<span class="comment">is used instead.</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o1</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain"> || </span><span class="identifier">o2</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o1</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain"> ~= </span><span class="identifier">o2</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">parser_action</span><span class="plain"> = ##</span><span class="identifier">TheSame</span><span class="plain">; </span><span class="identifier">parser_one</span><span class="plain"> = </span><span class="identifier">o1</span><span class="plain">; </span><span class="identifier">parser_two</span><span class="plain"> = </span><span class="identifier">o2</span><span class="plain">;</span>
<span class="identifier">j</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">RunRoutines</span><span class="plain">(</span><span class="identifier">o1</span><span class="plain">,</span><span class="identifier">parse_name</span><span class="plain">); </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">j</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == -1) </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == -2) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o1</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain"> ~= </span><span class="identifier">o2</span><span class="plain">.</span><span class="identifier">parse_name</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">parser_action</span><span class="plain"> = ##</span><span class="identifier">TheSame</span><span class="plain">; </span><span class="identifier">parser_one</span><span class="plain"> = </span><span class="identifier">o1</span><span class="plain">; </span><span class="identifier">parser_two</span><span class="plain"> = </span><span class="identifier">o2</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">j</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">RunRoutines</span><span class="plain">(</span><span class="identifier">o1</span><span class="plain">,</span><span class="identifier">parse_name</span><span class="plain">); </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">j</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == -1) </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == -2) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="comment">This is the default algorithm: do they have the same words in their</span>
@ -3273,7 +3273,7 @@ the preposition <code class="display"><span class="extract">n</span></code>.)
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">LanguageDirection</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">; </span><span class="comment">the direction name as adverb</span>
<span class="reserved">else</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">TokenPrinted</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">TokenPrinted</span><span class="plain">;</span>
<span class="identifier">spacing_flag</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
@ -3780,7 +3780,7 @@ if it was a match because of inadequate input).
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">k</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">wn</span><span class="plain">=</span><span class="identifier">j</span><span class="plain">+</span><span class="identifier">k</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">MMbyPN</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">MMbyPN</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parser_action</span><span class="plain"> == ##</span><span class="identifier">PluralFound</span><span class="plain">)</span>
<span class="identifier">dict_flags_of_noun</span><span class="plain"> = </span><span class="identifier">dict_flags_of_noun</span><span class="plain"> | </span><span class="constant">4</span><span class="plain">;</span>
@ -3828,7 +3828,7 @@ if it was a match because of inadequate input).
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Refers</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">-1)) {</span>
<span class="identifier">threshold</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">w</span><span class="plain">)</span>
<span class="identifier">dict_flags_of_noun</span><span class="plain"> = </span><span class="identifier">dict_flags_of_noun</span><span class="plain"> | ((</span><span class="identifier">w</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">$$01110100</span><span class="plain">);</span>
<span class="plain"> </span><span class="identifier">dict_flags_of_noun</span><span class="plain"> = </span><span class="identifier">dict_flags_of_noun</span><span class="plain"> | ((</span><span class="identifier">w</span><span class="plain">-&gt;#</span><span class="identifier">dict_par1</span><span class="plain">) &amp; </span><span class="constant">$$01110100</span><span class="plain">);</span>
<span class="identifier">w</span><span class="plain"> = </span><span class="identifier">NextWord</span><span class="plain">();</span>
<span class="plain">}</span>
@ -3953,7 +3953,7 @@ are parsed.)
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">digit</span><span class="plain"> == </span><span class="character">'8'</span><span class="plain">) { </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">8</span><span class="plain">; </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">digok</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">digit</span><span class="plain"> == </span><span class="character">'9'</span><span class="plain">) { </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">9</span><span class="plain">; </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">digok</span><span class="plain">; }</span>
<span class="reserved">return</span><span class="plain"> -1000;</span>
<span class="plain">.</span><span class="identifier">digok</span><span class="plain">;</span>
<span class="plain"> .</span><span class="identifier">digok</span><span class="plain">;</span>
<span class="identifier">tot</span><span class="plain"> = </span><span class="identifier">tot</span><span class="plain">+</span><span class="identifier">mul</span><span class="plain">*</span><span class="identifier">d</span><span class="plain">; </span><span class="identifier">mul</span><span class="plain"> = </span><span class="identifier">mul</span><span class="plain">/10;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">len</span><span class="plain"> &gt; </span><span class="constant">3</span><span class="plain">) </span><span class="identifier">tot</span><span class="plain">=10000;</span>

View file

@ -544,11 +544,11 @@ main {
<pre class="display">
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">LanguagePronouns</span><span class="plain"> </span><span class="identifier">table</span>
<span class="comment">word possible GNAs connected</span>
<span class="comment">to follow: to:</span>
<span class="comment">a i</span>
<span class="comment">s p s p</span>
<span class="comment">mfnmfnmfnmfn</span>
<span class="plain"> </span><span class="comment">word possible GNAs connected</span>
<span class="plain"> </span><span class="comment">to follow: to:</span>
<span class="plain"> </span><span class="comment">a i</span>
<span class="plain"> </span><span class="comment">s p s p</span>
<span class="plain"> </span><span class="comment">mfnmfnmfnmfn</span>
<span class="character">'it'</span><span class="plain"> </span><span class="constant">$$001000111000</span><span class="plain"> </span><span class="identifier">NULL</span>
<span class="character">'him'</span><span class="plain"> </span><span class="constant">$$100000000000</span><span class="plain"> </span><span class="identifier">NULL</span>
@ -563,11 +563,11 @@ main {
<pre class="display">
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">LanguageDescriptors</span><span class="plain"> </span><span class="identifier">table</span>
<span class="comment">word possible GNAs descriptor connected</span>
<span class="comment">to follow: type: to:</span>
<span class="comment">a i</span>
<span class="comment">s p s p</span>
<span class="comment">mfnmfnmfnmfn</span>
<span class="plain"> </span><span class="comment">word possible GNAs descriptor connected</span>
<span class="plain"> </span><span class="comment">to follow: type: to:</span>
<span class="plain"> </span><span class="comment">a i</span>
<span class="plain"> </span><span class="comment">s p s p</span>
<span class="plain"> </span><span class="comment">mfnmfnmfnmfn</span>
<span class="character">'my'</span><span class="plain"> </span><span class="constant">$$111111111111</span><span class="plain"> </span><span class="identifier">POSSESS_PK</span><span class="plain"> </span><span class="constant">0</span>
<span class="character">'this'</span><span class="plain"> </span><span class="constant">$$111111111111</span><span class="plain"> </span><span class="identifier">POSSESS_PK</span><span class="plain"> </span><span class="constant">0</span>
@ -644,8 +644,8 @@ main {
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">LanguageInanimateGender</span><span class="plain"> = </span><span class="identifier">neuter</span><span class="plain">;</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">LanguageContractionForms</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="comment">English has two:</span>
<span class="comment">0 = starting with a consonant</span>
<span class="comment">1 = starting with a vowel</span>
<span class="plain"> </span><span class="comment">0 = starting with a consonant</span>
<span class="plain"> </span><span class="comment">1 = starting with a vowel</span>
<span class="plain">[ </span><span class="identifier">LanguageContraction</span><span class="plain"> </span><span class="identifier">text</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">text</span><span class="plain">-&gt;0 == </span><span class="character">'a'</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="character">'e'</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="character">'i'</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="character">'o'</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="character">'u'</span>
@ -655,15 +655,15 @@ main {
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">LanguageArticles</span><span class="plain"> --&gt;</span>
<span class="comment">Contraction form 0: Contraction form 1:</span>
<span class="comment">Cdef Def Indef Cdef Def Indef</span>
<span class="plain"> </span><span class="comment">Contraction form 0: Contraction form 1:</span>
<span class="plain"> </span><span class="comment">Cdef Def Indef Cdef Def Indef</span>
<span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"a "</span><span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"an "</span><span class="plain"> </span><span class="comment">Articles 0</span>
<span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"some "</span><span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"some "</span><span class="plain">; </span><span class="comment">Articles 1</span>
<span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"a "</span><span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"an "</span><span class="plain"> </span><span class="comment">Articles 0</span>
<span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"some "</span><span class="plain"> </span><span class="string">"The "</span><span class="plain"> </span><span class="string">"the "</span><span class="plain"> </span><span class="string">"some "</span><span class="plain">; </span><span class="comment">Articles 1</span>
<span class="comment">a i</span>
<span class="comment">s p s p</span>
<span class="comment">m f n m f n m f n m f n</span>
<span class="plain"> </span><span class="comment">a i</span>
<span class="plain"> </span><span class="comment">s p s p</span>
<span class="plain"> </span><span class="comment">m f n m f n m f n m f n</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">LanguageGNAsToArticles</span><span class="plain"> --&gt; </span><span class="constant">0</span><span class="plain"> </span><span class="constant">0</span><span class="plain"> </span><span class="constant">0</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="constant">0</span><span class="plain"> </span><span class="constant">0</span><span class="plain"> </span><span class="constant">0</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
</pre>
@ -688,12 +688,12 @@ adjective in a <code class="display"><span class="extract">name</span></code> pr
<pre class="display">
<span class="plain">[ </span><span class="identifier">LanguageVerb</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">) {</span>
<span class="character">'i//'</span><span class="plain">,</span><span class="character">'inv'</span><span class="plain">,</span><span class="character">'inventory'</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"take inventory"</span><span class="plain">;</span>
<span class="character">'l//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"look"</span><span class="plain">;</span>
<span class="character">'x//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"examine"</span><span class="plain">;</span>
<span class="character">'z//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"wait"</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain"> </span><span class="character">'i//'</span><span class="plain">,</span><span class="character">'inv'</span><span class="plain">,</span><span class="character">'inventory'</span><span class="plain">:</span>
<span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"take inventory"</span><span class="plain">;</span>
<span class="plain"> </span><span class="character">'l//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"look"</span><span class="plain">;</span>
<span class="plain"> </span><span class="character">'x//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"examine"</span><span class="plain">;</span>
<span class="plain"> </span><span class="character">'z//'</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"wait"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">default</span><span class="plain">: </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">];</span>

View file

@ -332,10 +332,8 @@ but it looks nothing like the <code class="display"><span class="extract">LookSu
<code class="display"><span class="extract">-Sub</span></code> routines like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[ LookSub; return GenericVerbSub(153,154,155); ];</span>
<span class="plain">[ </span><span class="identifier">LookSub</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">GenericVerbSub</span><span class="plain">(153,154,155); ];</span>
</pre>
<p class="inwebparagraph">(with whatever rulebook numbers are appropriate). <code class="display"><span class="extract">GenericVerbSub</span></code> then

View file

@ -60,12 +60,12 @@ for "real" users, but it's probably worth keeping just the same.
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Window "</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">gg_arguments</span><span class="plain">--&gt;0, </span><span class="string">"): "</span><span class="plain">;</span>
<span class="identifier">val</span><span class="plain"> = </span><span class="identifier">glk_window_get_type</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">val</span><span class="plain">) {</span>
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"pair"</span><span class="plain">;</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"blank"</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"textbuffer"</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"textgrid"</span><span class="plain">;</span>
<span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"graphics"</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"unknown"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"pair"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"blank"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"textbuffer"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">4</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"textgrid"</span><span class="plain">;</span>
<span class="plain"> </span><span class="constant">5</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"graphics"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">default</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"unknown"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">val</span><span class="plain"> = </span><span class="identifier">glk_window_get_parent</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">", parent is window "</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">;</span>

View file

@ -228,7 +228,7 @@ are in scope.
<span class="plain">|| (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">animate</span><span class="plain">)</span>
<span class="plain">|| ((</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">container</span><span class="plain">) &amp;&amp; (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">open</span><span class="plain">)))</span>
<span class="reserved">rtrue</span><span class="plain">;</span>
<span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>

View file

@ -327,10 +327,8 @@ x_1, x_2, ..., x_n of objects. Of these, the iterator function will
choose a sublist of "qualifying" objects. It is called with arguments
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Iter(obj, depth, L, function)</span>
<span class="identifier">Iter</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">function</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">where the <code class="display"><span class="extract">obj</span></code> is required to be x_j for some j and the function is one
@ -731,11 +729,8 @@ circles, and never be able to see the individual objects in the group.)
where R_1 and R_2 are addresses of routines:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">coin| ($R_1$), |coin| ($R_1$), |box| ($R_2$), |statuette| (0), |coin| ($R_1$), |box</span>
(R_2)</pre>
<p class="inwebparagraph"><code class="display"><span class="extract">coin</span></code> (R_1), <code class="display"><span class="extract">coin</span></code> (R_1), <code class="display"><span class="extract">box</span></code> (R_2), <code class="display"><span class="extract">statuette</span></code> (0), <code class="display"><span class="extract">coin</span></code> (R_1), <code class="display"><span class="extract">box</span></code> (R_2)
</p>
<p class="inwebparagraph">Then the partition is 1, 1, 2, 3, 1, 2, so that the final output will be
something like "three coins, two boxes and a statuette" &mdash; with three
@ -749,11 +744,8 @@ not every iterator function will be able to coalesce fully.)
<p class="inwebparagraph">But if we have something like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">coin| ($R_1$), |Q| ($R_2$), |W| ($R_2$), |coin| ($R_1$), |statuette| (0), |E| ($R_2$), |R</span>
(R_2)</pre>
<p class="inwebparagraph"><code class="display"><span class="extract">coin</span></code> (R_1), <code class="display"><span class="extract">Q</span></code> (R_2), <code class="display"><span class="extract">W</span></code> (R_2), <code class="display"><span class="extract">coin</span></code> (R_1), <code class="display"><span class="extract">statuette</span></code> (0), <code class="display"><span class="extract">E</span></code> (R_2), <code class="display"><span class="extract">R</span></code> (R_2)
</p>
<p class="inwebparagraph">then the partition is 1, 2, 3, 1, 4, 5, 6 and we have six classes in all.
But classes 2 and 3 are grouped together, as are classes 5 and 6, so we

View file

@ -385,8 +385,8 @@ the direction of the shortest path from there to R_y.
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use_doors</span><span class="plain"> &amp;&amp; (</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">K4_door</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">use_doors</span><span class="plain"> &amp; </span><span class="constant">2</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">open</span><span class="plain">) ||</span>
<span class="plain">((</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">openable</span><span class="plain">) &amp;&amp; (</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">hasnt</span><span class="plain"> </span><span class="identifier">locked</span><span class="plain">)))) {</span>
<span class="plain"> (</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">open</span><span class="plain">) ||</span>
<span class="plain"> ((</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">openable</span><span class="plain">) &amp;&amp; (</span><span class="identifier">in_direction</span><span class="plain"> </span><span class="reserved">hasnt</span><span class="plain"> </span><span class="identifier">locked</span><span class="plain">)))) {</span>
<span class="identifier">sl</span><span class="plain"> = </span><span class="identifier">location</span><span class="plain">; </span><span class="identifier">location</span><span class="plain"> = </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="identifier">through_door</span><span class="plain"> = </span><span class="identifier">in_direction</span><span class="plain">.</span><span class="identifier">door_to</span><span class="plain">();</span>
<span class="identifier">location</span><span class="plain"> = </span><span class="identifier">sl</span><span class="plain">;</span>

View file

@ -211,8 +211,8 @@ compile a <code class="display"><span class="extract">Story_Author</span></code>
<pre class="display">
<span class="plain">[ </span><span class="identifier">Banner</span><span class="plain">;</span>
<span class="identifier">BeginActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ForActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">) {</span>
<span class="plain"> </span><span class="identifier">BeginActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">);</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ForActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">) {</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">HEADER_VMSTY</span><span class="plain">);</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">Story</span><span class="plain">);</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">NORMAL_VMSTY</span><span class="plain">);</span>
@ -407,10 +407,10 @@ indefinite singular depends on the text of the object's name.
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">LanguageContractionForms</span><span class="plain">) {</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+9)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+9)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>

View file

@ -136,7 +136,7 @@ moves an object to a new position in the object tree.
<pre class="display">
<span class="plain">[ </span><span class="identifier">ShowRelationsSub</span><span class="plain">;</span>
<span class="identifier">IterateRelations</span><span class="plain">(</span><span class="identifier">ShowOneRelation</span><span class="plain">);</span>
<span class="plain"> </span><span class="identifier">IterateRelations</span><span class="plain">(</span><span class="identifier">ShowOneRelation</span><span class="plain">);</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">ShowOneRelation</span><span class="plain"> </span><span class="identifier">rel</span><span class="plain">;</span>
@ -223,7 +223,7 @@ moves an object to a new position in the object tree.
<span class="plain">[ </span><span class="identifier">RulesOnSub</span><span class="plain">;</span>
<span class="identifier">debug_rules</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="string">"Rules tracing now switched on. Type ~rules off~ to switch it off again,</span>
<span class="string">or ~rules all~ to include even rules which do not apply."</span><span class="plain">;</span>
<span class="string"> or ~rules all~ to include even rules which do not apply."</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">RulesAllSub</span><span class="plain">;</span>
<span class="identifier">debug_rules</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
@ -399,31 +399,31 @@ out the I6 command verb grammar for the supplied command.
<span class="plain">[ </span><span class="identifier">DebugToken</span><span class="plain"> </span><span class="identifier">token</span><span class="plain">;</span>
<span class="identifier">AnalyseToken</span><span class="plain">(</span><span class="identifier">token</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">found_ttype</span><span class="plain">) {</span>
<span class="identifier">ILLEGAL_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ILLEGAL_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;illegal token number "</span><span class="plain">, </span><span class="identifier">token</span><span class="plain">, </span><span class="string">"&gt;"</span><span class="plain">;</span>
<span class="identifier">ELEMENTARY_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ELEMENTARY_TT</span><span class="plain">:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">found_tdata</span><span class="plain">) {</span>
<span class="identifier">NOUN_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"noun"</span><span class="plain">;</span>
<span class="identifier">HELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"held"</span><span class="plain">;</span>
<span class="identifier">MULTI_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multi"</span><span class="plain">;</span>
<span class="identifier">MULTIHELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiheld"</span><span class="plain">;</span>
<span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiexcept"</span><span class="plain">;</span>
<span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiinside"</span><span class="plain">;</span>
<span class="identifier">CREATURE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"creature"</span><span class="plain">;</span>
<span class="identifier">SPECIAL_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"special"</span><span class="plain">;</span>
<span class="identifier">NUMBER_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"number"</span><span class="plain">;</span>
<span class="identifier">TOPIC_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"topic"</span><span class="plain">;</span>
<span class="identifier">ENDIT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"END"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">NOUN_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"noun"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">HELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"held"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">MULTI_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multi"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">MULTIHELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiheld"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiexcept"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiinside"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">CREATURE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"creature"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">SPECIAL_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"special"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">NUMBER_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"number"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">TOPIC_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"topic"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"END"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PREPOSITION_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">PREPOSITION_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"'"</span><span class="plain">, (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">"'"</span><span class="plain">;</span>
<span class="identifier">ROUTINE_FILTER_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ROUTINE_FILTER_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"noun=Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="identifier">ATTR_FILTER_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">ATTR_FILTER_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">DebugAttribute</span><span class="plain">) </span><span class="identifier">found_tdata</span><span class="plain">;</span>
<span class="identifier">SCOPE_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">SCOPE_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"scope=Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="identifier">GPR_TT</span><span class="plain">:</span>
<span class="plain"> </span><span class="identifier">GPR_TT</span><span class="plain">:</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
@ -452,8 +452,8 @@ out the I6 command verb grammar for the supplied command.
<span class="identifier">test_stack</span><span class="plain">--&gt;(</span><span class="identifier">test_sp</span><span class="plain">+3) = </span><span class="identifier">l</span><span class="plain">;</span>
<span class="identifier">test_sp</span><span class="plain"> = </span><span class="identifier">test_sp</span><span class="plain"> + </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">R</span><span class="plain">--&gt;0) &amp;&amp; (</span><span class="identifier">R</span><span class="plain">--&gt;0 ~= </span><span class="identifier">real_location</span><span class="plain">)) {</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"(first moving to "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">R</span><span class="plain">--&gt;0, </span><span class="string">")^"</span><span class="plain">;</span>
<span class="identifier">PlayerTo</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">--&gt;0, </span><span class="constant">1</span><span class="plain">);</span>
<span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"(first moving to "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">R</span><span class="plain">--&gt;0, </span><span class="string">")^"</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">PlayerTo</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">--&gt;0, </span><span class="constant">1</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">k</span><span class="plain">=1;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">--&gt;</span><span class="identifier">k</span><span class="plain">) {</span>

View file

@ -69,10 +69,8 @@ condition in the opening pre-turn. We don't want to return <code class="display"
because that would make it true that
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">HolderOf(player) == ContainerOf(player)</span>
<span class="identifier">HolderOf</span><span class="plain">(</span><span class="identifier">player</span><span class="plain">) == </span><span class="identifier">ContainerOf</span><span class="plain">(</span><span class="identifier">player</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">and similar conditions &mdash; thus, it would appear that in the immediate past

View file

@ -284,14 +284,12 @@ usage of <code class="display"><span class="extract">jump</span></code> statemen
thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (~~(score == 10)) jump L_Say3;</span>
<span class="plain"> ...</span>
<span class="plain">jump L_SayX2; .L_Say3;</span>
<span class="plain"> ...</span>
<span class="plain">.L_Say4; .L_SayX2;</span>
<span class="reserved">if</span><span class="plain"> (~~(</span><span class="identifier">score</span><span class="plain"> == </span><span class="constant">10</span><span class="plain">)) </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_Say3</span><span class="plain">;</span>
<span class="plain">...</span>
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_SayX2</span><span class="plain">; .</span><span class="identifier">L_Say3</span><span class="plain">;</span>
<span class="plain">...</span>
<span class="plain">.</span><span class="identifier">L_Say4</span><span class="plain">; .</span><span class="identifier">L_SayX2</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">Though labels actually have local namespaces in I6 routines, we use
@ -307,16 +305,14 @@ text "[if the score is 10]It's ten![otherwise if the score is 8]It's
eight?[otherwise]It's not ten, alas." comes out as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (~~(score == 10)) jump L_Say5;</span>
<span class="plain"> ...</span>
<span class="plain">jump L_SayX3; .L_Say5; if (~~(score == 8)) jump L_Say6;</span>
<span class="plain"> ...</span>
<span class="plain">jump L_SayX3; .L_Say6;</span>
<span class="plain"> ...</span>
<span class="plain">.L_Say7; .L_SayX3;</span>
<span class="reserved">if</span><span class="plain"> (~~(</span><span class="identifier">score</span><span class="plain"> == </span><span class="constant">10</span><span class="plain">)) </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_Say5</span><span class="plain">;</span>
<span class="plain">...</span>
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_SayX3</span><span class="plain">; .</span><span class="identifier">L_Say5</span><span class="plain">; </span><span class="reserved">if</span><span class="plain"> (~~(</span><span class="identifier">score</span><span class="plain"> == </span><span class="constant">8</span><span class="plain">)) </span><span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_Say6</span><span class="plain">;</span>
<span class="plain">...</span>
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">L_SayX3</span><span class="plain">; .</span><span class="identifier">L_Say6</span><span class="plain">;</span>
<span class="plain">...</span>
<span class="plain">.</span><span class="identifier">L_Say7</span><span class="plain">; .</span><span class="identifier">L_SayX3</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">In either form of the construct, control passes into at most one of the

View file

@ -73,10 +73,8 @@ For example, the phrase definition:
<p class="inwebparagraph">results in an inter schema being compiled from this text:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">AdjustThis({N}, 1);</span>
<span class="identifier">AdjustThis</span><span class="plain">({</span><span class="identifier">N</span><span class="plain">}, </span><span class="constant">1</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">The notation here is essentially Inform 6 code with a few special features
@ -91,10 +89,8 @@ though those would then usually be converted back into I6 anyway.
miniature Inform 6 compiler: its task is to take text such as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">AdjustThis({N}, 1);</span>
<span class="identifier">AdjustThis</span><span class="plain">({</span><span class="identifier">N</span><span class="plain">}, </span><span class="constant">1</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">and convert that into an inter schema. The second half is a code generator,
@ -220,10 +216,8 @@ but the need to do this went away.)
For example, in
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (x == 1) { print "Hello!"; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Hello</span><span class="comment">; }</span>
</pre>
<p class="inwebparagraph">the print statement occurs inside a complete block, which will eventually
@ -231,19 +225,15 @@ be represented as a <code class="display"><span class="extract">CODE_ISNT</span>
blocks half-open. For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (x == 1)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">is a legal phrase definition: we read it as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (x == 1) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
</pre>
<p class="inwebparagraph">and the schema has to contain a <code class="display"><span class="extract">CODE_ISNT</span></code> marked as having been left
@ -307,10 +297,8 @@ the end of the construct, so the above mechanisms are not sufficient.
For example, the inline definition
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{X}:</span>
<span class="plain">{</span><span class="identifier">X</span><span class="plain">}:</span>
</pre>
<p class="inwebparagraph">implies, by use of the colon, that it's a switch case. We can't conveniently
@ -863,13 +851,11 @@ white space from each. Note that <code class="display"><span class="extract">{-b
<p class="inwebparagraph">could be given the definition:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">@push {-my:trcount};</span>
<span class="plain">for (trcount=1; trcount&lt;=3; trcount++)</span>
<span class="plain"> {-block}</span>
<span class="plain">@pull trcount;</span>
<span class="plain">@</span><span class="identifier">push</span><span class="plain"> {-</span><span class="identifier">my</span><span class="plain">:</span><span class="identifier">trcount</span><span class="plain">};</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">trcount</span><span class="plain">=1; </span><span class="identifier">trcount</span><span class="plain">&lt;=3; </span><span class="identifier">trcount</span><span class="plain">++)</span>
<span class="plain">{-</span><span class="identifier">block</span><span class="plain">}</span>
<span class="plain">@</span><span class="identifier">pull</span><span class="plain"> </span><span class="identifier">trcount</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">This then repeats what it's given three times, while guaranteeing that the
@ -877,22 +863,18 @@ counter is always a local variable called <code class="display"><span class="ext
such operations are nested, they will work. We might then write:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">To say iteration: (- print {-my:trcount}; -).</span>
<span class="identifier">To</span><span class="plain"> </span><span class="identifier">say</span><span class="plain"> </span><span class="identifier">iteration</span><span class="plain">: (- </span><span class="identifier">print</span><span class="plain"> {-</span><span class="identifier">my</span><span class="plain">:</span><span class="identifier">trcount</span><span class="plain">}; -).</span>
</pre>
<p class="inwebparagraph">and then this will work as might be hoped:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">repeat with a King's Court:</span>
<span class="plain"> say "[iteration]...";</span>
<span class="plain"> repeat with a King's Court:</span>
<span class="plain"> say "[iteration]. You play a Shanty Town, getting +2 Actions.";</span>
<span class="identifier">repeat</span><span class="plain"> </span><span class="identifier">with</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">King</span><span class="plain">'</span><span class="identifier">s</span><span class="plain"> </span><span class="identifier">Court</span><span class="plain">:</span>
<span class="identifier">say</span><span class="plain"> </span><span class="string">"[iteration]..."</span><span class="plain">;</span>
<span class="identifier">repeat</span><span class="plain"> </span><span class="identifier">with</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">King</span><span class="plain">'</span><span class="identifier">s</span><span class="plain"> </span><span class="identifier">Court</span><span class="plain">:</span>
<span class="identifier">say</span><span class="plain"> </span><span class="string">"[iteration]. You play a Shanty Town, getting +2 Actions."</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">This is a slightly contrived example, and often <code class="display"><span class="extract">{-block}</span></code> isn't needed. If
@ -900,10 +882,8 @@ we didn't care about accessing the iteration count in the body of the loop,
for instance, we could simply have defined:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">for ({-my:1}=1; {-my:1}&lt;=3; {-my:1}++)</span>
<span class="reserved">for</span><span class="plain"> ({-</span><span class="identifier">my</span><span class="plain">:1}=1; {-</span><span class="identifier">my</span><span class="plain">:1}&lt;=3; {-</span><span class="identifier">my</span><span class="plain">:1}++)</span>
</pre>
<p class="inwebparagraph">and Inform would then have allocated a new variable as loop counter each time.
@ -1010,7 +990,7 @@ out for the two extra syntaxes allowed, <code class="display"><span class="extra
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">tokeniser_state</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DQUOTED_TOKSTATE:</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">DQUOTED_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'"'</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
@ -1018,7 +998,7 @@ out for the two extra syntaxes allowed, <code class="display"><span class="extra
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SQUOTED_TOKSTATE:</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">SQUOTED_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\''</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
@ -1026,11 +1006,11 @@ out for the two extra syntaxes allowed, <code class="display"><span class="extra
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMENT_TOKSTATE:</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMENT_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\n'</span><span class="plain">) </span><span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHITE_TOKSTATE:</span><span class="plain"> </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHITE_TOKSTATE:</span><span class="plain"> </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">default:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'!'</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">COMMENT_TOKSTATE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
@ -1282,8 +1262,6 @@ a bracing.
<p class="inwebparagraph"><a id="SP20_2_4_1_1"></a><b>&#167;20.2.4.1.1. </b>A bracing can take any of the following forms:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-command}</span>
<span class="plain">{-command:operand}</span>
@ -1433,21 +1411,16 @@ outside of quotation marks and commentary, and which doesn't include
bracings or I7 interpolations. That might look like, for instance,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Frog + 2*Toad(</span>
<span class="identifier">Frog</span><span class="plain"> + </span><span class="constant">2</span><span class="plain">*</span><span class="identifier">Toad</span><span class="plain">(</span>
</pre>
<p class="inwebparagraph">(there is no reason to suppose that this stretch of code is complete or
matches parentheses); we must tokenise it into
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Frog| |W| |+| |W| |2| |*| |Toad| |(</span>
</pre>
<p class="inwebparagraph"><code class="display"><span class="extract">Frog</span></code> <code class="display"><span class="extract">W</span></code> <code class="display"><span class="extract">+</span></code> <code class="display"><span class="extract">W</span></code> <code class="display"><span class="extract">2</span></code> <code class="display"><span class="extract">*</span></code> <code class="display"><span class="extract">Toad</span></code> <code class="display"><span class="extract">(</span></code>
</p>
<p class="inwebparagraph">where <code class="display"><span class="extract">W</span></code> indicates a white space token. What we do is scan through the
text until we reach the start of a new token, and then break off what we
@ -1490,13 +1463,10 @@ scanned through since the last time.
the character after the initial dollar determines which:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$+3.14159E2</span>
<span class="plain">$$1001001</span>
<span class="plain">$1FE6</span>
&lt;<span class="cwebmacrodefn">Break off here for real, binary or hexadecimal notation</span> <span class="cwebmacronumber">20.2.2.1.1</span>&gt; =
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
@ -1541,19 +1511,15 @@ not be a negative number: it may be the binary subtraction operator.
For example, we need to tokenise <code class="display"><span class="extract">x-1</span></code> as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">x| |-| |1</span>
<span class="plain">|x| |-| |1|</span>
</pre>
<p class="inwebparagraph">and not as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">x| |-1</span>
<span class="plain">|x| |-1|</span>
</pre>
<p class="inwebparagraph">This requires context, that is, remembering what the previous token was.

View file

@ -263,18 +263,16 @@ to make the I6T files.
<p class="inwebparagraph">The entire range of possibilities is shown here:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Circuses.</span>
<span class="plain"> </span>
<span class="plain">This hypothetical I6T file provides support for holding circuses.</span>
<span class="plain"> </span>
<span class="plain">@h Start.</span>
<span class="functiontext">@h</span><span class="plain"> Start.</span>
<span class="plain">This routine is called when a big top must be raised. Note that the</span>
<span class="plain">elephants must first be watered (see Livestock.i6t).</span>
<span class="plain">=</span>
<span class="functiontext">=</span>
<span class="plain">[ RaiseBT c;</span>
<span class="plain">...</span>
<span class="plain">];</span>

View file

@ -160,20 +160,16 @@
an array written in the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Array X table 20;</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> </span><span class="identifier">table</span><span class="plain"> </span><span class="constant">20</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">makes a table with 20 entries, not a table with one entry whose initial value
is 20. We instead compile this as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Array X --&gt; 1 20;</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> --&gt; </span><span class="constant">1</span><span class="plain"> </span><span class="constant">20</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>

View file

@ -733,15 +733,9 @@ where in memory the correct stick is, and this needs to be quick.
<p class="inwebparagraph">This is essentially a dictionary lookup problem and we solve it by compiling
a faux object <code class="display"><span class="extract">V</span></code> for each <code class="display"><span class="extract">K</span></code>, called a "value property holder" or VPH.
Given <code class="display"><span class="extract">K</span></code> we find <code class="display"><span class="extract">V</span></code> by looking it up in the array
Given <code class="display"><span class="extract">K</span></code> we find <code class="display"><span class="extract">V</span></code> by looking it up in the array <code class="display"><span class="extract">value_property_holders</span></code>.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">value_property_holders</span>
</pre>
<p class="inwebparagraph">Once we know <code class="display"><span class="extract">V</span></code>, we then look up <code class="display"><span class="extract">V.P</span></code> to get the address of the stick for
property <code class="display"><span class="extract">P</span></code>, something which the virtual machine can do quickly.
</p>

View file

@ -432,10 +432,8 @@ sometimes shaky I6 expression parser will accept, which turns out to be
quite a constraint. If we were compiling to C, we might try this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(a, b, c)</span>
<span class="plain">(</span><span class="identifier">a</span><span class="plain">, </span><span class="identifier">b</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">using the serial comma operator &mdash; that is, where the expression <code class="display"><span class="extract">(a, b)</span></code>
@ -448,10 +446,8 @@ function argument comma, i.e., I6 is unable properly to handle expressions
like this one:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(a(b, c), d)</span>
<span class="plain">(</span><span class="identifier">a</span><span class="plain">(</span><span class="identifier">b</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">), </span><span class="identifier">d</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">where the first comma constructs a list and the second is the operator.
@ -459,10 +455,8 @@ like this one:
I actually use is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(c) + 0*((b) + (a))</span>
<span class="plain">(</span><span class="identifier">c</span><span class="plain">) + </span><span class="constant">0</span><span class="plain">*((</span><span class="identifier">b</span><span class="plain">) + (</span><span class="identifier">a</span><span class="plain">))</span>
</pre>
<p class="inwebparagraph">Because I6 evaluates the leaves in an expression tree right-to-left, not

View file

@ -502,9 +502,14 @@ main {
<!--Weave of 'Complete Program' generated by 7-->
<ul class="crumbs"><li><b>The Inform 7 compiler</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>The task of the Inform 7 compiler is to take source text which may be as
minimal as "The Taj Mahal is a room.", and to turn it into a program which can
then be compiled by a more conventional tool. The compiler works in three
phases:
minimal as "The Taj Mahal is a room.", and to turn it into a computer program.
It is properly speaking a "transpiler", in that it compiles down to code for
another compiler to take the rest of the way. Traditionally, that other
compiler is Inform 6 (1996-2003), a reliable generator of "story files"
(programs for virtual machines) from typeless but otherwise C-like code.
</p>
<p class="inwebparagraph">The Inform 7 compiler works in three phases:
</p>
<ul class="items"><li>(1) A build manager reads in the text, breaks it into sentences, finds the
@ -512,30 +517,79 @@ necessary extensions, merges them in, and generally decides what to do.
</li><li>(2) The core of the compiler translates this assemblage of source text into
a low-level abstract language called "inter".
</li><li>(3) The code-generator further translates that intermediate code into our
final output, which is often code for a conventional C-like language.
final output, which will be code for some lower-level compiler.
</li></ul>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Three ccmmand-line tools are provided: <code class="display"><span class="extract">inbuild</span></code>, <code class="display"><span class="extract">inform7</span></code>, and <code class="display"><span class="extract">inter</span></code>.
Each tool has a tiny shell, enough to give each a command-line interface of
its own, but otherwise all three tools are divided up into large segments
called "modules". The three shells are all webs, and each module is a web.
They roughly correspond to the three phases, but <code class="display"><span class="extract">inbuild</span></code> can also
perform some useful archiving and resource management functions, and <code class="display"><span class="extract">inter</span></code>
can also perform assimilation on kits, or translate inter code not originated by
Inform. <code class="display"><span class="extract">inform7</span></code> on its own is capable of performing the complete compilation
process and is the only one of the three included in the GUI apps of Inform
for MacOS, Windows and so on.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">inbuild</span></code> carries out phase 1, but used as a stand-alone tool it can also
perform some useful archiving and resource management functions. Similarly,
<code class="display"><span class="extract">inter</span></code> carries out phase 3, but used as a stand-alone tool it can also
perform assimilation on kits, or translate inter code not originated by
Inform.
<p class="inwebparagraph">Each tool has a tiny CLI (or "command-line interface") but is otherwise
divided up into large segments called "modules", many shared between two or
even all three tools. <code class="display"><span class="extract">inform7</span></code> contains every module. The following diagram
shows exactly how:
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">inform7</span></code> is the compiler as it is found in apps, and carries out all
three phases, 1, 2 and 3. To do this, it contains all the modules of
<code class="display"><span class="extract">inbuild</span></code>, a set of modules of its own, and all the modules of <code class="display"><span class="extract">inter</span></code>.
It therefore contains the whole of the other two programs except for their
outer command-line interfaces, and also contains a gpod deal of unique
material of its own.
<pre class="display">
<span class="plain">+-------------+ +-------------+ +-------------+</span>
<span class="plain">| </span><span class="functiontext">INBUILD</span><span class="plain"> | | </span><span class="functiontext">INFORM7</span><span class="plain"> | | </span><span class="functiontext">INTER</span><span class="plain"> |</span>
<span class="plain">| | | | | |</span>
<span class="plain">+---+.............+---+ +---+.............+---+ +---+.............+---+</span>
<span class="plain">| </span><span class="element">inbuild</span><span class="plain"> (</span><span class="element">cli</span><span class="plain"> </span><span class="element">shell</span><span class="plain">) | | </span><span class="element">inform7</span><span class="plain"> (</span><span class="element">cli</span><span class="plain"> </span><span class="element">shell</span><span class="plain">) | | </span><span class="element">inter</span><span class="plain"> (</span><span class="element">cli</span><span class="plain"> </span><span class="element">shell</span><span class="plain">) |</span>
<span class="plain">+---+.............+---+ +---+.............+---+ +---+.............+---+</span>
<span class="plain">| | | | | |</span>
<span class="plain">+---+.............+----------+.............+---+ | |</span>
<span class="plain">| </span><span class="reserved">inbuild-module</span><span class="plain"> | | |</span>
<span class="plain">| </span><span class="reserved">syntax-module</span><span class="plain"> | | |</span>
<span class="plain">| </span><span class="reserved">html-module</span><span class="plain"> | | |</span>
<span class="plain">+---+.............+----------+.............+---+ | |</span>
<span class="plain">| | | | | |</span>
<span class="plain">| | +---+.............+---+ | |</span>
<span class="plain">| | | </span><span class="reserved">core-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">inflections-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">linguistics-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">problems-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">kinds-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">if-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">multimedia-module</span><span class="plain"> | | |</span>
<span class="plain">| | | </span><span class="reserved">index-module</span><span class="plain"> | | |</span>
<span class="plain">| | +---+.............+---+ | |</span>
<span class="plain">| | | | | |</span>
<span class="plain">| | +---+.............+----------+.............+---+</span>
<span class="plain">| | | </span><span class="reserved">inter-module</span><span class="plain"> |</span>
<span class="plain">| | | </span><span class="reserved">building-module</span><span class="plain"> |</span>
<span class="plain">| | | </span><span class="reserved">codegen-module</span><span class="plain"> |</span>
<span class="plain">| | +---+.............+----------+.............+---+</span>
<span class="plain">| | | | | |</span>
<span class="plain">+---+.............+----------+.............+----------+.............+---+</span>
<span class="plain">| </span><span class="reserved">words-module</span><span class="plain"> |</span>
<span class="plain">| </span><span class="reserved">arch-module</span><span class="plain"> |</span>
<span class="plain">+---+.............+----------+.............+----------+.............+---+</span>
<span class="plain">| | | | | |</span>
<span class="plain">+---+.............+----------+.............+----------+.............+---+</span>
<span class="plain">| (</span><span class="reserved">foundation-module</span><span class="plain"> </span><span class="element">from</span><span class="plain"> </span><span class="element">inweb</span><span class="plain">) |</span>
<span class="plain">| (</span><span class="element">Posix</span><span class="plain"> </span><span class="element">or</span><span class="plain"> </span><span class="element">Windows</span><span class="plain">-</span><span class="element">related</span><span class="plain"> </span><span class="element">functions</span><span class="plain">) |</span>
<span class="plain">| (</span><span class="element">standard</span><span class="plain"> </span><span class="element">C</span><span class="plain"> </span><span class="element">library</span><span class="plain">) |</span>
<span class="plain">+---+.............+----------+.............+----------+.............+---+</span>
<span class="plain">| | | | | |</span>
<span class="plain">+-------------+ +-------------+ +-------------+</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>The three CLIs are to be found in the webs called <code class="display"><span class="extract">inbuild</span></code>, <code class="display"><span class="extract">inform7</span></code>
and <code class="display"><span class="extract">inter</span></code> (and these are the webs which tangle to the three complete tools).
Each module is also a web, and the above chart shows where it is: a module
in the INBUILD column, say <code class="display"><span class="extract">syntax-module</span></code>, is at the path <code class="display"><span class="extract">inbuild/syntax-module</span></code>,
for example. But as the diagram shows, it's shared code and runs in both
<code class="display"><span class="extract">inbuild</span></code> and <code class="display"><span class="extract">inform7</span></code>.
</p>
<p class="inwebparagraph">All three also contain the <code class="display"><span class="extract">foundation</span></code> module, a library of utility
<p class="inwebparagraph">All three tools also contain the <code class="display"><span class="extract">foundation</span></code> module, a library of utility
code which is present in every Inform tool.
</p>

View file

@ -310,8 +310,6 @@ Plotkin, returns the IEEE-754 single-precision encoding of a floating-point
number. See:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">http://www.psc.edu/general/software/packages/ieee/ieee.php</span>
</pre>

View file

@ -132,8 +132,6 @@ instruction like so:
the proposition in predicate calculus which that became:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">1. a man can see the box in the Laboratory</span>
<span class="plain">[ Exists x : man(x) &amp; thing('box') &amp; is('laboratory', ContainerOf('box')) &amp; can-see(x, 'box') ]</span>

View file

@ -90,8 +90,6 @@ propositions, so we have to build carefully.
produces:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">1. no man can see the box</span>
<span class="plain">[ DoesNotExist x IN[ man(x) IN] : can-see(x, 'box') ]</span>
@ -100,8 +98,6 @@ produces:
<p class="inwebparagraph">The proposition is stored as a linked list of atoms, of elements like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">QUANTIFIER --&gt; DOMAIN_OPEN --&gt; PREDICATE --&gt; DOMAIN_CLOSE --&gt; PREDICATE</span>
</pre>
@ -211,8 +207,6 @@ is understood to mean multiplication of x by y, and of w by (v-1).
Note that if we were to write it out as a sequence of symbols
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">x y + w ( v - 1 )</span>
</pre>
@ -315,14 +309,16 @@ only (i).
syntactically valid:
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">DOMAIN_OPEN_ATOM --&gt; NEGATION_CLOSE_ATOM --&gt; NEGATION_CLOSE_ATOM</span></code>
</p>
<pre class="display">
<span class="plain">|DOMAIN_OPEN_ATOM --&gt; NEGATION_CLOSE_ATOM --&gt; NEGATION_CLOSE_ATOM|</span>
</pre>
<p class="inwebparagraph">This one is syntactically valid, but not well-formed:
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">EVERYWHERE_ATOM(x) --&gt; QUANTIFIER=for-all(x) --&gt; PREDICATE=open(x)</span></code>
</p>
<pre class="display">
<span class="plain">|EVERYWHERE_ATOM(x) --&gt; QUANTIFIER=for-all(x) --&gt; PREDICATE=open(x)|</span>
</pre>
<p class="inwebparagraph">(If <code class="display"><span class="extract">x</span></code> ranges over all objects at the middle of the proposition, it had
better not already have a value, but if it doesn't, what can that first
@ -333,8 +329,9 @@ where clearly two different things have been called n.)
<p class="inwebparagraph">And this proposition is well-formed but not type-safe:
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">QUANTIFIER=for-all(x) --&gt; KIND=number(x) --&gt; EVERYWHERE(x)</span></code>
</p>
<pre class="display">
<span class="plain">|QUANTIFIER=for-all(x) --&gt; KIND=number(x) --&gt; EVERYWHERE(x)|</span>
</pre>
<p class="inwebparagraph">(Here <code class="display"><span class="extract">x</span></code> is supposed to be a number, and therefore has no location, but
<code class="display"><span class="extract">EVERYWHERE</span></code> can validly be applied only to backdrop objects, so what
@ -579,17 +576,16 @@ which has been simplified.
detect subsequences within a proposition: say, the sequence
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">QUANTIFIER --&gt; PREDICATE --&gt; anything --&gt; CALLED</span></code>
</p>
<pre class="display">
<span class="plain">QUANTIFIER --&gt; PREDICATE --&gt; anything --&gt; CALLED</span>
</pre>
<p class="inwebparagraph">starting at the current position, which could be tested with:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Calculus::Propositions::match(p, 4, QUANTIFIER_ATOM, NULL, PREDICATE_ATOM, NULL,</span>
<span class="plain"> ANY_ATOM_HERE, NULL, CALLED_ATOM, &amp;cp);</span>
<span class="plain">ANY_ATOM_HERE, NULL, CALLED_ATOM, &amp;cp);</span>
</pre>
<p class="inwebparagraph">As can be seen, each atom is tested with an element number and an optional
@ -860,8 +856,9 @@ following are useful for looping through them:
bracketed group. For instance:
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">NEGATION_OPEN --&gt; PREDICATE --&gt; KIND --&gt; NEGATION_CLOSE</span></code>
</p>
<pre class="display">
<span class="plain">NEGATION_OPEN --&gt; PREDICATE --&gt; KIND --&gt; NEGATION_CLOSE</span>
</pre>
<p class="inwebparagraph">would qualify. Note that detection succeeds only if the parentheses match,
and that they may be nested.

View file

@ -253,8 +253,6 @@ type-checking, even if there is no implication that both apply at once. This
throws out, for instance:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">1. a scene which is not a number</span>
<span class="plain">[ scene(x) &amp; NOT[ number(x) NOT] ]</span>
@ -346,8 +344,6 @@ instance, if we define
<p class="inwebparagraph">then we find that, say:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">1. empty which is empty</span>
<span class="plain">[ 'empty'(x) &amp; 'empty'(x) ]</span>
@ -410,8 +406,6 @@ problem message has already been issued, but just in case not...
sense of the proposition is arguably correct. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">1. 100 is not a text</span>
<span class="plain">[ NOT[ text('100') NOT] ]</span>

View file

@ -500,11 +500,9 @@ variables such that φ is true. For example,
might compile to code in the form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">blah, blah, blah {</span>
<span class="plain"> M</span>
<span class="plain">M</span>
<span class="plain">} rhubarb, rhubarb</span>
</pre>
@ -540,8 +538,6 @@ position <code class="display"><span class="extract">M</span></code>.
φ arises from "all doors are open" and is stored in memory as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Forall x IN[ door(x) IN] open(x)</span>
</pre>
@ -828,12 +824,10 @@ to a conjunction: X∧ Y∧ Z. The obvious way to compile code for this
would be to take one term at a time:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (X)</span>
<span class="plain"> if (Y)</span>
<span class="plain"> if (Z)</span>
<span class="plain">if (Y)</span>
<span class="plain">if (Z)</span>
</pre>
<p class="inwebparagraph">That satisfies the Invariant, and is clearly correct. But we want to use the
@ -851,8 +845,6 @@ we don't crash: it will never be run.) Thus we can assume that between
¬(X∧ Y∧ Z), and we need to compile that to
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (~~(X &amp;&amp; Y &amp;&amp; Z))</span>
</pre>
@ -860,12 +852,10 @@ we don't crash: it will never be run.) Thus we can assume that between
<p class="inwebparagraph">rather than
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (~~X)</span>
<span class="plain"> if (~~Y)</span>
<span class="plain"> if (~~Z)</span>
<span class="plain">if (~~Y)</span>
<span class="plain">if (~~Z)</span>
</pre>
<p class="inwebparagraph">which gets de Morgan's laws wrong.
@ -958,11 +948,9 @@ preserved by them. There are two cases: ∃, and everything else.
<p class="inwebparagraph">The existence case is the easiest. Given ∃ v: ψ(v) we compile
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">loop header for v to run through its domain set {</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">and note that execution reaches the start of the loop body once for each
@ -997,8 +985,6 @@ cases over a domain set. These need more elaborate code. Suppose we have
looks like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">QUANTIFIER --&gt; DOMAIN_OPEN --&gt; psi --&gt; DOMAIN_CLOSE --&gt; theta</span>
</pre>
@ -1006,21 +992,19 @@ looks like this:
<p class="inwebparagraph">We compile that to code in the following shape:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">set count of domain size to 0</span>
<span class="plain">set count of valid cases to 0</span>
<span class="plain">loop header for v to run through its domain set {</span>
<span class="plain"> if psi holds {</span>
<span class="plain"> increment count of domain size</span>
<span class="plain"> if theta holds {</span>
<span class="plain"> increment count of valid cases</span>
<span class="plain"> }</span>
<span class="plain"> }</span>
<span class="plain">if psi holds {</span>
<span class="plain">increment count of domain size</span>
<span class="plain">if theta holds {</span>
<span class="plain">increment count of valid cases</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">if the counts are such that the quantifier is satisfied {</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">We don't always need both counts. For instance, to handle "at least three
@ -1106,8 +1090,6 @@ do want to allow "now nobody likes Mr Wickham", say, which asserts
<p class="inwebparagraph"><a id="SP2_1_6_1_2_4"></a><b>&#167;2.1.6.1.2.4. </b>To resume the narrative of what happens when we read:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">QUANTIFIER --&gt; DOMAIN_OPEN --&gt; psi --&gt; DOMAIN_CLOSE --&gt; theta</span>
</pre>
@ -1129,14 +1111,12 @@ to record any "called" values for later retrieval by whoever called
this proposition routine: see below. That leaves just this part:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain"> }</span>
<span class="plain"> }</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">if the counts are such that the quantifier is satisfied {</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">left to compile, and we will be done: execution will reach the <code class="display"><span class="extract">...</span></code> if and
@ -1234,17 +1214,15 @@ point <code class="display"><span class="extract">M</span></code>, that is, imme
is transferred as soon as a dark room is found. The code looks like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">set count of domain size to 1</span>
<span class="plain">loop through domain (i.e., dark rooms adjacent to the person's location) {</span>
<span class="plain"> increment count of domain size</span>
<span class="plain"> record the lair value</span>
<span class="plain">increment count of domain size</span>
<span class="plain">record the lair value</span>
<span class="plain">}</span>
<span class="plain">if the count of domain size is 1 {</span>
<span class="plain"> record the dupe value</span>
<span class="plain"> M</span>
<span class="plain">record the dupe value</span>
<span class="plain">M</span>
<span class="plain">}</span>
</pre>
@ -2186,13 +2164,11 @@ domain.
<p class="inwebparagraph"><a id="SP2_1_6_1_17"></a><b>&#167;2.1.6.1.17. </b>Snarkily, this is how we do it:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if we're called with a valid member of the domain, go to Z</span>
<span class="plain">loop x over members of the domain {</span>
<span class="plain"> return x</span>
<span class="plain"> label Z is here</span>
<span class="plain">return x</span>
<span class="plain">label Z is here</span>
<span class="plain">}</span>
</pre>
@ -2301,16 +2277,14 @@ involve loops through objects. Consider:
<p class="inwebparagraph">Code like this will run very slowly:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">loop over objects (x)</span>
<span class="plain"> loop over objects (y)</span>
<span class="plain"> if x is a person</span>
<span class="plain"> if x is in the Dining Room</span>
<span class="plain"> if y is an animal</span>
<span class="plain"> if x can see y</span>
<span class="plain"> success!</span>
<span class="plain">loop over objects (y)</span>
<span class="plain">if x is a person</span>
<span class="plain">if x is in the Dining Room</span>
<span class="plain">if y is an animal</span>
<span class="plain">if x can see y</span>
<span class="plain">success!</span>
</pre>
<p class="inwebparagraph">This is folly in so many ways. Most objects aren't people or animals, so
@ -2319,14 +2293,12 @@ of x for every possible y. And there are quick ways to find what is in
the Dining Room, so we're missing a trick there, too. What we want is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">loop over objects in the Dining Room (x)</span>
<span class="plain"> if x is a person</span>
<span class="plain"> loop over animals (y)</span>
<span class="plain"> if x can see y</span>
<span class="plain"> success!</span>
<span class="plain">if x is a person</span>
<span class="plain">loop over animals (y)</span>
<span class="plain">if x can see y</span>
<span class="plain">success!</span>
</pre>
<p class="inwebparagraph"></p>
@ -2409,8 +2381,6 @@ called to compile a loop arising from a quantifier with a domain, in
which case <code class="display"><span class="extract">grouped</span></code> is set and <code class="display"><span class="extract">proposition</span></code> points to:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">QUANTIFIER --&gt; DOMAIN_OPEN --&gt; psi --&gt; DOMAIN_CLOSE --&gt; ...</span>
</pre>
@ -2487,8 +2457,6 @@ loop in which <code class="display"><span class="extract">*1</span></code> denot
<p class="inwebparagraph">For example, the worn-by relation writes the schema:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">objectloop (*1 in *2) if (WearerOf(*1)==parent(*1))</span>
</pre>

View file

@ -306,19 +306,15 @@ substitution of x=v.
<p class="inwebparagraph">For example, <code class="display"><span class="extract">R</span></code> might contain the function call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Prop_19(t_6, t_2, O13_sphinx)</span>
<span class="identifier">Prop_19</span><span class="plain">(</span><span class="identifier">t_6</span><span class="plain">, </span><span class="identifier">t_2</span><span class="plain">, </span><span class="identifier">O13_sphinx</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">and the function header of <code class="display"><span class="extract">Prop_19</span></code> might then look like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[ Prop_19 const_0 const_1 x;</span>
<span class="plain">[ </span><span class="identifier">Prop_19</span><span class="plain"> </span><span class="identifier">const_0</span><span class="plain"> </span><span class="identifier">const_1</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">The value of <code class="display"><span class="extract">cinder_count</span></code> would then be 2.
@ -427,10 +423,8 @@ recursive use of propositions will overwrite the list.)
<p class="inwebparagraph">For example, <code class="display"><span class="extract">R</span></code> might this time contain a call like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(Prop_19() &amp;&amp; (t_2=deferred_calling_list--&gt;0, t_3=deferred_calling_list--&gt;1, true))</span>
<span class="plain">(</span><span class="identifier">Prop_19</span><span class="plain">() &amp;&amp; (</span><span class="identifier">t_2</span><span class="plain">=</span><span class="identifier">deferred_calling_list</span><span class="plain">--&gt;0, </span><span class="identifier">t_3</span><span class="plain">=</span><span class="identifier">deferred_calling_list</span><span class="plain">--&gt;1, </span><span class="reserved">true</span><span class="plain">))</span>
</pre>
<p class="inwebparagraph">which safely transfers the values to locals <code class="display"><span class="extract">t_2</span></code> and <code class="display"><span class="extract">t_3</span></code> of <code class="display"><span class="extract">R</span></code>. Note
@ -836,20 +830,16 @@ that it has been compiled as a multi-purpose description routine, and
therefore compile the function call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">D(NUMBER_OF_DUSAGE)</span>
<span class="identifier">D</span><span class="plain">(</span><span class="identifier">NUMBER_OF_DUSAGE</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">But in case [2] it is sufficient to take φ(x) = door(x)∧closed(x),
defer it to a proposition with reason <code class="display"><span class="extract">NUMBER_OF_DEFER</span></code>, and then compile just
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Prop_19()</span>
<span class="identifier">Prop_19</span><span class="plain">()</span>
</pre>
<p class="inwebparagraph">to perform the calculation. We never need a multi-purpose description routine for
@ -1181,10 +1171,8 @@ in the same location at the end of the loop as at the beginning.
<p class="inwebparagraph">Thus a typical loop header has the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">for (t_1=D(0), t_2=D(t_1): t_1: t_1=t_2, t_2=D(t_1))</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">t_1</span><span class="plain">=</span><span class="identifier">D</span><span class="plain">(0), </span><span class="identifier">t_2</span><span class="plain">=</span><span class="identifier">D</span><span class="plain">(</span><span class="identifier">t_1</span><span class="plain">): </span><span class="identifier">t_1</span><span class="plain">: </span><span class="identifier">t_1</span><span class="plain">=</span><span class="identifier">t_2</span><span class="plain">, </span><span class="identifier">t_2</span><span class="plain">=</span><span class="identifier">D</span><span class="plain">(</span><span class="identifier">t_1</span><span class="plain">))</span>
</pre>
<p class="inwebparagraph">where <code class="display"><span class="extract">D</span></code> is a routine such that at 0 it produces the first element of the

View file

@ -663,11 +663,9 @@ different values at run-time. The following general code is sufficient to turn a
strong ID into a weak one:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if ((strong &gt;= 0) &amp;&amp; (strong &lt; BASE_KIND_HWM)) weak = strong;</span>
<span class="plain">else weak = strong--&gt;0;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">strong</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">strong</span><span class="plain"> &lt; </span><span class="identifier">BASE_KIND_HWM</span><span class="plain">)) </span><span class="identifier">weak</span><span class="plain"> = </span><span class="identifier">strong</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">weak</span><span class="plain"> = </span><span class="identifier">strong</span><span class="plain">--&gt;0;</span>
</pre>
<p class="inwebparagraph">We must be careful with comparisons because a strong ID may be numerically

View file

@ -742,11 +742,9 @@ then, the tree we're checking contains its own instructions on how it
should be checked. For example, the subtree
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">CONDITION_CONTEXT_NT</span>
<span class="plain"> p</span>
<span class="plain">p</span>
</pre>
<p class="inwebparagraph">tells us that when we reach <code class="display"><span class="extract">p</span></code> it should be checked as a condition.
@ -1433,8 +1431,6 @@ there are still a handful of pitfalls.
like this as the result:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">f ? f g ? ? p - - -</span>
</pre>
@ -1443,8 +1439,6 @@ like this as the result:
or never reached &mdash; to leave just those which will be compiled:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">? ? ? p</span>
</pre>

View file

@ -255,35 +255,7 @@ value the property will have, and compiles a clause as appropriate.
<p class="endnote">The function Properties::Emit::emit_propertyvalue is used in <a href="#SP1_1_3">&#167;1.1.3</a>, <a href="#SP1_1_4">&#167;1.1.4</a>.</p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b>Inform 6 notation is to use a clause like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">with capacity 20</span>
</pre>
<p class="inwebparagraph">for I6 properties, and
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">has open ~lockable</span>
</pre>
<p class="inwebparagraph">for "attributes", where the tilde <code class="display"><span class="extract">~</span></code> denotes negation. As noted above, some
of our either/or properties are going to be stored as attributes, in which case
the value 1 (run-time <code class="display"><span class="extract">true</span></code>) corresponds to <code class="display"><span class="extract">has</span></code> and 0 to <code class="display"><span class="extract">has ~</span></code>.
</p>
<p class="inwebparagraph">For purposes of our size calculation, each property costs 2 words, but attributes
are free.
</p>
<p class="macrodefinition"><code class="display">
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Now emit a propertyvalue</span> <span class="cwebmacronumber">2.1</span>&gt; =
</code></p>

View file

@ -309,7 +309,7 @@ about the Portal, to stand.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">clash</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">abcn</span><span class="plain"> = </span><span class="functiontext">World::Inferences::get_certainty</span><span class="plain">(</span><span class="identifier">narrow</span><span class="plain">); </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">abcn</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">abcn</span><span class="plain"> = -</span><span class="identifier">abcn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">abcn</span><span class="plain"> == </span><span class="identifier">CERTAIN_CE</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Issue a problem message for clash with wider inference</span> <span class="cwebmacronumber">1.2.2.1.1.1</span>&gt;
<span class="plain"> </span>&lt;<span class="cwebmacro">Issue a problem message for clash with wider inference</span> <span class="cwebmacronumber">1.2.2.1.1.1</span>&gt;
<span class="reserved">else</span>
<span class="functiontext">World::Inferences::set_certainty</span><span class="plain">(</span><span class="identifier">narrow</span><span class="plain">, </span><span class="identifier">IMPOSSIBLE_CE</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -675,10 +675,8 @@ value useful for sorting algorithms: 0 if equal, positive if <code class="displa
negative if <code class="display"><span class="extract">i2 &lt; i1</span></code>. This is a stable trichotomy; in particular,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">World::Inferences::compare_inferences(I, J) == -World::Inferences::compare_inferences(J, I)</span>
<span class="functiontext">World::Inferences::compare_inferences</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">J</span><span class="plain">) == -</span><span class="functiontext">World::Inferences::compare_inferences</span><span class="plain">(</span><span class="identifier">J</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">for all pairs of inference pointers <code class="display"><span class="extract">I</span></code> and <code class="display"><span class="extract">J</span></code>.
@ -738,7 +736,7 @@ was probably a good thing.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pr1</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Properties::is_either_or</span><span class="plain">(</span><span class="identifier">pr1</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">pr2</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Properties::is_either_or</span><span class="plain">(</span><span class="identifier">pr2</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">pr1</span><span class="plain"> == </span><span class="functiontext">Properties::EitherOr::get_negation</span><span class="plain">(</span><span class="identifier">pr2</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">pr2</span><span class="plain"> == </span><span class="functiontext">Properties::EitherOr::get_negation</span><span class="plain">(</span><span class="identifier">pr1</span><span class="plain">)))) </span><span class="identifier">pr2</span><span class="plain"> = </span><span class="identifier">pr1</span><span class="plain">;</span>
<span class="plain"> (</span><span class="identifier">pr2</span><span class="plain"> == </span><span class="functiontext">Properties::EitherOr::get_negation</span><span class="plain">(</span><span class="identifier">pr1</span><span class="plain">)))) </span><span class="identifier">pr2</span><span class="plain"> = </span><span class="identifier">pr1</span><span class="plain">;</span>
<span class="identifier">c</span><span class="plain"> = </span><span class="functiontext">World::Inferences::measure_property</span><span class="plain">(</span><span class="identifier">pr1</span><span class="plain">) - </span><span class="functiontext">World::Inferences::measure_property</span><span class="plain">(</span><span class="identifier">pr2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">CI_DIFFER_IN_PROPERTY</span><span class="plain">; </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> -</span><span class="constant">CI_DIFFER_IN_PROPERTY</span><span class="plain">;</span>
<span class="identifier">c</span><span class="plain"> = </span><span class="functiontext">World::Inferences::measure_infs</span><span class="plain">(</span><span class="identifier">i1</span><span class="plain">-&gt;</span><span class="element">infs_ref2</span><span class="plain">) - </span><span class="functiontext">World::Inferences::measure_infs</span><span class="plain">(</span><span class="identifier">i2</span><span class="plain">-&gt;</span><span class="element">infs_ref2</span><span class="plain">);</span>
@ -895,10 +893,8 @@ is not possible here.)
always at least half-way down the list, so we can be certain that
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">i-&gt;inference_type == list-&gt;inference_type</span>
<span class="identifier">i</span><span class="plain">-&gt;</span><span class="element">inference_type</span><span class="plain"> == </span><span class="identifier">list</span><span class="plain">-&gt;</span><span class="element">inference_type</span>
</pre>
<p class="inwebparagraph">(and therefore it's unambiguous what we mean by the type of inference being

View file

@ -172,20 +172,18 @@ are instances.
Thus we have:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">model_world</span>
<span class="plain"> nonlocal_variables</span>
<span class="plain"> ...all individual globals</span>
<span class="plain"> global_constants</span>
<span class="plain"> ...all kinds, including:</span>
<span class="plain"> K_object</span>
<span class="plain"> K_thing</span>
<span class="plain"> K_container</span>
<span class="plain"> ...</span>
<span class="plain"> K_room</span>
<span class="plain"> ...</span>
<span class="plain">nonlocal_variables</span>
<span class="plain">...all individual globals</span>
<span class="plain">global_constants</span>
<span class="plain">...all kinds, including:</span>
<span class="plain">K_object</span>
<span class="plain">K_thing</span>
<span class="plain">K_container</span>
<span class="plain">...</span>
<span class="plain">K_room</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">(Note that objects appear within the hierarchy of values, rather than alongside

View file

@ -246,19 +246,15 @@ routine for the rule, called in this case <code class="display"><span class="ext
calls
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">HACK_MODE_ON_RM('A');</span>
<span class="identifier">HACK_MODE_ON_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">to produce response (A), or alternatively
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">HACK_MODE_ON_RM('a');</span>
<span class="identifier">HACK_MODE_ON_RM</span><span class="plain">(</span><span class="character">'a'</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">to return the current text of (A) without printing it. Speed is not of the
@ -745,8 +741,6 @@ text needs to be printed in a particular way.
<p class="inwebparagraph"><a id="SP12_1"></a><b>&#167;12.1. </b>Responses take the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"blah blah blah" ( letter )</span>
</pre>

View file

@ -266,7 +266,7 @@ the values given there.
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::can_exchange</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">bits</span><span class="plain"> += </span><span class="constant">TB_COLUMN_CANEXCHANGE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Kinds::Behaviour::uses_signed_comparisons</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))) </span><span class="identifier">bits</span><span class="plain"> += </span><span class="constant">TB_COLUMN_SIGNED</span><span class="plain">;</span>
<span class="plain"> (</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))) </span><span class="identifier">bits</span><span class="plain"> += </span><span class="constant">TB_COLUMN_SIGNED</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">bits</span><span class="plain"> += </span><span class="constant">TB_COLUMN_REAL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::uses_pointer_values</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">bits</span><span class="plain"> += </span><span class="constant">TB_COLUMN_ALLOCATED</span><span class="plain">;</span>

View file

@ -909,12 +909,9 @@ and its inverse, with the index <code class="display"><span class="extract">-1</
the other table at all. The result will be:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">old_to_new: 2, 0, -1</span>
<span class="plain">new_to_old: 1, -1, 0, -1</span>
&lt;<span class="cwebmacrodefn">Build the column correspondence tables</span> <span class="cwebmacronumber">20.10.1</span>&gt; =
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">old_t</span><span class="plain">-&gt;</span><span class="element">no_columns</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) </span><span class="identifier">old_to_new</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">] = -1;</span>
@ -1738,8 +1735,6 @@ row in the main table, and we need to decide which one. Suppose the amendment
reads:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">62 "lampstand" 10:30 AM</span>
</pre>

View file

@ -137,7 +137,7 @@ group.
<span class="string">"forgotten."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WORD_TOO_LONG_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_WordTooLong</span><span class="plain">),</span>
<span class="plain"> </span><span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_WordTooLong</span><span class="plain">),</span>
<span class="string">"Word too long"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_word</span><span class="plain">,</span>
<span class="string">"(Individual words of unquoted text can run up to "</span>
<span class="string">"128 letters long, which ought to be plenty. The longest "</span>

View file

@ -135,17 +135,14 @@ identified with the same codes as used in "Dimensions". Note
that the equals sign <code class="display"><span class="extract">=</span></code> is itself considered an operation here.Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">OPERATION_EQN =</span>
<span class="plain"> SYMBOL_EQN E</span>
<span class="plain"> OPERATION_EQN *</span>
<span class="plain"> SYMBOL_EQN m</span>
<span class="plain"> OPERATION_EQN ^</span>
<span class="plain"> SYMBOL_EQN c</span>
<span class="plain"> CONSTANT_EQN 2</span>
<span class="plain">SYMBOL_EQN E</span>
<span class="plain">OPERATION_EQN *</span>
<span class="plain">SYMBOL_EQN m</span>
<span class="plain">OPERATION_EQN ^</span>
<span class="plain">SYMBOL_EQN c</span>
<span class="plain">CONSTANT_EQN 2</span>
<span class="definitionkeyword">define</span> <span class="constant">CONSTANT_EQN</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="comment">a leaf, representing a quasinumerical constant not given a symbol</span>
<span class="definitionkeyword">define</span> <span class="constant">SYMBOL_EQN</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="comment">a leaf, representing a symbol</span>
<span class="definitionkeyword">define</span> <span class="constant">OPERATION_EQN</span><span class="plain"> </span><span class="constant">3</span><span class="plain"> </span><span class="comment">a non-leaf, representing an operation</span>
@ -2666,14 +2663,12 @@ point it is at the top level as required and we break out of the loop.
always holds. The simplest case to understand is <code class="display"><span class="extract">+</span></code>. Suppose we have:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> +</span>
<span class="plain"> V</span>
<span class="plain"> E</span>
<span class="plain"> R</span>
<span class="plain">+</span>
<span class="plain">V</span>
<span class="plain">E</span>
<span class="plain">R</span>
</pre>
<p class="inwebparagraph">representing (V+E) = R, where V is the sub-equation containing
@ -2683,14 +2678,12 @@ upwards in the tree, and since we can choose to promote either V or
E, we'll choose V, thus obtaining:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> V</span>
<span class="plain"> -</span>
<span class="plain"> R</span>
<span class="plain"> E</span>
<span class="plain">V</span>
<span class="plain">-</span>
<span class="plain">R</span>
<span class="plain">E</span>
</pre>
<p class="inwebparagraph">that is, V = (R - E). Since V has moved upwards, so has the unique instance
@ -2701,14 +2694,12 @@ Multiplication is similar, but turns into division on the right hand side.
<p class="inwebparagraph">But now consider <code class="display"><span class="extract">-</span></code>. When we rearrange:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> -</span>
<span class="plain"> E</span>
<span class="plain"> V</span>
<span class="plain"> R</span>
<span class="plain">-</span>
<span class="plain">E</span>
<span class="plain">V</span>
<span class="plain">R</span>
</pre>
<p class="inwebparagraph">representing (E-V) = R we no longer have a choice of which operand of <code class="display"><span class="extract">-</span></code>
@ -2776,26 +2767,22 @@ to write more explicit source text.
<p class="inwebparagraph">Anyway, rearrangement for our easy cases is indeed easy:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> ^</span>
<span class="plain"> V</span>
<span class="plain"> 2</span>
<span class="plain"> R</span>
<span class="plain">^</span>
<span class="plain">V</span>
<span class="plain">2</span>
<span class="plain">R</span>
</pre>
<p class="inwebparagraph">becomes
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> V</span>
<span class="plain"> square-root</span>
<span class="plain"> R</span>
<span class="plain">V</span>
<span class="plain">square-root</span>
<span class="plain">R</span>
</pre>
<p class="inwebparagraph">and V is always promoted, so we achieve property (i); and similarly for
@ -2859,28 +2846,23 @@ which is only possible if we have an inverse available for our function &mdash;
in this case, <code class="display"><span class="extract">exp</span></code> being the inverse of <code class="display"><span class="extract">log</span></code>. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> apply</span>
<span class="plain"> function</span>
<span class="plain"> V</span>
<span class="plain"> R</span>
<span class="plain">apply</span>
<span class="plain">function</span>
<span class="plain">V</span>
<span class="plain">R</span>
</pre>
<p class="inwebparagraph">must become
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">=</span>
<span class="plain"> V</span>
<span class="plain"> apply</span>
<span class="plain"> inverse-of-function</span>
<span class="plain"> R</span>
<span class="plain">V</span>
<span class="plain">apply</span>
<span class="plain">inverse-of-function</span>
<span class="plain">R</span>
&lt;<span class="cwebmacrodefn">Rearrange using the inverse of function</span> <span class="cwebmacronumber">50.3.2</span>&gt; =
<span class="reserved">equation_node</span><span class="plain"> *</span><span class="identifier">fnode</span><span class="plain"> = </span><span class="identifier">old_LHS</span><span class="plain">-&gt;</span><span class="element">enode_operands</span><span class="plain">[0];</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">fnode</span><span class="plain">-&gt;</span><span class="element">leaf_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>

View file

@ -129,14 +129,12 @@ course, we need to turn the definition into a function looking something
like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[ R_231 N;</span>
<span class="plain"> increase the score by N;</span>
<span class="plain"> say "Well done!";</span>
<span class="plain"> rtrue;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">R_231</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">;</span>
<span class="identifier">increase</span><span class="plain"> </span><span class="identifier">the</span><span class="plain"> </span><span class="identifier">score</span><span class="plain"> </span><span class="identifier">by</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">;</span>
<span class="identifier">say</span><span class="plain"> </span><span class="string">"Well done</span><span class="comment">;</span>
<span class="string">rtrue;</span>
<span class="string">];</span>
</pre>
<p class="inwebparagraph">Devising this <code class="display"><span class="extract">R_231</span></code> function is called "compiling" the phrase. On the

View file

@ -274,8 +274,6 @@ is one that returns the default value of kind K. For example, the default
value of
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase (text, time) -&gt; number</span>
</pre>

View file

@ -276,10 +276,8 @@ invocation which is given as verbatim I6.
<p class="inwebparagraph"><a id="SP6_5"></a><b>&#167;6.5. </b>The stack frame needs to know the kind of this phrase &mdash; something like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase number -&gt; text</span>
<span class="identifier">phrase</span><span class="plain"> </span><span class="identifier">number</span><span class="plain"> -&gt; </span><span class="identifier">text</span>
</pre>
<p class="inwebparagraph">&mdash; in order to work out what happens when values are decided by it later on.

View file

@ -498,14 +498,12 @@ opportunity might exist for the rule to fire. The structure of this is
similar to:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[ Rule;</span>
<span class="plain"> if (some-firing-condition) {</span>
<span class="plain"> ...</span>
<span class="plain"> return some-default-outcome;</span>
<span class="plain"> }</span>
<span class="plain">[ </span><span class="identifier">Rule</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">some</span><span class="plain">-</span><span class="identifier">firing</span><span class="plain">-</span><span class="identifier">condition</span><span class="plain">) {</span>
<span class="plain">...</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">some</span><span class="plain">-</span><span class="reserved">default</span><span class="plain">-</span><span class="identifier">outcome</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>

View file

@ -178,20 +178,16 @@ number that varies", because the former is a kind and the latter is not.
This is rather like C, where variables might be declared like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">int width, height; char *name;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">; </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">In C, the range of types which can be stored is the same as the range of
types which can be function arguments, so for instance:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">int area(int width, int height) { return width*height; }</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">) { </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">*</span><span class="identifier">height</span><span class="plain">; }</span>
</pre>
<p class="inwebparagraph">But whereas Inform's variables are much like C's, Inform's phrase definitions
@ -429,8 +425,6 @@ in different circumstances at run-time.
<p class="inwebparagraph">What's the kind of this? From the point of view of compilation, it's
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase (K, K) -&gt; nothing</span>
</pre>
@ -451,8 +445,6 @@ it from the 12 or the 31. So, internally, Inform regards the kind of this
phrase as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase (K, K, K) -&gt; nothing</span>
</pre>
@ -619,8 +611,6 @@ instance, if the source text ever contains an invocation like:
which has the kind:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase (number, list of numbers) -&gt; nothing</span>
</pre>

View file

@ -233,14 +233,14 @@ has in this version: for example, given the definition
<p class="inwebparagraph">the invocation
</p>
<p class="inwebparagraph"> judge 2 against "two";
</p>
<blockquote>
<p>judge 2 against "two";</p>
</blockquote>
<p class="inwebparagraph">would result in a call to this routine where K was set to:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">phrase (number, text) -&gt; nothing</span>
</pre>

View file

@ -300,8 +300,6 @@ We want each invocation in turn to try to handle the situation, and to stop
as soon as one of them does. The first thought is this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (condition for I1 to be valid) invoke I1(T1, ..., Tm);</span>
<span class="plain">else if (condition for I2 to be valid) invoke I2(T1, ..., Tm);</span>
@ -315,8 +313,6 @@ final invocation can be proved applicable at compile time, and then we'll
compile this instead:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (condition for I1 to be valid) invoke I1(T1, ..., Tm);</span>
<span class="plain">else if (condition for I2 to be valid) invoke I2(T1, ..., Tm);</span>
@ -337,8 +333,6 @@ something, and that phrase had side-effects). So in fact we modify our
scheme like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">formal_par1 = T1;</span>
<span class="plain">formal_par2 = T2;</span>
@ -415,13 +409,10 @@ the context of a value.
<p class="inwebparagraph"><a id="SP3_2_3_1"></a><b>&#167;3.2.3.1. </b>In void mode, this code is simple: it just produces a list of assignments:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">formal_par1 = T1;</span>
<span class="plain">formal_par2 = T2;</span>
<span class="plain">...</span>
&lt;<span class="cwebmacrodefn">Compile code to set the formal parameters in void mode</span> <span class="cwebmacronumber">3.2.3.1</span>&gt; =
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
&lt;<span class="cwebmacro">Compile the actual assignment</span> <span class="cwebmacronumber">3.2.3.1.1</span>&gt;<span class="plain">;</span>
@ -437,8 +428,6 @@ and are therefore legal in an expression context; but, again avoiding the
serial comma at the cost of a fruitless addition,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(formal_parn = Tn) + ... + (formal_par1 = T1)</span>
</pre>
@ -503,8 +492,6 @@ at run-time; we assign 0 to it for the sake of tidiness.
it will look like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (condition for I1 to be valid) invoke I1;</span>
<span class="plain">else if (condition for I2 to be valid) invoke I2;</span>
@ -515,8 +502,6 @@ it will look like so:
<p class="inwebparagraph">but in value mode, where invocations return values,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">((condition for I1 to be valid) &amp;&amp; ((formal_rv = I1) bitwise-or 1))</span>
<span class="plain">logical-or ((condition for I2 to be valid) &amp;&amp; ((formal_rv = I2) bitwise-or 1))</span>
@ -874,8 +859,6 @@ In case we test if X is 10, in the other that X matches the description
<p class="inwebparagraph"><a id="SP3_2_3_3_1_3"></a><b>&#167;3.2.3.3.1.3. </b>...and the actual invocation is now simple. In void mode, simply:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">invoke(formal-vars)</span>
</pre>
@ -883,8 +866,6 @@ In case we test if X is 10, in the other that X matches the description
<p class="inwebparagraph">whereas in value mode,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">((formal_rv = invoke(formal-vars)) bitwise-or 1)</span>
</pre>

View file

@ -85,8 +85,6 @@ mini-language. So:
<p class="inwebparagraph">would expand to
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">AdjustThis(16, 1);</span>
</pre>
@ -551,8 +549,6 @@ It allows this:
<p class="inwebparagraph">to work, the tricky part being that the definition being invoked is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">FileIO_PutContents({FN}, {T}, false);</span>
</pre>
@ -615,11 +611,8 @@ invocation-language so baroque.
<p class="inwebparagraph">We'll start with a suite of details about kinds:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-command:kind name}</span>
&lt;<span class="cwebmacrodefn">Expand a bracing containing a kind command</span> <span class="cwebmacronumber">3.2</span>&gt; =
<span class="identifier">Problems::quote_stream</span><span class="plain">(4, </span><span class="identifier">sche</span><span class="plain">-&gt;</span><span class="identifier">operand</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sche</span><span class="plain">-&gt;</span><span class="identifier">inline_command</span><span class="plain"> == </span><span class="identifier">new_ISINC</span><span class="plain">) </span>&lt;<span class="cwebmacro">Inline command "new"</span> <span class="cwebmacronumber">3.2.1</span>&gt;<span class="plain">;</span>
@ -685,8 +678,6 @@ its own when kind variables are in play.
definition:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">LIST_OF_TY_Desc({-new:list of K}, {D}, {-strong-kind:K})</span>
</pre>
@ -930,8 +921,6 @@ lint if they did.
which should be supplied as the argument. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-label:pineapple}</span>
</pre>
@ -943,8 +932,6 @@ set has its own counter (0, 1, 2, ...). So this inline definition works
safely:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">jump {-label:leap}; print "Yikes! A trap!"; .{-label:leap}{-counter-up:leap};</span>
</pre>
@ -952,8 +939,6 @@ safely:
<p class="inwebparagraph">if a little pointlessly, generating first
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">jump L_leap_0; print "Yikes! A trap!"; .L_leap_0;</span>
</pre>
@ -961,8 +946,6 @@ safely:
<p class="inwebparagraph">and then
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">jump L_leap_1; print "Yikes! A trap!"; .L_leap_1;</span>
</pre>
@ -1067,8 +1050,6 @@ internal error will halt Inform.)
useful trick is to allocate storage at run-time. Invoking
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-counter-makes-array:pineapple}</span>
</pre>
@ -1086,8 +1067,6 @@ guaranteed to contain one entry for each counter value reached. Thus:
<p class="inwebparagraph">might be defined inline as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-counter-makes-array:pineapple}I7_ST_pineapple--&gt;{-counter:pineapple} = {N};</span>
</pre>
@ -1098,8 +1077,6 @@ so with a little care we can get the final extent of the array, too. If more
than one word of storage per count is needed, try:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-counter-makes-array:pineapple:3}</span>
</pre>
@ -1325,8 +1302,6 @@ having this annotation seems the smaller of the two warts.
<p class="inwebparagraph">from the Standard Rules definition:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">return {-return-value:something};</span>
</pre>
@ -1609,8 +1584,6 @@ token, because that would be "property name". Instead:
<p class="inwebparagraph">has the inline definition:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">SetTimedEvent({-mark-event-used:R}, {t}+1, 0);</span>
</pre>
@ -1737,8 +1710,6 @@ the ones we create will be different from those made by any other invocation
<p class="inwebparagraph">which is a phrase to repeat a single phrase P twice, could be defined thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(- for ({-my:1}=1; {-my:1}&lt;=2; {-my:1}++) {P} -)</span>
</pre>
@ -1799,8 +1770,6 @@ For example:
<p class="inwebparagraph">could be defined as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(- {-my:warn} = true; -)</span>
</pre>
@ -1816,8 +1785,6 @@ For example:
<p class="inwebparagraph">as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">({-my:warn})</span>
</pre>
@ -1853,11 +1820,8 @@ or when a block value is needed, or where we need to match against descriptions
(see below) where kind-checking comes into play, it could arise. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-my:1:list of numbers}</span>
&lt;<span class="cwebmacrodefn">Set the kind of the my-variable</span> <span class="cwebmacronumber">3.5.1.1.1</span>&gt; =
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">sche</span><span class="plain">-&gt;</span><span class="identifier">operand2</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
@ -1926,8 +1890,6 @@ default value for that kind. If the kind is omitted, the default is to use
the kind of the variable. For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-my:1:time}{-initialise:1}</span>
</pre>
@ -2001,8 +1963,6 @@ a list entry), regardless of its kind of value. For example:
<p class="inwebparagraph">is defined inline as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-unprotect:t}{-copy:t:u}</span>
</pre>
@ -2018,8 +1978,6 @@ a list entry), regardless of its kind of value. For example:
<p class="inwebparagraph">it generates only something like:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">tmp_0 = 10;</span>
</pre>
@ -2027,8 +1985,6 @@ a list entry), regardless of its kind of value. For example:
<p class="inwebparagraph">which could have been achieved equally well with:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{-unprotect:t}{t} = {u};</span>
</pre>
@ -2193,14 +2149,12 @@ For example,
<p class="inwebparagraph">is defined in the Standard Rules thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">objectloop({-my:itm} ofclass Object)</span>
<span class="plain"> if ({-matches-description:itm:OS})</span>
<span class="plain"> give itm workflag2;</span>
<span class="plain"> else</span>
<span class="plain"> give itm ~workflag2;</span>
<span class="plain">if ({-matches-description:itm:OS})</span>
<span class="plain">give itm workflag2;</span>
<span class="plain">else</span>
<span class="plain">give itm ~workflag2;</span>
<span class="plain">WriteListOfMarkedObjects(ENGLISH_BIT);</span>
</pre>
@ -2612,11 +2566,8 @@ especially those involving complicated linguistic propositions. For example:
<p class="inwebparagraph">has the inline definition:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(- {-primitive-definition:total-of} -).</span>
&lt;<span class="cwebmacrodefn">Expand an entirely internal-made definition</span> <span class="cwebmacronumber">3.7</span>&gt; =
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sche</span><span class="plain">-&gt;</span><span class="identifier">inline_subcommand</span><span class="plain"> == </span><span class="identifier">repeat_through_ISINSC</span><span class="plain">) {</span>
<span class="functiontext">Calculus::Deferrals::emit_repeat_through_domain_S</span><span class="plain">(</span><span class="identifier">tokens</span><span class="plain">-&gt;</span><span class="element">args</span><span class="plain">[1],</span>
@ -2820,8 +2771,6 @@ substituted with their values in the context of the invocation being made.
In addition two special kind names are recognised:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">return-kind</span>
<span class="plain">rule-return-kind</span>

View file

@ -319,8 +319,6 @@ be the empty string: see above). The argument must not include <code class="disp
definitions: thus
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Constant FROG_CLASS = (+ pond-dwelling amphibian +);</span>
</pre>
@ -330,10 +328,8 @@ of object with this name. Because of this syntax, one has to watch out for
I6 code like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if (++counter_of_some_kind &gt; 0) ...</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">counter_of_some_kind</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) ...</span>
</pre>
<p class="inwebparagraph">which can trigger an unwanted <code class="display"><span class="extract">(+</span></code>.

View file

@ -1131,8 +1131,6 @@ to which the adjective is applied. In the example of "open" for containers,
we might choose:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if the sack is open, ... --&gt; (Adj_53_t1_v61(*1))</span>
<span class="plain">now the sack is open; ... --&gt; Adj_53_t2_v61(*1)</span>
@ -1152,8 +1150,6 @@ open in the sense of objects", "now open in the sense of objects", and
"via a support routine". We need not do so: for instance,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">if the Entire Game is happening, ... --&gt; (scene_status-&gt;(*1 - 1)==1)</span>
</pre>

View file

@ -287,8 +287,6 @@ original, because x=y if and only if y=x.)
that they are saying the same thing, because they involve different BPs:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">inside(ball, trophy case)| and |contains(trophy case, ball)</span>
</pre>

View file

@ -1595,7 +1595,7 @@ usages to the debugging log.
<span class="identifier">verb_usage</span><span class="plain"> *</span><span class="identifier">vu</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">vu</span><span class="plain">, </span><span class="identifier">verb_usage</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">vu</span><span class="plain">-&gt;</span><span class="identifier">vu_lex_entry</span><span class="plain"> == </span><span class="identifier">lex</span><span class="plain">) &amp;&amp; (</span><span class="identifier">VerbUsages::is_used_negatively</span><span class="plain">(</span><span class="identifier">vu</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="plain">&amp;&amp; (</span><span class="identifier">VerbUsages::get_tense_used</span><span class="plain">(</span><span class="identifier">vu</span><span class="plain">) == </span><span class="identifier">tense</span><span class="plain">)) {</span>
<span class="plain"> &amp;&amp; (</span><span class="identifier">VerbUsages::get_tense_used</span><span class="plain">(</span><span class="identifier">vu</span><span class="plain">) == </span><span class="identifier">tense</span><span class="plain">)) {</span>
<span class="identifier">vocabulary_entry</span><span class="plain"> *</span><span class="identifier">lastword</span><span class="plain"> = </span><span class="identifier">WordAssemblages::last_word</span><span class="plain">(&amp;(</span><span class="identifier">vu</span><span class="plain">-&gt;</span><span class="identifier">vu_text</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain">) {</span>
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="string">"tight"</span><span class="plain">);</span>

View file

@ -159,16 +159,14 @@ heading tree like so, with two semantically meaningful heading levels,
File (0) and Routine (1), and then sublevels provided by braced blocks:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">File</span>
<span class="plain"> main()</span>
<span class="plain"> routine1()</span>
<span class="plain"> interior block of a loop</span>
<span class="plain"> ...</span>
<span class="plain"> routine2()</span>
<span class="plain"> ...</span>
<span class="plain">main()</span>
<span class="plain">routine1()</span>
<span class="plain">interior block of a loop</span>
<span class="plain">...</span>
<span class="plain">routine2()</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">The resolution of a name at a given position P is unambiguous: find the

View file

@ -549,13 +549,11 @@ gives the sentence node three children: verb phrase, subject noun phrase,
object noun phrase.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">SENTENCE_NT "Railway Departure begins when the player is in the train"</span>
<span class="plain"> AVERB_NT "begins when"</span>
<span class="plain"> PROPER_NOUN_NT "Railway Departure"</span>
<span class="plain"> PROPER_NOUN_NT "the player is in the train"</span>
<span class="plain">AVERB_NT "begins when"</span>
<span class="plain">PROPER_NOUN_NT "Railway Departure"</span>
<span class="plain">PROPER_NOUN_NT "the player is in the train"</span>
</pre>
<p class="inwebparagraph">This is made by <code class="display"><span class="extract">Sentences::VPs::nss_tree2</span></code>, but there are variants for one noun phrase or three.

View file

@ -81,12 +81,10 @@ names were. (For chicken-and-egg reasons, it couldn't know this.) So it
almost certainly made some spurious noun phrase subtrees like this one:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">X_OF_Y_NT "worn patch of carpet"</span>
<span class="plain"> PROPER_NOUN_NT "carpet"</span>
<span class="plain"> PROPERTY_LIST_NT "worn patch"</span>
<span class="plain">PROPER_NOUN_NT "carpet"</span>
<span class="plain">PROPERTY_LIST_NT "worn patch"</span>
</pre>
<p class="inwebparagraph">Now comes the reckoning. The existing parse tree may contain a few bogus
@ -229,15 +227,13 @@ form without being property declarations &mdash; with one exception: see below.
<p class="inwebparagraph">We therefore look for this subtree structure:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">SENTENCE_NT "A container has a number called volume"</span>
<span class="plain"> AVERB_NT "has"</span>
<span class="plain"> PROPER_NOUN_NT "container" article:indefinite</span>
<span class="plain"> CALLED_NT "called"</span>
<span class="plain"> PROPER_NOUN_NT "number" article:indefinite</span>
<span class="plain"> PROPER_NOUN_NT "volume"</span>
<span class="plain">AVERB_NT "has"</span>
<span class="plain">PROPER_NOUN_NT "container" article:indefinite</span>
<span class="plain">CALLED_NT "called"</span>
<span class="plain">PROPER_NOUN_NT "number" article:indefinite</span>
<span class="plain">PROPER_NOUN_NT "volume"</span>
</pre>
<p class="inwebparagraph">...and then extract the bottom-most, rightmost noun-phrase as the name of

View file

@ -175,20 +175,11 @@ on three occasions:
</li><li>(b) when the Inform application installs a new extension;
</li><li>(c) when the Inform application uninstalls an extension.
</li></ul>
<p class="inwebparagraph">When Inform is run in "census mode", it should be run with the command
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">ni -rules (...) -census</span>
</pre>
<p class="inwebparagraph">where the argument for <code class="display"><span class="extract">-rules</span></code> is the same as for any other run. All
output from Inform should be ignored, including its return code: ideally,
not even a fatal error should provoke a reaction from the application.
If the census doesn't work for some file-system reason, never mind &mdash;
it's not mission-critical.
<p class="inwebparagraph">When <code class="display"><span class="extract">inform7</span></code> is run in "census mode", it should be run with the command <code class="display"><span class="extract">-census</span></code>.
All output from Inform should be ignored, including its return code: ideally,
not even a fatal error should provoke a reaction from the application. If the
census doesn't work for some file-system reason, never mind &mdash; it's not
mission-critical.
</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. What happens in census mode. </b>The census has two purposes: first, to create provisional documentation
@ -197,18 +188,14 @@ following index files in the external documentation area (not in
the external extension area):
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">.../Extensions.html</span>
(basically a contents page) <span class="plain">.../ExtIndex.html</span>
(basically an index)</pre>
<span class="plain">.../ExtIndex.html</span>
</pre>
<p class="inwebparagraph">Documentation for any individual extension is stored at, e.g.,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">.../Extensions/Victoria Saxe-Coburg-Gotha/Werewolves.html</span>
</pre>

View file

@ -105,7 +105,7 @@ tricky semantics at the bottom right.
<span class="plain">} </span><span class="reserved">matrix_entry</span><span class="plain">;</span>
<span class="reserved">matrix_entry</span><span class="plain"> </span><span class="identifier">assertion_matrix</span><span class="plain">[</span><span class="constant">ASSERTION_MATRIX_DIM</span><span class="plain">] = {</span>
<span class="comment">A, W, XY, K, A, PL, A, A, R, E, CN, PN</span>
<span class="plain"> </span><span class="comment">A, W, XY, K, A, PL, A, A, R, E, CN, PN</span>
<span class="plain">{ </span><span class="identifier">AND_NT</span><span class="plain">, { </span><span class="constant">1</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">16</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain"> } },</span>
<span class="plain">{ </span><span class="identifier">WITH_NT</span><span class="plain">, { </span><span class="constant">3</span><span class="plain">, </span><span class="constant">4</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">14</span><span class="plain">, </span><span class="constant">16</span><span class="plain">, </span><span class="constant">3</span><span class="plain">, </span><span class="constant">3</span><span class="plain"> } },</span>
<span class="plain">{ </span><span class="constant">X_OF_Y_NT</span><span class="plain">, { </span><span class="constant">5</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">6</span><span class="plain">, </span><span class="constant">7</span><span class="plain">, </span><span class="constant">9</span><span class="plain">, </span><span class="constant">7</span><span class="plain">, </span><span class="constant">7</span><span class="plain">, </span><span class="constant">7</span><span class="plain">, </span><span class="constant">20</span><span class="plain">, </span><span class="constant">16</span><span class="plain">, </span><span class="constant">23</span><span class="plain">, </span><span class="constant">7</span><span class="plain"> } },</span>

View file

@ -1189,27 +1189,23 @@ the two sentences above, yet a very different meaning, since "openable" is a
property whereas "bat" was an object. We perform surgery on:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">AND_NT</span>
<span class="plain"> ADJECTIVE_NT prop:p46_openable</span>
<span class="plain"> WITH_NT</span>
<span class="plain"> COMMON_NOUN_NT K4_door</span>
<span class="plain"> ADJECTIVE_NT prop:p44_open</span>
<span class="plain">ADJECTIVE_NT prop:p46_openable</span>
<span class="plain">WITH_NT</span>
<span class="plain">COMMON_NOUN_NT K4_door</span>
<span class="plain">ADJECTIVE_NT prop:p44_open</span>
</pre>
<p class="inwebparagraph">to restructure the nodes as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">WITH_NT</span>
<span class="plain"> COMMON_NOUN_NT K4_door</span>
<span class="plain"> AND_NT</span>
<span class="plain"> ADJECTIVE_NT prop:p46_openable</span>
<span class="plain"> ADJECTIVE_NT prop:p44_open</span>
<span class="plain">COMMON_NOUN_NT K4_door</span>
<span class="plain">AND_NT</span>
<span class="plain">ADJECTIVE_NT prop:p46_openable</span>
<span class="plain">ADJECTIVE_NT prop:p44_open</span>
</pre>
<p class="inwebparagraph">This innocent-looking little routine involved drawing a lot of diagrams
@ -1258,27 +1254,23 @@ of <code class="display"><span class="extract">WITH_NT</span></code> later on. S
terms of the tree,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">WITH_NT</span>
<span class="plain"> WITH_NT</span>
<span class="plain"> COMMON_NOUN_NT K4_container</span>
<span class="plain"> ADJECTIVE_NT prop:p44_open</span>
<span class="plain"> PROPERTY_LIST_NT "The box..."</span>
<span class="plain">WITH_NT</span>
<span class="plain">COMMON_NOUN_NT K4_container</span>
<span class="plain">ADJECTIVE_NT prop:p44_open</span>
<span class="plain">PROPERTY_LIST_NT "The box..."</span>
</pre>
<p class="inwebparagraph">is reconstructed as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">WITH_NT</span>
<span class="plain"> COMMON_NOUN_NT K4_container</span>
<span class="plain"> AND_NT</span>
<span class="plain"> ADJECTIVE_NT prop:p44_open</span>
<span class="plain"> PROPERTY_LIST_NT "The box..."</span>
<span class="plain">COMMON_NOUN_NT K4_container</span>
<span class="plain">AND_NT</span>
<span class="plain">ADJECTIVE_NT prop:p44_open</span>
<span class="plain">PROPERTY_LIST_NT "The box..."</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Assertions::Refiner::perform_with_surgery</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">inst</span><span class="plain">, *</span><span class="identifier">prop_1</span><span class="plain">, *</span><span class="identifier">prop_2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">WITH_NT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">down</span><span class="plain">) == </span><span class="identifier">WITH_NT</span><span class="plain">)) {</span>
@ -1307,24 +1299,22 @@ here work:
</blockquote>
<pre class="display">
<span class="plain"> RELATIONSHIP_NT &lt;below&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain"> AND_NT</span>
<span class="plain"> PROPER_NOUN_NT &lt;kudamm&gt; (definite)</span>
<span class="plain"> RELATIONSHIP_NT &lt;above&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain"> PROPER_NOUN_NT &lt;u-bahn&gt; (definite)</span>
<span class="plain">RELATIONSHIP_NT &lt;below&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain">AND_NT</span>
<span class="plain">PROPER_NOUN_NT &lt;kudamm&gt; (definite)</span>
<span class="plain">RELATIONSHIP_NT &lt;above&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain">PROPER_NOUN_NT &lt;u-bahn&gt; (definite)</span>
</pre>
<p class="inwebparagraph">into:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain"> AND_NT</span>
<span class="plain"> RELATIONSHIP_NT &lt;below&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain"> PROPER_NOUN_NT &lt;kudamm&gt; (definite)</span>
<span class="plain"> RELATIONSHIP_NT &lt;above&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain"> PROPER_NOUN_NT &lt;u-bahn&gt; (definite)</span>
<span class="plain">AND_NT</span>
<span class="plain">RELATIONSHIP_NT &lt;below&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain">PROPER_NOUN_NT &lt;kudamm&gt; (definite)</span>
<span class="plain">RELATIONSHIP_NT &lt;above&gt; (CONTAINS_THINGS_INF)</span>
<span class="plain">PROPER_NOUN_NT &lt;u-bahn&gt; (definite)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Assertions::Refiner::perform_location_surgery</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">old_and</span><span class="plain">, *</span><span class="identifier">old_np1</span><span class="plain">, *</span><span class="identifier">old_loc2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">RELATIONSHIP_NT</span><span class="plain">) &amp;&amp;</span>
@ -1354,37 +1344,23 @@ here work:
the two clauses are the wrong way around, so we perform surgery to turn:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">CALLED_NT &lt;called&gt;</span>
<span class="plain"> RELATIONSHIP_NT &lt;north of a room&gt; (type:direction)</span>
</pre>
<p class="inwebparagraph"> <code class="display"><span class="extract"> PROPER_NOUN_NT &lt;room&gt; (indefinite)</span></code>
</p>
<pre class="display">
<span class="plain"> PROPER_NOUN_NT &lt;north&gt; (no article)</span>
<span class="plain"> PROPER_NOUN_NT &lt;hot and cold room&gt; (definite)</span>
<span class="plain">RELATIONSHIP_NT &lt;north of a room&gt; (type:direction)</span>
<span class="plain">PROPER_NOUN_NT &lt;room&gt; (indefinite)</span>
<span class="plain">PROPER_NOUN_NT &lt;north&gt; (no article)</span>
<span class="plain">PROPER_NOUN_NT &lt;hot and cold room&gt; (definite)</span>
</pre>
<p class="inwebparagraph">into:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">RELATIONSHIP_NT &lt;called&gt; (type:direction)</span>
<span class="plain"> CALLED_NT &lt;north of a room&gt;</span>
</pre>
<p class="inwebparagraph"> <code class="display"><span class="extract"> COMMON_NOUN_NT &lt;room&gt;</span></code>
<code class="display"><span class="extract"> CREATED_NT &lt;hot and cold room&gt;</span></code>
<code class="display"><span class="extract"> PROPER_NOUN_NT &lt;north&gt; (no article)</span></code>
</p>
<pre class="display">
<span class="plain">CALLED_NT &lt;north of a room&gt;</span>
<span class="plain">COMMON_NOUN_NT &lt;room&gt;</span>
<span class="plain">CREATED_NT &lt;hot and cold room&gt;</span>
<span class="plain">PROPER_NOUN_NT &lt;north&gt; (no article)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Assertions::Refiner::perform_called_surgery</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">x_pn</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">down</span><span class="plain">-&gt;</span><span class="element">down</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; </span><span class="comment">"north" in the example</span>
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">name_pn</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">down</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; </span><span class="comment">"hot and cold room" in the example</span>

View file

@ -79,8 +79,6 @@ pass through assertions. For example, we reach:
<p class="inwebparagraph">The two sides of the assertion are, respectively, <code class="display"><span class="extract">px</span></code>:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">node:PROPER_NOUN_NT &lt;fifi&gt; (no article)</span>
</pre>
@ -88,11 +86,9 @@ pass through assertions. For example, we reach:
<p class="inwebparagraph">And <code class="display"><span class="extract">py</span></code>:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">node:RELATIONSHIP_NT &lt;in&gt; (type:standard)</span>
<span class="plain"> node:PROPER_NOUN_NT &lt;wicker basket&gt; (definite)</span>
<span class="plain">node:PROPER_NOUN_NT &lt;wicker basket&gt; (definite)</span>
</pre>
<p class="inwebparagraph">The Creator is not alas a cultured gentleman with a white-pointed beard, a

View file

@ -426,7 +426,7 @@ for the telemetry file.
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TelemetryAccepted</span><span class="plain">),</span>
<span class="string">"that's a message for the Author, not me"</span><span class="plain">,</span>
<span class="string">"so I'll note it down in the Telemetry file (if you're keeping one.)"</span><span class="plain">);</span>
<span class="identifier">telemetry_recording</span><span class="plain"> = </span><span class="identifier">tr</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">telemetry_recording</span><span class="plain"> = </span><span class="identifier">tr</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">trace_sentences</span><span class="plain"> = </span><span class="constant">1</span><span class="plain"> - </span><span class="identifier">trace_sentences</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">Log::tracing_on</span><span class="plain">(</span><span class="identifier">trace_sentences</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Pass 1"</span><span class="plain">);</span>

View file

@ -4,33 +4,84 @@ Purpose: A documentation page.
Language: C
@ The task of the Inform 7 compiler is to take source text which may be as
minimal as "The Taj Mahal is a room.", and to turn it into a program which can
then be compiled by a more conventional tool. The compiler works in three
phases:
minimal as "The Taj Mahal is a room.", and to turn it into a computer program.
It is properly speaking a "transpiler", in that it compiles down to code for
another compiler to take the rest of the way. Traditionally, that other
compiler is Inform 6 (1996-2003), a reliable generator of "story files"
(programs for virtual machines) from typeless but otherwise C-like code.
The Inform 7 compiler works in three phases:
(1) A build manager reads in the text, breaks it into sentences, finds the
necessary extensions, merges them in, and generally decides what to do.
(2) The core of the compiler translates this assemblage of source text into
a low-level abstract language called "inter".
(3) The code-generator further translates that intermediate code into our
final output, which is often code for a conventional C-like language.
final output, which will be code for some lower-level compiler.
@ Three ccmmand-line tools are provided: |inbuild|, |inform7|, and |inter|.
Each tool has a tiny shell, enough to give each a command-line interface of
its own, but otherwise all three tools are divided up into large segments
called "modules". The three shells are all webs, and each module is a web.
They roughly correspond to the three phases, but |inbuild| can also
perform some useful archiving and resource management functions, and |inter|
can also perform assimilation on kits, or translate inter code not originated by
Inform. |inform7| on its own is capable of performing the complete compilation
process and is the only one of the three included in the GUI apps of Inform
for MacOS, Windows and so on.
|inbuild| carries out phase 1, but used as a stand-alone tool it can also
perform some useful archiving and resource management functions. Similarly,
|inter| carries out phase 3, but used as a stand-alone tool it can also
perform assimilation on kits, or translate inter code not originated by
Inform.
Each tool has a tiny CLI (or "command-line interface") but is otherwise
divided up into large segments called "modules", many shared between two or
even all three tools. |inform7| contains every module. The following diagram
shows exactly how:
|inform7| is the compiler as it is found in apps, and carries out all
three phases, 1, 2 and 3. To do this, it contains all the modules of
|inbuild|, a set of modules of its own, and all the modules of |inter|.
It therefore contains the whole of the other two programs except for their
outer command-line interfaces, and also contains a gpod deal of unique
material of its own.
= (text as BoxArt)
+-------------+ +-------------+ +-------------+
| INBUILD | | INFORM7 | | INTER |
| | | | | |
+---+.............+---+ +---+.............+---+ +---+.............+---+
| inbuild (cli shell) | | inform7 (cli shell) | | inter (cli shell) |
+---+.............+---+ +---+.............+---+ +---+.............+---+
| | | | | |
+---+.............+----------+.............+---+ | |
| inbuild-module | | |
| syntax-module | | |
| html-module | | |
+---+.............+----------+.............+---+ | |
| | | | | |
| | +---+.............+---+ | |
| | | core-module | | |
| | | inflections-module | | |
| | | linguistics-module | | |
| | | problems-module | | |
| | | kinds-module | | |
| | | if-module | | |
| | | multimedia-module | | |
| | | index-module | | |
| | +---+.............+---+ | |
| | | | | |
| | +---+.............+----------+.............+---+
| | | inter-module |
| | | building-module |
| | | codegen-module |
| | +---+.............+----------+.............+---+
| | | | | |
+---+.............+----------+.............+----------+.............+---+
| words-module |
| arch-module |
+---+.............+----------+.............+----------+.............+---+
| | | | | |
+---+.............+----------+.............+----------+.............+---+
| (foundation-module from inweb) |
| (Posix or Windows-related functions) |
| (standard C library) |
+---+.............+----------+.............+----------+.............+---+
| | | | | |
+-------------+ +-------------+ +-------------+
=
All three also contain the |foundation| module, a library of utility
@ The three CLIs are to be found in the webs called |inbuild|, |inform7|
and |inter| (and these are the webs which tangle to the three complete tools).
Each module is also a web, and the above chart shows where it is: a module
in the INBUILD column, say |syntax-module|, is at the path |inbuild/syntax-module|,
for example. But as the diagram shows, it's shared code and runs in both
|inbuild| and |inform7|.
All three tools also contain the |foundation| module, a library of utility
code which is present in every Inform tool.

View file

@ -68,8 +68,6 @@ into the source window. Broadly speaking, the application needs to support
Javascript in the following form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">var myProject = external.Project;</span>
<span class="plain">myProject.selectView('source');</span>
@ -96,14 +94,12 @@ never need to compile fresh Javascript functions because the template file
Javascript function:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&lt;script language="JavaScript"&gt;</span>
<span class="plain">function pasteCode(code) {</span>
<span class="plain"> var myProject = project();</span>
<span class="plain"> myProject.selectView('source');</span>
<span class="plain"> myProject.pasteCode(code);</span>
<span class="plain">var myProject = project();</span>
<span class="plain">myProject.selectView('source');</span>
<span class="plain">myProject.pasteCode(code);</span>
<span class="plain">}</span>
<span class="plain">&lt;/script&gt;</span>
</pre>

View file

@ -760,8 +760,6 @@ a single space, we return the text "story" instead.
<p class="inwebparagraph">Our example (if not truncated) then emerges as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">St- Bartholemew's Fair- Etude for a Push-Me-Pull-You Machine</span>
</pre>

View file

@ -870,7 +870,7 @@ from each other.)
<span class="reserved">case</span><span class="plain"> </span><span class="constant">0</span><span class="plain">:</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="plain">.</span><span class="element">corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Lower"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="plain">.</span><span class="element">corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Upper"</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Universe</span><span class="plain">.</span><span class="element">corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">) *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Upper"</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">z_offset</span><span class="plain"> = </span><span class="identifier">z</span><span class="plain">-</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">benchmark_room</span><span class="plain">).</span><span class="identifier">z</span><span class="plain">;</span>

View file

@ -168,8 +168,6 @@ definition contributing either/or properties, the former; otherwise the
latter. Thus we end up with printed output such as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">unlit, inedible, portable; male</span>
</pre>

View file

@ -239,8 +239,6 @@ Javascript, we abstract the prefix for these function calls into the
<code class="display"><span class="extract">JAVASCRIPT_PRELUDE</span></code>. Thus
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">&lt;a href="***openUrl"&gt;...&lt;/a&gt;</span>
</pre>

View file

@ -459,8 +459,6 @@ Parchment, interpreter.
<p class="inwebparagraph">Placeholders are set thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[INTERPRETERVERSION]</span>
<span class="plain">Parchment for Inform 7</span>

View file

@ -58,8 +58,6 @@ simple Blorb wrapping up a story file with bibliographic data, but nothing
more, and nothing else is released.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">storyfile "/Users/gnelson/Examples/Zinc.inform/Build/output.ulx" include</span>
<span class="plain">ifiction "/Users/gnelson/Examples/Zinc.inform/Metadata.iFiction" include</span>
@ -72,8 +70,6 @@ record respectively.
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>A more ambitious Blorb can be made like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">storyfile leafname "Audiophilia.gblorb"</span>
<span class="plain">storyfile "/Users/gnelson/Examples/Audiophilia.inform/Build/output.ulx" include</span>
@ -93,8 +89,6 @@ Resource ID 2, apparently skipped, is in fact the story file.
file from the Skein of a project:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">project folder "/Users/gnelson/Examples/Zinc.inform"</span>
<span class="plain">release to "/Users/gnelson/Examples/Zinc Materials/Release"</span>
@ -112,8 +106,6 @@ the third line directly causes Inblorb to do anything.
without making a blorb:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">project folder "/Users/gnelson/Examples/Audiophilia.inform"</span>
<span class="plain">release to "/Users/gnelson/Examples/Audiophilia Materials/Release"</span>
@ -159,8 +151,6 @@ location, taking its design from the template named. If we were to add
any of these commands &mdash;
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">source public</span>
<span class="plain">solution public</span>
@ -175,8 +165,6 @@ deal with stand-alone files of Inform source text &mdash; notably extensions.
For example, here we make a website out of an extension:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release to "Test Site"</span>
<span class="plain">placeholder [TITLE] = "Locksmith"</span>
@ -259,8 +247,6 @@ value <code class="display"><span class="extract">B3</span></code>. Hexadecimal
a blorb:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">author &lt;string&gt;</span>
</pre>
@ -268,8 +254,6 @@ a blorb:
<p class="inwebparagraph">Adds this author name to the file.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">copyright &lt;string&gt;</span>
</pre>
@ -279,8 +263,6 @@ short text such as "(c) J. Mango Pineapple 2007" rather than a lengthy legal
discourse.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release &lt;number&gt;</span>
</pre>
@ -288,8 +270,6 @@ discourse.
<p class="inwebparagraph">Gives this release number to the blorb file.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">auxiliary &lt;filename&gt; &lt;string&gt;</span>
</pre>
@ -299,8 +279,6 @@ with the release but will not be embedded directly into the blorb file. For
instance,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">auxiliary "map.png" "Black Pete's treasure map"</span>
</pre>
@ -311,8 +289,6 @@ format, as in ".png": if there is no extension, then the auxiliary resource
is assumed to be a mini-website housed in a subfolder with this name.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">ifiction &lt;filename&gt; include</span>
</pre>
@ -322,8 +298,6 @@ specified in the Treaty of Babel, a cross-IF-system standard for specifying
bibliographic data; it will be embedded into the blorb.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">storyfile &lt;filename&gt; ... unsupported by Inblorb</span>
<span class="plain">storyfile &lt;filename&gt; include</span>
@ -345,8 +319,6 @@ Inblorb always does this, and does not support <code class="display"><span class
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b>Second, now-deprecated commands describing our ideal screen display:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">palette 16 bit ... unsupported by Inblorb</span>
<span class="plain">palette 32 bit ... unsupported by Inblorb</span>
@ -363,8 +335,6 @@ defined in this way. This is only a "clue" to the interpreter; see the
Blorb specification for details.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">resolution &lt;dim&gt; ... unsupported by Inblorb</span>
<span class="plain">resolution &lt;dim&gt; min &lt;dim&gt; ... unsupported by Inblorb</span>
@ -382,8 +352,6 @@ infinity by infinity.
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>Third, commands for adding audiovisual resources:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">sound &lt;id&gt; &lt;filename&gt;</span>
<span class="plain">sound &lt;id&gt; &lt;filename&gt; repeat &lt;number&gt; ... unsupported by Inblorb</span>
@ -401,8 +369,6 @@ sound formats. Nowadays the straight <code class="display"><span class="extract"
be used regardless of format.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">picture &lt;id&gt; &lt;filename&gt;</span>
<span class="plain">picture &lt;id&gt; &lt;filename&gt; scale &lt;ratio&gt; ... unsupported by Inblorb</span>
@ -425,8 +391,6 @@ the default preferred scale factor is 1. Scale factors are expressed as
fractions: so for instance,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">picture "flag/png" scale 3/1</span>
</pre>
@ -434,8 +398,6 @@ fractions: so for instance,
<p class="inwebparagraph">means "always display three times its normal size", whereas
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">picture "backdrop/png" scale min 1/10 max 8/1</span>
</pre>
@ -452,8 +414,6 @@ very low resolution; an iPhone today has a screen resolution close to that
of a typical desktop of 2001.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">cover &lt;filename&gt;</span>
</pre>
@ -465,8 +425,6 @@ of a typical desktop of 2001.
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b>Three commands help us to specify locations.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">project folder &lt;filename&gt;</span>
</pre>
@ -475,8 +433,6 @@ of a typical desktop of 2001.
within this Inform project.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release to &lt;filename&gt;</span>
</pre>
@ -490,8 +446,6 @@ the release folder if it doesn't already exist, but that's always the work
of <code class="display"><span class="extract">ni</span></code>, not Inblorb.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">template path &lt;filename&gt;</span>
</pre>
@ -511,8 +465,6 @@ made automatically if one of the above commands to include the story file,
pictures, etc., is present in the script, and otherwise not generated.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">solution</span>
<span class="plain">solution public</span>
@ -525,8 +477,6 @@ public solution will be included in its links, thus being made available
to the public who read the website.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">ifiction</span>
<span class="plain">ifiction public</span>
@ -535,8 +485,6 @@ to the public who read the website.
<p class="inwebparagraph">is similar, but for the iFiction record of the project.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">source</span>
<span class="plain">source public</span>
@ -551,8 +499,6 @@ original.
<p class="inwebparagraph">Miscellaneous files can be released like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release file &lt;filename&gt;</span>
</pre>
@ -564,8 +510,6 @@ the named file is placed in the release folder.
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>Finally we come to web pages.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">css</span>
</pre>
@ -577,8 +521,6 @@ reason not to, every blurb script generating websites ought to contain
this command.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release file &lt;filename&gt; from &lt;template&gt;</span>
</pre>
@ -596,8 +538,6 @@ expand interesting text in their places &mdash; see "Writing with Inform"
for more on this.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">release source &lt;filename&gt;| using |&lt;filename&gt; from &lt;template&gt;</span>
</pre>
@ -606,8 +546,6 @@ for more on this.
suite of web pages using the style of the given file from the given template.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">website &lt;template&gt;</span>
</pre>
@ -629,8 +567,6 @@ wrapper, then calling an interpreter such as Parchment.
<p class="inwebparagraph">The encoding part is taken care of by:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">base64 &lt;filename&gt; to &lt;filename&gt;</span>
</pre>
@ -646,8 +582,6 @@ process rather like the construction of a website from a template. The
necessary blurb command is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">interpreter &lt;interpreter-name&gt; &lt;vm-letter&gt;</span>
</pre>
@ -670,8 +604,6 @@ contexts, and expects to have access to Javascript functions provided
by Inform, and so on.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">status &lt;template&gt; &lt;filename&gt;</span>
<span class="plain">status alternative &lt;link to Inform documentation&gt;</span>

View file

@ -76,10 +76,8 @@ for Inform then the Inblorb executable will be at <code class="display"><span cl
Usage is very simple:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inblorb/Tangled/inblorb [OPTIONS] BLURBFILE [BLORBFILE]</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inblorb/Tangled/inblorb</span><span class="plain"> [OPTIONS] BLURBFILE [BLORBFILE]</span>
</pre>
<p class="inwebparagraph">This follows the given blurb file. Not all blurbs instruct Inblorb to make
@ -132,7 +130,7 @@ project being released, which we'll call <code class="display"><span class="extr
should call:
</li></ul>
<pre class="display">
<span class="plain">inblorb "Path/This.inform/Release.blurb" "Path/This.inform/Build/output.gblorb"</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inblorb</span><span class="plain"> "Path/This.inform/Release.blurb" "Path/This.inform/Build/output.gblorb"</span>
</pre>
<p class="inwebparagraph"></p>

View file

@ -116,8 +116,6 @@ we can give a semantic version number range:
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>The most involved of the creators parses text. An involved example might be:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">genre=extension,author=Emily Short,title=Locksmith,min=6.1-alpha.2,max=17.2</span>
</pre>

View file

@ -426,8 +426,6 @@ This is that time.
<p class="inwebparagraph"><a id="SP3_1"></a><b>&#167;3.1. </b>We concoct a textual synopsis in the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"Pantomime Sausages by Mr Punch"</span>
</pre>
@ -486,10 +484,8 @@ then its sentences will go to the extension's own tree.
<p class="inwebparagraph"><a id="SP3_2_1"></a><b>&#167;3.2.1. </b>If an extension file contains the special text (outside literal mode) of
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">---- Documentation ----</span>
<span class="plain">---- </span><span class="identifier">Documentation</span><span class="plain"> ----</span>
</pre>
<p class="inwebparagraph">then this is taken as the end of the Inform source, and the beginning of a

View file

@ -459,7 +459,7 @@ may be multiple sentences, which we need to count up.
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-&gt;</span><span class="element">as_copy</span><span class="plain">-&gt;</span><span class="element">vertex</span><span class="plain">;</span>
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-&gt;</span><span class="element">source_vertices</span><span class="plain">) {</span>
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain"> </span><span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-&gt;</span><span class="element">kits_to_include</span><span class="plain">)</span>

View file

@ -146,19 +146,17 @@ Two, Section 5, Chapter I, Section 1, Chapter III) would be formed up into
the heading tree:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(the pseudo-heading) level -1, indentation -1</span>
<span class="plain"> (File: Standard Rules) level 0, indentation 0</span>
<span class="plain"> ...</span>
<span class="plain"> (File: primary source text) level 0, indentation 0</span>
<span class="plain"> Chapter I level 4, indentation 1</span>
<span class="plain"> Book Two level 2, indentation 1</span>
<span class="plain"> Section 5 level 5, indentation 2</span>
<span class="plain"> Chapter I level 4, indentation 2</span>
<span class="plain"> Section 1 level 5, indentation 3</span>
<span class="plain"> Chapter III level 4, indentation 2</span>
<span class="plain">(File: Standard Rules) level 0, indentation 0</span>
<span class="plain">...</span>
<span class="plain">(File: primary source text) level 0, indentation 0</span>
<span class="plain">Chapter I level 4, indentation 1</span>
<span class="plain">Book Two level 2, indentation 1</span>
<span class="plain">Section 5 level 5, indentation 2</span>
<span class="plain">Chapter I level 4, indentation 2</span>
<span class="plain">Section 1 level 5, indentation 3</span>
<span class="plain">Chapter III level 4, indentation 2</span>
</pre>
<p class="inwebparagraph">Note that the level of a heading is not the same thing as its depth in this
@ -207,10 +205,8 @@ storage: we call it the "last indentation above level K".
individual file of source text: at the top of file,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">for (i=0; i&lt;NO_HEADING_LEVELS; i++) last_indentation_above_level[i] = -1;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">NO_HEADING_LEVELS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">last_indentation_above_level</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = -1;</span>
</pre>
<p class="inwebparagraph">Then parse for headings (they have an easily recognised lexical form); each
@ -218,14 +214,12 @@ time one is found, work out its <code class="display"><span class="extract">leve
and call:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">int find_indentation(int level) {</span>
<span class="plain"> int i, ind = last_indentation_above_level[level] + 1;</span>
<span class="plain"> for (i=level+1; i&lt;NO_HEADING_LEVELS; i++)</span>
<span class="plain"> last_indentation_above_level[i] = ind;</span>
<span class="plain"> return ind;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">find_indentation</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">ind</span><span class="plain"> = </span><span class="identifier">last_indentation_above_level</span><span class="plain">[</span><span class="identifier">level</span><span class="plain">] + </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">level</span><span class="plain">+1; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">NO_HEADING_LEVELS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++)</span>
<span class="identifier">last_indentation_above_level</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">ind</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ind</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -651,14 +645,12 @@ This isn't always the final position. For instance, given the sequence
Volume 1, Chapter I, Section A, Chapter II, the tree is adjusted twice:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">when h = Volume 1: then when h = Chapter I:</span>
<span class="plain">Volume 1 Volume 1</span>
<span class="plain"> Chapter I Chapter I</span>
<span class="plain"> Section A Section A</span>
<span class="plain"> Chapter II Chapter II</span>
<span class="plain">Chapter I Chapter I</span>
<span class="plain">Section A Section A</span>
<span class="plain">Chapter II Chapter II</span>
</pre>
<p class="inwebparagraph">since Section A is demoted twice, once by Volume 1, then by Chapter I.

View file

@ -102,8 +102,6 @@ from multiple files and indeed from elsewhere.
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b>This is where messages like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">I've also read Standard Rules by Graham Nelson, which is 27204 words long.</span>
</pre>

View file

@ -245,7 +245,7 @@ invisible unless the user scrolls a long way:
<span class="string">"&lt;b&gt;Warning&lt;/b&gt;. One or more extensions are installed incorrectly: "</span>
<span class="string">"see details below."</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain"> }</span>
</pre>
<p class="inwebparagraph"></p>
@ -1218,8 +1218,6 @@ the usual ones seen in Mac OS X applications such as iTunes.
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b>These pages are stored at the relative pathnames
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Extensions/Documentation/Extensions.html</span>
<span class="plain">Extensions/Documentation/ExtIndex.html</span>

View file

@ -481,11 +481,9 @@ lines are handled safely by the loading code above. In any case, they could
only occur if it were true that
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">4 + MAX_ED_CATEGORY_LENGTH + MAX_ED_HEADWORD_LENGTH +</span>
<span class="plain"> MAX_EXTENSION_TITLE_LENGTH + MAX_EXTENSION_AUTHOR_LENGTH &gt;= MAX_ED_LINE_LENGTH</span>
<span class="plain">MAX_EXTENSION_TITLE_LENGTH + MAX_EXTENSION_AUTHOR_LENGTH &gt;= MAX_ED_LINE_LENGTH</span>
</pre>
<p class="inwebparagraph">and this is not nearly the case. (<code class="display"><span class="extract">MAX_ED_LINE_LENGTH</span></code> is larger than

View file

@ -93,8 +93,6 @@ associated files for each example. For instance, we might end up making,
in sequence,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Extensions/Emily Short/Locksmith.html</span>
<span class="plain">Documentation/Extensions/Emily Short/Locksmith-eg1.html</span>

View file

@ -88,26 +88,26 @@ and those not documented in this manual are covered in that one.
<span class="plain">-use-needs show all the extensions, kits and so on needed to use</span>
<span class="plain">for translating Inform source text to Inter:</span>
<span class="plain">-case X make any source links refer to the source in extension example X</span>
<span class="plain">-census perform an extensions census (default is -no-census)</span>
<span class="plain">-debug compile with debugging features even on a Release (default is -no-debug)</span>
<span class="plain">-format=X compile I6 code suitable for the virtual machine X</span>
<span class="plain">-project X work within the Inform project X</span>
<span class="plain">-release compile a version suitable for a Release build (default is -no-release)</span>
<span class="plain">-rng fix the random number generator of the story file (for testing) (default is -no-rng)</span>
<span class="plain">-source X use file X as the Inform source text</span>
<span class="plain"> -case X make any source links refer to the source in extension example X</span>
<span class="plain"> -census perform an extensions census (default is -no-census)</span>
<span class="plain"> -debug compile with debugging features even on a Release (default is -no-debug)</span>
<span class="plain"> -format=X compile I6 code suitable for the virtual machine X</span>
<span class="plain"> -project X work within the Inform project X</span>
<span class="plain"> -release compile a version suitable for a Release build (default is -no-release)</span>
<span class="plain"> -rng fix the random number generator of the story file (for testing) (default is -no-rng)</span>
<span class="plain"> -source X use file X as the Inform source text</span>
<span class="plain">for locating resources in the file system:</span>
<span class="plain">-external X use X as the user's home for installed material such as extensions</span>
<span class="plain">-internal X use X as the location of built-in material such as the Standard Rules</span>
<span class="plain">-nest X add the nest at pathname X to the search list</span>
<span class="plain">-transient X use X for transient data such as the extensions census</span>
<span class="plain"> -external X use X as the user's home for installed material such as extensions</span>
<span class="plain"> -internal X use X as the location of built-in material such as the Standard Rules</span>
<span class="plain"> -nest X add the nest at pathname X to the search list</span>
<span class="plain"> -transient X use X for transient data such as the extensions census</span>
<span class="plain">for tweaking code generation from Inter:</span>
<span class="plain">-kit X include Inter code from the kit called X</span>
<span class="plain">-pipeline X specify code-generation pipeline by name (default is "compile")</span>
<span class="plain">-pipeline-file X specify code-generation pipeline as file X</span>
<span class="plain">-variable X set pipeline variable X (in form name=value)</span>
<span class="plain"> -kit X include Inter code from the kit called X</span>
<span class="plain"> -pipeline X specify code-generation pipeline by name (default is "compile")</span>
<span class="plain"> -pipeline-file X specify code-generation pipeline as file X</span>
<span class="plain"> -variable X set pipeline variable X (in form name=value)</span>
<span class="plain">-at X specify that this tool is installed at X</span>
<span class="plain">-crash intentionally crash on internal errors, for backtracing (default is -no-crash)</span>

View file

@ -113,10 +113,8 @@ For example, here we run <code class="display"><span class="extract">-inspect</s
description of what it is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect 'inform7/Internal/Extensions/Emily Short/Locksmith.i7x'</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect</span><span class="plain"> 'inform7/Internal/Extensions/Emily Short/Locksmith.i7x'</span>
<span class="plain">extension: Locksmith by Emily Short v12 in directory inform7/Internal/Extensions/Emily Short</span>
</pre>
@ -126,10 +124,8 @@ and doesn't trust its location as any indication of what it is. For
example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect junk/Mystery.i7x</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect</span><span class="plain"> junk/Mystery.i7x</span>
<span class="plain">extension: Complex Listing by Emily Short v9 in directory junk.</span>
</pre>
@ -137,11 +133,9 @@ example:
For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">extension: Skeleton Keys by Emily Short - 1 error</span>
<span class="plain"> 1. extension misworded: the opening line does not end 'begin(s) here'</span>
<span class="plain">1. extension misworded: the opening line does not end 'begin(s) here'</span>
</pre>
<p class="inwebparagraph">Only superficial problems can be spotted so far in advance of actually using
@ -151,13 +145,11 @@ the software, but it's still helpful.
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Graphs. </b>More ambitiously, we can look at the "graph" of a copy.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -graph 'Basic Help Menu.i7x'</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -graph</span><span class="plain"> 'Basic Help Menu.i7x'</span>
<span class="plain">[c0] Basic Help Menu by Emily Short</span>
<span class="plain"> --use---&gt; [c26] Menus by Emily Short v3</span>
<span class="plain"> --use---&gt; [c34] Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain">--use---&gt; [c34] Basic Screen Effects by Emily Short v7.140425</span>
</pre>
<p class="inwebparagraph">The graph begins at the copy we asked for, and then continues through arrows
@ -173,21 +165,17 @@ order to use Menus.
source text is as follows:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Include Basic Help Menu by Emily Short.</span>
<span class="plain">The French Laundry is a room.</span>
<span class="identifier">Include</span><span class="plain"> </span><span class="identifier">Basic</span><span class="plain"> </span><span class="identifier">Help</span><span class="plain"> </span><span class="identifier">Menu</span><span class="plain"> </span><span class="identifier">by</span><span class="plain"> </span><span class="identifier">Emily</span><span class="plain"> </span><span class="identifier">Short</span><span class="plain">.</span>
<span class="identifier">The</span><span class="plain"> </span><span class="identifier">French</span><span class="plain"> </span><span class="identifier">Laundry</span><span class="plain"> </span><span class="identifier">is</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">room</span><span class="plain">.</span>
</pre>
<p class="inwebparagraph">Once again, we can inspect this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">inbuild/Tangled/inbuild -inspect 'Menu Time.inform'</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect</span><span class="plain"> 'Menu Time.inform'</span>
<span class="plain">projectbundle: Menu Time.inform at path Menu Time.inform</span>
</pre>
@ -196,18 +184,16 @@ because an innocent-looking source text like the above depends on many other
resources.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[f59] Menu Time.inform/Build/output.ulx</span>
<span class="plain"> --build-&gt; [f58] Menu Time.inform/Build/auto.inf</span>
<span class="plain"> --build-&gt; [f57] Menu Time.inform/Build/auto.inf</span>
<span class="plain"> --build-&gt; [c0] Menu Time.inform</span>
<span class="plain"> --build-&gt; [c53] Basic Help Menu by Emily Short</span>
<span class="plain"> --use---&gt; [c47] Menus by Emily Short v3</span>
<span class="plain"> --use---&gt; [c55] Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain"> --build-&gt; [f1] Menu Time.inform/Source/story.ni</span>
<span class="plain"> --build-&gt; [c12] BasicInformKit</span>
<span class="plain">--build-&gt; [f57] Menu Time.inform/Build/auto.inf</span>
<span class="plain"> --build-&gt; [c0] Menu Time.inform</span>
<span class="plain">--build-&gt; [c53] Basic Help Menu by Emily Short</span>
<span class="plain"> --use---&gt; [c47] Menus by Emily Short v3</span>
<span class="plain">--use---&gt; [c55] Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain">--build-&gt; [f1] Menu Time.inform/Source/story.ni</span>
<span class="plain">--build-&gt; [c12] BasicInformKit</span>
</pre>
<p class="inwebparagraph">...and so on. What's going on here is that if the user wants to compile the
@ -247,19 +233,15 @@ want to know is: what do I need to use, or to build, something?
<p class="inwebparagraph">The command <code class="display"><span class="extract">-use-needs</span></code> applied to our example extension gives:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">extension: Basic Help Menu by Emily Short</span>
<span class="plain"> extension: Menus by Emily Short v3</span>
<span class="plain"> extension: Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain">extension: Basic Screen Effects by Emily Short v7.140425</span>
</pre>
<p class="inwebparagraph">and applied to our example story gives just:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">projectbundle: Menu Time.inform</span>
</pre>
@ -269,8 +251,6 @@ On the other hand, <code class="display"><span class="extract">-build-needs</spa
extension, we get:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">extension: Basic Help Menu by Emily Short</span>
</pre>
@ -279,23 +259,21 @@ extension, we get:
to build them. But <code class="display"><span class="extract">-build-needs</span></code> on our story produces:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">projectbundle: Menu Time.inform</span>
<span class="plain"> extension: Basic Help Menu by Emily Short</span>
<span class="plain"> extension: Menus by Emily Short v3</span>
<span class="plain"> extension: Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain">extension: Menus by Emily Short v3</span>
<span class="plain"> extension: Basic Screen Effects by Emily Short v7.140425</span>
<span class="plain"> kit: BasicInformKit</span>
<span class="plain"> extension: Basic Inform by Graham Nelson v1</span>
<span class="plain"> extension: English Language by Graham Nelson v1</span>
<span class="plain">extension: Basic Inform by Graham Nelson v1</span>
<span class="plain">extension: English Language by Graham Nelson v1</span>
<span class="plain"> kit: CommandParserKit</span>
<span class="plain"> kit: WorldModelKit</span>
<span class="plain"> extension: Standard Rules by Graham Nelson v6</span>
<span class="plain"> extension: Standard Rules by Graham Nelson v6</span>
<span class="plain">kit: WorldModelKit</span>
<span class="plain"> extension: Standard Rules by Graham Nelson v6</span>
<span class="plain">extension: Standard Rules by Graham Nelson v6</span>
<span class="plain"> language: English</span>
<span class="plain"> kit: EnglishLanguageKit</span>
<span class="plain"> extension: English Language by Graham Nelson v1</span>
<span class="plain">kit: EnglishLanguageKit</span>
<span class="plain"> extension: English Language by Graham Nelson v1</span>
</pre>
<p class="inwebparagraph">And there it is: six extensions, four kits and one natural language definition
@ -337,8 +315,6 @@ such as:
for the project, we see that it includes:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">missing extension: Xylophones by Jimmy Stewart, any version will do</span>
</pre>
@ -354,8 +330,6 @@ for the project, we see that it includes:
<p class="inwebparagraph">we would see:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">missing extension: Xylophones by Jimmy Stewart, need version in range [6.2,7-A)</span>
</pre>
@ -384,10 +358,8 @@ binary files of Inter, one for each possible architecture.
<p class="inwebparagraph">But building is mostly done with projects. If we run:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -build Example.inform</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -build</span><span class="plain"> Example.inform</span>
</pre>
<p class="inwebparagraph">then Inbuild will first build everthing needed to build the Example story
@ -411,10 +383,8 @@ extensive graph, and is likely to mean that the final step followed by
Inbuild is a call to <code class="display"><span class="extract">inblorb</span></code>, the releasing tool for Inform.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -release -build Example.inform</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -release -build</span><span class="plain"> Example.inform</span>
</pre>
<p class="inwebparagraph">Using the <code class="display"><span class="extract">-rebuild</span></code> command performs a build in a way which isn't incremental:
@ -447,10 +417,8 @@ can be an Inform project. Multiple extensions, or kits, are fine.
<code class="display"><span class="extract">D</span></code> using <code class="display"><span class="extract">-contents-of D</span></code>:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect -contents-of inform7/Internal/Inter</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect -contents-of</span><span class="plain"> inform7/Internal/Inter</span>
<span class="plain">kit: EnglishLanguageKit at path inform7/Internal/Inter/EnglishLanguageKit</span>
<span class="plain">kit: CommandParserKit at path inform7/Internal/Inter/CommandParserKit</span>
<span class="plain">kit: BasicInformExtrasKit at path inform7/Internal/Inter/BasicInformExtrasKit</span>
@ -462,10 +430,8 @@ can be an Inform project. Multiple extensions, or kits, are fine.
the project target using <code class="display"><span class="extract">-project</span></code>:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -build -project Example.inform</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -build -project</span><span class="plain"> Example.inform</span>
</pre>
<p class="inwebparagraph">But this is quite unnecessary: the effect is the same as if <code class="display"><span class="extract">-project</span></code> had
@ -481,19 +447,15 @@ these copies are; and sometimes we do not.
Inbuild will act on every copy it can find which matches that. For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect -matching 'genre=kit'</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect -matching</span><span class="plain"> 'genre=kit'</span>
</pre>
<p class="inwebparagraph">lists all the kits which Inbuild can see; and
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect -matching 'genre=extension,author=Eric Eve'</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect -matching</span><span class="plain"> 'genre=extension,author=Eric Eve'</span>
</pre>
<p class="inwebparagraph">lists all extensions by Eric Eve which Inbuild can see. The legal clauses to
@ -503,8 +465,6 @@ again, this is following semver conventions. To specify an explicit maximum
and minimum version number, use <code class="display"><span class="extract">max</span></code> and <code class="display"><span class="extract">min</span></code>. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">-matching 'genre=extension,author=Emily Short,title=Locksmith,min=6.1-alpha.2,max=17.2'</span>
</pre>
@ -525,12 +485,13 @@ when it's used as an app.
<p class="inwebparagraph">Inbuild recognises the following subdirectories of a nest as significant:
</p>
<p class="inwebparagraph"> Templates
Pipelines
Inter
Languages
Extensions
</p>
<pre class="display">
<span class="plain">Templates</span>
<span class="plain">Pipelines</span>
<span class="plain">Inter</span>
<span class="plain">Languages</span>
<span class="plain">Extensions</span>
</pre>
<p class="inwebparagraph">Other subdirectories can also exist, and Inbuild ignores those. The above
five containers hold website templates (used by Inblorb), Inter pipelines,
@ -539,8 +500,6 @@ there may be very many in total, a further level of subdirectory is used
for the authpr's name. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Extensions/Emily Short/Locksmith.i7x</span>
</pre>
@ -555,8 +514,6 @@ this, they should have a filename (or pathname) which ends with <code class="dis
Thus, we can have e.g.:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Extensions/Emily Short/Locksmith-v3_2.i7x</span>
<span class="plain">Extensions/Emily Short/Locksmith-v4_0_0-prealpha_13.i7x</span>
@ -657,12 +614,10 @@ useful filing commands.
<p class="inwebparagraph">The command <code class="display"><span class="extract">-copy-to N</span></code> makes a duplicate copy in the nest <code class="display"><span class="extract">N</span></code>. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ inbuild/Tangled/inbuild -inspect junk/Mystery.i7x</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -inspect</span><span class="plain"> junk/Mystery.i7x</span>
<span class="plain">extension: Complex Listing by Emily Short v9 in directory junk.</span>
<span class="plain">$ inbuild/Tangled/inbuild -copy-to MyNest junk/Mystery.i7x</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">inbuild/Tangled/inbuild</span><span class="identifier"> -copy-to</span><span class="plain"> MyNest junk/Mystery.i7x</span>
<span class="plain">cp -f 'junk/Mystery.i7x' 'MyNest/Extensions/Emily Short/Complex Listing-v9.i7x'</span>
</pre>

View file

@ -286,10 +286,8 @@ such a phrase, it increments the usage count by calling the following:
especially, but to be accumulated over a whole corpus of source texts, e.g.:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">intest --keep-log=USAGE -log=phrase-usage examples</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">intest/Tangled/intest</span><span class="identifier"> --keep-log</span><span class="plain">=USAGE</span><span class="identifier"> -log</span><span class="plain">=phrase-usage examples</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Index::DocReferences::log_statistics</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">PHRASE_USAGE</span><span class="plain">, </span><span class="string">"The following shows how often each built-in phrase was used:\n"</span><span class="plain">);</span>
<span class="functiontext">Index::DocReferences::read_xrefs</span><span class="plain">();</span>

View file

@ -59,8 +59,6 @@ working on rawtext can distinguish themselves from us (by not defining it).
For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{^indoc:}You'll probably never see this paragraph.</span>
</pre>

View file

@ -236,12 +236,10 @@ all targets, or grouped in braced blocks relevant to one target only. For
example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">superbness = 20</span>
<span class="plain">hypercard {</span>
<span class="plain"> superbness = 40</span>
<span class="plain">superbness = 40</span>
<span class="plain">}</span>
</pre>
@ -374,8 +372,6 @@ example,
<p class="inwebparagraph"><a id="SP5_1_2"></a><b>&#167;5.1.2. </b>Here's where we parse the specifier part of lines like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">volume: The Inform Recipe Book (RB) = The Recipe Book.txt</span>
</pre>
@ -383,11 +379,8 @@ example,
<p class="inwebparagraph">which reads:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">The Inform Recipe Book (RB) = The Recipe Book.txt</span>
&lt;<span class="cwebmacrodefn">Act on a volume creation</span> <span class="cwebmacronumber">5.1.2</span>&gt; =
&lt;<span class="cwebmacro">Disallow this in a specific target</span> <span class="cwebmacronumber">5.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain"> = </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0];</span>

View file

@ -49,18 +49,10 @@ all. It does so for two reasons:
<ul class="items"><li>(a) Because the CSS may refer to background images, by URL, and these URLs
depend on the website structure, which may vary according to the instructions
and target chosen. So <code class="display"><span class="extract">indoc</span></code> needs to correct such URLs on the fly. What it
does is to replace the word:
does is to replace the word <code class="display"><span class="extract">IMAGES/</span></code> with the correct relative path, and this
also means that the image name is flagged as one that will be needed by the
resulting website.
</li></ul>
<pre class="display">
<span class="plain">IMAGES/</span>
</pre>
<p class="inwebparagraph">with the correct relative path, and this also means that the image name is
flagged as one that will be needed by the resulting website.
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(b) Because the instructions have requested one or more changes, or "tweaks",
to the CSS to be used on a given volume or volumes. Such instructions are
kept in the following hashes:
@ -446,7 +438,7 @@ expression parser:
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">content_from</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">SN</span><span class="plain">-&gt;</span><span class="element">sp_left_len</span><span class="plain">, </span><span class="identifier">content_to</span><span class="plain"> = -1;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">k2</span><span class="plain"> = </span><span class="identifier">content_from</span><span class="plain">; </span><span class="identifier">k2</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">k2</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_wide_string_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">SN</span><span class="plain">-&gt;</span><span class="element">sp_right</span><span class="plain">, </span><span class="identifier">k2</span><span class="plain">)) {</span>
<span class="identifier">content_to</span><span class="plain"> = </span><span class="identifier">k2</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">content_to</span><span class="plain"> = </span><span class="identifier">k2</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">content_to</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">modified</span><span class="plain">, </span><span class="string">"___mu___%S___mo___"</span><span class="plain">, </span><span class="identifier">SN</span><span class="plain">-&gt;</span><span class="element">sp_style</span><span class="plain">);</span>

View file

@ -107,8 +107,6 @@ to look for example files, and then scans their headers, ignoring the text
below for the time being. A sample:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">*** Plural assertions</span>
<span class="plain">(Clothing kinds; Get Me to the Church on Time)</span>
@ -612,8 +610,6 @@ that is, separate file.
panel about the example. It has one row of three cells:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[ ( 22 ) ] [ Example: Whatever ] [ RB ]</span>
</pre>

View file

@ -202,8 +202,6 @@ they do so by title, not by block number, to protect them from renumbering
as sections are added or removed. So if the current block is called
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">2.3. Sailing Ships</span>
</pre>
@ -657,10 +655,8 @@ convert those to HTML links.
paste icons. In rawtext, these look like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain"> {*}A useful sentence.</span>
<span class="plain">{*}A useful sentence.</span>
</pre>
<p class="inwebparagraph">The <code class="display"><span class="extract">{*}</span></code> is replaced by a button which, when clicked on, performs a Javascript
@ -740,15 +736,13 @@ see below.
<p class="inwebparagraph"><a id="SP11_2_2_3_1"></a><b>&#167;11.2.2.3.1. </b>The rawtext is doing something like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain"> {*}A ball is in the bag.</span>
<span class="plain"> The bag is on the kitchen table.</span>
<span class="plain">{*}A ball is in the bag.</span>
<span class="plain">The bag is on the kitchen table.</span>
<span class="plain">This single sentence doesn"t make much of a simulation. Let"s add:</span>
<span class="plain"> {**}The stitched seam is part of the ball.</span>
<span class="plain">{**}The stitched seam is part of the ball.</span>
</pre>
<p class="inwebparagraph">The line count <code class="display"><span class="extract">i</span></code> points to the first line of this. The paste consists
@ -933,8 +927,6 @@ down to the last line which is included in the paste.
arrangement:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(-See Units for a more sophisticated capacity system.)</span>
</pre>
@ -991,8 +983,6 @@ which block is meant, and encode this as a link.
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>And similarly, for cross-referencing to examples by name:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(See example "Blink")</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Renderer::render_example_cross_reference</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ename</span><span class="plain">, </span><span class="reserved">volume</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">) {</span>

View file

@ -66,7 +66,7 @@ multi-section rawtext volumes.
<span class="reserved">volume</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">example</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">) {</span>
<span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext">Rawtext::turn_rawtext_into_blocks</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-&gt;</span><span class="element">ex_filename</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">OUT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain"> }</span>
</pre>
<p class="inwebparagraph"></p>
@ -253,8 +253,6 @@ must be. (A block ends when a new heading line appears, or at end of file.)
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b>Block headings are paragraphs beginning with square-bracketed material:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[x] The footwear kind</span>
</pre>
@ -268,8 +266,6 @@ the braced <code class="display"><span class="extract">{kind_footwear}</span></c
is to write something like:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[Chapter: Bananas] Introduction to soft yellow fruit</span>
</pre>
@ -320,11 +316,8 @@ be the first section.
<p class="inwebparagraph"><a id="SP4_1_1"></a><b>&#167;4.1.1. </b>Section headings can be marked with braced documentation references:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[x] The footwear kind {kind_footwear}</span>
&lt;<span class="cwebmacrodefn">Take note of documentation references</span> <span class="cwebmacronumber">4.1.1</span>&gt; =
<span class="reserved">while</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr2</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*) {(%C+)} *"</span><span class="plain">)) {</span>
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">mr2</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
@ -427,8 +420,6 @@ It should be the only thing on its line.
<p class="inwebparagraph"><a id="SP4_5"></a><b>&#167;4.5. </b>Images are embedded with the notation
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">///filename.extension///</span>
</pre>
@ -436,8 +427,6 @@ It should be the only thing on its line.
<p class="inwebparagraph">though only one of these may appear in each line. If the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">///classname:filename.extension///</span>
</pre>
@ -524,8 +513,6 @@ for whole blocks of documentation: this is much finer control.) For example,
documentation might say:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{Windows}The My Documents folder can be reached using...</span>
</pre>
@ -556,13 +543,10 @@ throw the whole paragraph away. If we're generating for no specific platform
<p class="inwebparagraph"><a id="SP4_6_2"></a><b>&#167;4.6.2. </b>Tags also mark the presence of phrase explanations in the main WWI:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{defn ph_letdefault}let (a name not so far used) be (name of kind)</span>
<span class="plain">...</span>
<span class="plain">{end}</span>
&lt;<span class="cwebmacrodefn">Deal with a phrase definition paragraph tag</span> <span class="cwebmacronumber">4.6.2</span>&gt; =
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr4</span><span class="plain">, </span><span class="identifier">paragraph_tag</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"defn *(%c*?)"</span><span class="plain">)) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">defn</span><span class="plain"> = </span><span class="identifier">mr4</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0];</span>

View file

@ -61,8 +61,6 @@ with specific numbered files of HTML documentation.
clumsy way, with explicit sentences such as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Document kind_person at doc45 "3.17" "Men, women and animals".</span>
</pre>

View file

@ -42,17 +42,15 @@ for the markup notations described below, these really are plain text,
using skipped lines as paragraph breaks, and tabs for indented quotations:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">This is a paragraph of some text, which</span>
<span class="plain">extends over perhaps many lines. All of the</span>
<span class="plain">standard letters are allowed:</span>
<span class="plain"> The quick brown fox jumped over the lazy dog.</span>
<span class="plain"> Jinxed wizards pluck ivy from my quilt.</span>
<span class="plain"> Jackdaws love my big sphinx of quartz.</span>
<span class="plain">The quick brown fox jumped over the lazy dog.</span>
<span class="plain">Jinxed wizards pluck ivy from my quilt.</span>
<span class="plain">Jackdaws love my big sphinx of quartz.</span>
<span class="plain">The second para begins here, after the</span>
<span class="plain">skipped line.</span>
</pre>
@ -63,14 +61,12 @@ Lines in quotations can be indented still further with more tabs, and
those margins are preserved.
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">For example:</span>
<span class="plain"> Instead of waiting when the prevailing wind is northwest:</span>
<span class="plain"> say "A fresh gust of wind bowls you over.";</span>
<span class="plain"> now the prevailing wind is east.</span>
<span class="plain">Instead of waiting when the prevailing wind is northwest:</span>
<span class="plain">say "A fresh gust of wind bowls you over.";</span>
<span class="plain">now the prevailing wind is east.</span>
</pre>
<p class="inwebparagraph">"Quotations", as this suggests, are often in fact code examples for some
@ -85,15 +81,13 @@ an exception.
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Tables are formatted automatically whenever Indoc sees a pattern like this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain"> {*}Table 2 - Selected Elements</span>
<span class="plain"> Element Symbol Atomic number</span>
<span class="plain"> "Hydrogen" "H" 1</span>
<span class="plain"> "Iron" "Fe" 26</span>
<span class="plain"> "Zinc" "Zn" 30</span>
<span class="plain"> "Uranium" "U" 92</span>
<span class="plain">{*}Table 2 - Selected Elements</span>
<span class="plain">Element Symbol Atomic number</span>
<span class="plain">"Hydrogen" "H" 1</span>
<span class="plain">"Iron" "Fe" 26</span>
<span class="plain">"Zinc" "Zn" 30</span>
<span class="plain">"Uranium" "U" 92</span>
</pre>
<p class="inwebparagraph">The top line is the title for the table, and then tab-delimited columns follow.
@ -103,8 +97,6 @@ an exception.
into sections. A line in the form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[Chapter: CHAPTERTITLE] SECTIONTITLE</span>
</pre>
@ -113,8 +105,6 @@ into sections. A line in the form:
line of a volume file must be of this form. For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[Chapter: Things] Descriptions</span>
</pre>
@ -122,8 +112,6 @@ line of a volume file must be of this form. For example,
<p class="inwebparagraph">When it's time for a new section within the same chapter, the simpler form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[x] SECTIONTITLE</span>
</pre>
@ -135,8 +123,6 @@ numbering is automatically applied by Indoc, and does not appear in the source.
<p class="inwebparagraph">The final paragraph of a section is allowed to take a special form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(See REFERENCE for PURPOSE.)</span>
</pre>
@ -144,8 +130,6 @@ numbering is automatically applied by Indoc, and does not appear in the source.
<p class="inwebparagraph">For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(See Text with substitutions for more on varying what is printed.)</span>
</pre>
@ -161,8 +145,6 @@ context can be just a symbol created by <code class="display"><span class="extra
file, so for example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{Linux:}The top secret DRM decoder ring is not included under Debian...</span>
</pre>
@ -176,8 +158,6 @@ the binary <code class="display"><span class="extract">+</span></code> (conjunct
in that order. The simplest case is
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{^Linux:}The top secret DRM decoder ring is in the Goodies folder...</span>
</pre>
@ -186,8 +166,6 @@ in that order. The simplest case is
examples would be:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{^alpha,beta+gamma:}</span>
</pre>
@ -196,8 +174,6 @@ examples would be:
are declared; and
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{^(alpha,beta)+gamma:}</span>
<span class="plain">{^alpha+^beta+gamma:}</span>
@ -221,8 +197,6 @@ paste-this-in quotation.
marked as in this example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{defn ph_randomdesc}a/-- random (description of values) ... value</span>
<span class="plain">This phrase makes a uniformly random choice...</span>
@ -240,8 +214,6 @@ inside the Inform app. We can prepare for this by tagging the opening line
of a section like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">[x] Rooms and the map {kind_room} {MAP} {PM_SameKindEquated}</span>
</pre>
@ -259,8 +231,6 @@ for this is an elaboration of a scheme devised by Knuth for the TeX Book.
At its simplest,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">I am the ^{walrus}.</span>
</pre>
@ -268,8 +238,6 @@ At its simplest,
<p class="inwebparagraph">becomes simply
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">I am the walrus.</span>
</pre>
@ -280,8 +248,6 @@ index entry is invisible in the text itself, and only the position is
marked. Thus
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">I am the ^{walrus}.^^{Beatles}</span>
</pre>
@ -322,8 +288,6 @@ for the secondary.
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b>If no categories are defined, there's no index. The instruction needed is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: notation = name (options)</span>
</pre>
@ -334,8 +298,6 @@ about the category. There are three sorts of notation. The first is the
caret-and-brace form, for example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: ^{`headword} = name (invert)</span>
<span class="plain">index: ^{headword} = standard</span>
@ -345,8 +307,6 @@ caret-and-brace form, for example:
marked up like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">The inventor of ^{literate programming} is ^{`Donald Knuth}.^^{archaisms}</span>
</pre>
@ -356,8 +316,6 @@ braces. One caret means the copy in braces is part of the book; two means
it isn't. Thus the above sentence typesets as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">The inventor of literate programming is Donald Knuth.</span>
</pre>
@ -367,8 +325,6 @@ is why we defined ^{`headword} before ^{headword}. In general, the notation
has to be given in the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">^{LheadwordR}</span>
</pre>
@ -402,8 +358,6 @@ under K not D. Inversion is not performed if the text already contains a comma.
This can override wrong guesses. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Extensions are managed by ^{`Justin de Vesine}.</span>
</pre>
@ -411,8 +365,6 @@ This can override wrong guesses. Thus:
<p class="inwebparagraph">indexes "Vesine, Justin de" (filed under V); but
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Extensions are managed by Justin de Vesine.^^{`de Vesine, Justin}</span>
</pre>
@ -427,8 +379,6 @@ every index entry of that category, using the CSS span <code class="display"><sp
entries like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">grouping together something activity 18.14</span>
</pre>
@ -441,19 +391,15 @@ material in a CSS span called <code class="display"><span class="extract">indexC
For example, the Inform 7 Indoc instructions go on to say:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">css: span.indexphrasebracketed ++ {</span>
<span class="plain"> color: #8080ff;</span>
<span class="plain">color: #8080ff;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph">The practical effect is that the index entry:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(name of kind) after (enumerated value) phrase 11.18</span>
</pre>
@ -468,8 +414,6 @@ subentries of <code class="display"><span class="extract">{lemma}</span></code>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>The second sort of notation is by documentation tag. An instruction like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: {act_} = activity ("activity")</span>
</pre>
@ -486,8 +430,6 @@ automatically indexed.
to be activated to appear. The Indoc instructions for Inform activate both:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: definition = phrase ("phrase") (bracketed)</span>
<span class="plain">index: example = example ("example")</span>
@ -502,8 +444,6 @@ an index entry for every example.
that's taken as a marker that something is a subentry. Thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">^{reptiles: snakes}</span>
</pre>
@ -511,18 +451,14 @@ that's taken as a marker that something is a subentry. Thus:
<p class="inwebparagraph">creates something like
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">reptiles</span>
<span class="plain"> snakes 3.7</span>
<span class="plain">snakes 3.7</span>
</pre>
<p class="inwebparagraph">while typesetting just "snakes". For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"Why did it have to be ^{reptiles: snakes}?" mused Indy.</span>
</pre>
@ -530,8 +466,6 @@ that's taken as a marker that something is a subentry. Thus:
<p class="inwebparagraph">comes out as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"Why did it have to be snakes?" mused Indy.</span>
</pre>
@ -544,8 +478,6 @@ entries for the super-entry (in this case "reptiles").
For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: ^{~headword} = reptilian (under {reptiles})</span>
</pre>
@ -553,8 +485,6 @@ For example:
<p class="inwebparagraph">means that:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">"Why did it have to be ^{~snakes}?" mused Indy.</span>
</pre>
@ -565,8 +495,6 @@ For example:
<p class="inwebparagraph">Note the difference between these two examples:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">^{people: `Donald Knuth}</span>
</pre>
@ -574,18 +502,14 @@ For example:
<p class="inwebparagraph">makes
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">people (category "standard")</span>
<span class="plain"> Knuth, Donald (category "name")</span>
<span class="plain">Knuth, Donald (category "name")</span>
</pre>
<p class="inwebparagraph">whereas
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">^{`Donald Knuth: literate programming}</span>
</pre>
@ -593,11 +517,9 @@ For example:
<p class="inwebparagraph">makes
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Knuth, Donald (category "name")</span>
<span class="plain"> literate programming (category "standard")</span>
<span class="plain">literate programming (category "standard")</span>
</pre>
<p class="inwebparagraph">This is because Indoc parses <code class="display"><span class="extract">{A:B}</span></code> as if it were parsing <code class="display"><span class="extract">{A}</span></code> and <code class="display"><span class="extract">{B}</span></code>
@ -607,8 +529,6 @@ individually, to determine the categories of the superentry and subentry.
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. </b>Lastly, an entry in the form:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">^{reptiles &lt;-- crocodiles &lt;-- alligators}</span>
</pre>
@ -623,8 +543,6 @@ sample program &mdash; has its own source file. For example, in the standard
Inform repository, the example Alpaca Farm lives in:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Examples/Alpaca.txt</span>
</pre>
@ -633,8 +551,6 @@ Inform repository, the example Alpaca Farm lives in:
special three-line header of metadata. In this example, it's:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">* New commands for old grammar</span>
<span class="plain">(USE action which divines rational behavior for a wide range of possible nouns; Alpaca Farm)</span>
@ -662,8 +578,6 @@ Where should the example go in the secondary (e.g., "The Inform Recipe Book")?
<p class="inwebparagraph">The answer is provided by the special file
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Examples/(Recipes).txt</span>
</pre>
@ -679,8 +593,6 @@ Book is organised by theme.
<p class="inwebparagraph">There's one special notation, for use at the top of the recipes file:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Going Going == OMIT</span>
</pre>

View file

@ -51,10 +51,8 @@ for Inform then the Indoc executable will be at <code class="display"><span clas
Usage is very simple:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">$ indoc/Tangled/indoc [OPTIONS] TARGET</span>
<span class="element">$</span><span class="plain"> </span><span class="functiontext">indoc/Tangled/indoc</span><span class="plain"> [OPTIONS] TARGET</span>
</pre>
<p class="inwebparagraph">By default, Indoc reads its source documentation from a direction called
@ -67,8 +65,6 @@ it <code class="display"><span class="extract">Documentation</span></code>.
also reads instruction files. At minimum it will read
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/indoc-instructions.txt</span>
</pre>
@ -78,11 +74,9 @@ files mainly specify indexing notations, or CSS styles, or miscellaneous
settings, but they group these under named "targets". For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">windows_app {</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
<span class="plain">}</span>
</pre>
@ -98,8 +92,6 @@ the one named on the command line.
<p class="inwebparagraph">The HTML produced is placed, by default, in the directory:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Output</span>
</pre>
@ -136,8 +128,6 @@ cross-references to documentation contain accurate references. These
lines are special sentences such as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Document kind_person at doc45 "3.17" "Men, women and animals".</span>
</pre>
@ -145,8 +135,6 @@ lines are special sentences such as:
<p class="inwebparagraph">Indoc looks for a contiguous block of lines in the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Document ... at doc12.</span>
</pre>

View file

@ -42,8 +42,6 @@ each volume is a single UTF-8 encoded plain text file. In the core Inform
repository, there are two volumes, with the files being
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Writing with Inform.txt</span>
<span class="plain">Documentation/The Recipe Book.txt</span>
@ -59,8 +57,6 @@ between the two volumes.
text file such as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/Examples/Prague.txt</span>
</pre>
@ -83,8 +79,6 @@ and also in section "Scripted Scenes" of chapter "Time and Plot" of volume
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Project instructions. </b>The main instructions file for an Indoc project is, as noted earlier, at:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Documentation/indoc-instructions.txt</span>
</pre>
@ -99,8 +93,6 @@ will contain Examples in the above sense, by giving the special <code class="dis
instruction. Inform opens thus:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">volume: Writing with Inform</span>
<span class="plain">volume: The Inform Recipe Book (RB) = The Recipe Book.txt</span>
@ -110,8 +102,6 @@ instruction. Inform opens thus:
<p class="inwebparagraph">But a simpler, single-volume project might have just:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">volume: Pandemonium 2.0 for Fun and Profit</span>
</pre>
@ -142,8 +132,6 @@ adds the directory <code class="display"><span class="extract">X</span></code> t
such as:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">cover: combined_cover.png</span>
</pre>
@ -156,8 +144,6 @@ mentioned above.
some basic DC ("Durham Core") metadata supplied. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">dc:title: Inform - A Design System for Interactive Fiction</span>
<span class="plain">dc:creator: Graham Nelson and Emily Short</span>
@ -174,11 +160,9 @@ eventually gets around to describing one or more targets. A target
looks like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">IDENTIFIER {</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
<span class="plain">}</span>
</pre>
@ -190,13 +174,11 @@ on disc (though they are) but that they have finicky little differences
in settings. The <code class="display"><span class="extract">...</span></code> stretch of lines can specify these. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">ebook {</span>
<span class="plain"> granularity = 2</span>
<span class="plain"> examples_mode = open</span>
<span class="plain"> follow: epub-css-tweaks.txt</span>
<span class="plain">granularity = 2</span>
<span class="plain">examples_mode = open</span>
<span class="plain">follow: epub-css-tweaks.txt</span>
<span class="plain">}</span>
</pre>
@ -213,21 +195,17 @@ only some of the targets.
in the Linux version of a manual. To do that, we'll need the symbol:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">linux_app {</span>
<span class="plain"> ...</span>
<span class="plain"> declare: Linux</span>
<span class="plain"> ...</span>
<span class="plain">...</span>
<span class="plain">declare: Linux</span>
<span class="plain">...</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph">In the documentation, we could then mark up a paragraph like so:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">{Linux:}To install, first...</span>
</pre>
@ -248,11 +226,9 @@ in which different categories of index entry need different visual styling.
For example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">css: span.indextitle ++ {</span>
<span class="plain"> font-style: italic;</span>
<span class="plain">font-style: italic;</span>
<span class="plain">}</span>
</pre>
@ -265,8 +241,6 @@ created; <code class="display"><span class="extract">+</span></code> would suppl
for example,
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">index: ^{@headword} = name (invert)</span>
</pre>
@ -281,8 +255,6 @@ in the prototype is where the entry text should appear in the notation.
and it is not compulsory to set any of them. Lines such as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">SETTING = VALUE</span>
</pre>

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