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:
parent
fd4a46ddd8
commit
6e1fb88642
|
@ -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
|
||||
|
||||
|
|
|
@ -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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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>
|
||||
|
|
|
@ -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<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"><</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>§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>§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
|
||||
|
|
|
@ -138,36 +138,36 @@ used a lookup table for the values of 2^{15-n} where 0<= n <= 11.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">PowersOfTwo_TB</span>
|
||||
<span class="plain">--> </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"> --> </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">--> </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"> --> </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>
|
||||
|
|
|
@ -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 <-- BN: "But now I wor" <--> BN2: "ship a celestiall Sunne" --> NULL</span>
|
||||
<span class="identifier">NULL</span><span class="plain"> <-- </span><span class="identifier">BN</span><span class="plain">: </span><span class="string">"But now I wor"</span><span class="plain"> <--> </span><span class="identifier">BN2</span><span class="plain">: </span><span class="string">"ship a celestiall Sunne"</span><span class="plain"> --> </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
|
@ -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>
|
||||
|
|
|
@ -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"> < </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 <= the argument.</span>
|
||||
|
|
|
@ -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">> 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">> </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">></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">> 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">> 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">> 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">> 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">> </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">> ...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">> </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">></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>
|
||||
|
|
|
@ -125,11 +125,9 @@ stored as described above: thus the most recent rule or rulebook succeeded
|
|||
or failed if —
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">(latest_rule_result-->0 == RS_SUCCEEDS)</span>
|
||||
<span class="plain">(latest_rule_result-->0 == RS_FAILS)</span>
|
||||
<span class="plain">(</span><span class="identifier">latest_rule_result</span><span class="plain">-->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">-->0 == </span><span class="identifier">RS_FAILS</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">and otherwise there was no decision.
|
||||
|
|
|
@ -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 >= 1) {</span>
|
||||
<span class="string">if ((i<RE_Subexpressions-->10) &&</span>
|
||||
<span class="string"> if ((i<RE_Subexpressions-->10) &&</span>
|
||||
<span class="string">((RE_Subexpressions-->i)-->RE_DATA1 >= 0)) ch = true;</span>
|
||||
<span class="string">} else {</span>
|
||||
<span class="string">rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito,</span>
|
||||
|
|
|
@ -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"> && </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"> && </span><span class="identifier">obj2</span><span class="plain"> > </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">" <=> "</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">" >=> "</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"> && (</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"><=</span><span class="identifier">vtov_structure</span><span class="plain">--></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"><=</span><span class="identifier">vtov_structure</span><span class="plain">--></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">" >=> "</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) && (</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"><=</span><span class="identifier">vtov_structure</span><span class="plain">-->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">" >=> "</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"><=</span><span class="identifier">vtov_structure</span><span class="plain">-->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"><=</span><span class="identifier">vtov_structure</span><span class="plain">--></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"><=</span><span class="identifier">vtov_structure</span><span class="plain">--></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">" >=> "</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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"> > </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">) && (</span><span class="identifier">i</span><span class="plain">></span><span class="identifier">row</span><span class="plain">))) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">dv</span><span class="plain"> < </span><span class="identifier">min_dv</span><span class="plain">));</span>
|
||||
<span class="plain"> (</span><span class="identifier">dv</span><span class="plain"> < </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">) > </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">) && (</span><span class="identifier">i</span><span class="plain">></span><span class="identifier">row</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">) < </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">) < </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"> > </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">) && (</span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">row</span><span class="plain">))) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">dv</span><span class="plain"> < </span><span class="identifier">min_dv</span><span class="plain">));</span>
|
||||
<span class="plain"> (</span><span class="identifier">dv</span><span class="plain"> < </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">) > </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">) && (</span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">row</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">) < </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">) < </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>
|
||||
|
|
|
@ -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>§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 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED;</span>
|
||||
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">ThisIsAText</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><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>
|
||||
|
|
|
@ -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"> && </span><span class="identifier">clr_bgstatus</span><span class="plain"> > </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"> && </span><span class="identifier">clr_bgstatus</span><span class="plain"> > </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>
|
||||
|
|
|
@ -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">-->0) >= </span><span class="constant">0</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_HIGHMEMORY</span><span class="plain">-->0) < </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">->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"> > </span><span class="identifier">num_words</span><span class="plain">) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">l</span><span class="plain"> && (</span><span class="identifier">l</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> && (</span><span class="identifier">l</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> > </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">--></span><span class="identifier">pcount</span><span class="plain">)->0 & </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">--></span><span class="identifier">pcount</span><span class="plain"> ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">) &&</span>
|
||||
<span class="plain">((</span><span class="identifier">line_token</span><span class="plain">--></span><span class="identifier">pcount</span><span class="plain">)->0 & </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">--></span><span class="identifier">pcount</span><span class="plain">)->0 & </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"> >= </span><span class="identifier">num_words</span><span class="plain">) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">l</span><span class="plain"> && (</span><span class="identifier">l</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> && (</span><span class="identifier">l</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> && (</span><span class="identifier">l</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> >= </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"> > </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"> > </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">--></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">-->(</span><span class="identifier">token_n</span><span class="plain">+1) ~= </span><span class="identifier">PREPOSITION_TT</span><span class="plain">) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">line_token</span><span class="plain">-->(</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">-->(</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">->0) & </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"> >= </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"> >= </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">-->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"><=</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">--></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">--></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">--></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"><=</span><span class="identifier">LanguageDescriptors</span><span class="plain">-->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"><=</span><span class="identifier">LanguageDescriptors</span><span class="plain">-->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">--></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">-->(</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"><=</span><span class="identifier">LanguageDescriptors</span><span class="plain">-->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"><=</span><span class="identifier">LanguageDescriptors</span><span class="plain">-->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">--></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">-->(</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">-->(</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"> <= </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"><</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">-></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">-->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">-->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">-->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"><</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">-></span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">buffer</span><span class="plain">->(</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"> && </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"> && </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"> && </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"> && </span><span class="identifier">indef_type</span><span class="plain"> & </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"> < </span><span class="identifier">indef_wanted</span><span class="plain"> && </span><span class="identifier">indef_wanted</span><span class="plain"> < </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"> >= </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"> >= </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">--></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"> >= </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"><</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">--></span><span class="identifier">i</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="string">" "</span><span class="plain">, (</span><span class="identifier">The</span><span class="plain">) </span><span class="identifier">match_list</span><span class="plain">--></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">--></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">--></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">--></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"><=</span><span class="identifier">multiple_object</span><span class="plain">-->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"> && </span><span class="identifier">multiple_object</span><span class="plain">--></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"> && </span><span class="identifier">multiple_object</span><span class="plain">--></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"> && </span><span class="identifier">multiple_object</span><span class="plain">--></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">--></span><span class="identifier">low</span><span class="plain"> = </span><span class="identifier">multiple_object</span><span class="plain">--></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"> >= </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">--></span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">match_scores</span><span class="plain">--></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"> >= </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">--></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">--></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">--></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">--></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"><</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">--></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"> >= </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"> < </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">--></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"> < </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">--></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">--></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"> < </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"> > </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">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </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"> > </span><span class="constant">3</span><span class="plain">) </span><span class="identifier">tot</span><span class="plain">=10000;</span>
|
||||
|
|
|
@ -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">->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"> --></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"> --> </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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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">-->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>
|
||||
|
|
|
@ -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">) && (</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>
|
||||
|
||||
|
|
|
@ -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" — 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
|
||||
|
|
|
@ -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"> && (</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">) &&</span>
|
||||
<span class="plain">((</span><span class="identifier">use_doors</span><span class="plain"> & </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">) && (</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">) && (</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>
|
||||
|
|
|
@ -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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">--></span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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">-->(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">-->(</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>
|
||||
|
|
|
@ -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">"<illegal token number "</span><span class="plain">, </span><span class="identifier">token</span><span class="plain">, </span><span class="string">">"</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">-->(</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">-->0) && (</span><span class="identifier">R</span><span class="plain">-->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">-->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">-->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">-->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">-->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">--></span><span class="identifier">k</span><span class="plain">) {</span>
|
||||
|
|
|
@ -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 — thus, it would appear that in the immediate past
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<=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"><=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}<=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}<=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>
|
||||
<<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</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>
|
||||
|
@ -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>
|
||||
<<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</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>
|
||||
|
@ -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>
|
||||
<<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>><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>§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>
|
||||
|
||||
<<span class="cwebmacrodefn">Break off here for real, binary or hexadecimal notation</span> <span class="cwebmacronumber">20.2.2.1.1</span>> =
|
||||
<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>
|
||||
<<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>><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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 --> 1 20;</span>
|
||||
<span class="reserved">Array</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="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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 — 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
|
||||
|
|
|
@ -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>§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>§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>§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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) & thing('box') & is('laboratory', ContainerOf('box')) & can-see(x, 'box') ]</span>
|
||||
|
|
|
@ -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 --> DOMAIN_OPEN --> PREDICATE --> DOMAIN_CLOSE --> 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 --> NEGATION_CLOSE_ATOM --> NEGATION_CLOSE_ATOM</span></code>
|
||||
</p>
|
||||
<pre class="display">
|
||||
<span class="plain">|DOMAIN_OPEN_ATOM --> NEGATION_CLOSE_ATOM --> 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) --> QUANTIFIER=for-all(x) --> PREDICATE=open(x)</span></code>
|
||||
</p>
|
||||
<pre class="display">
|
||||
<span class="plain">|EVERYWHERE_ATOM(x) --> QUANTIFIER=for-all(x) --> 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) --> KIND=number(x) --> EVERYWHERE(x)</span></code>
|
||||
</p>
|
||||
<pre class="display">
|
||||
<span class="plain">|QUANTIFIER=for-all(x) --> KIND=number(x) --> 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 --> PREDICATE --> anything --> CALLED</span></code>
|
||||
</p>
|
||||
<pre class="display">
|
||||
<span class="plain">QUANTIFIER --> PREDICATE --> anything --> 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, &cp);</span>
|
||||
<span class="plain">ANY_ATOM_HERE, NULL, CALLED_ATOM, &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 --> PREDICATE --> KIND --> NEGATION_CLOSE</span></code>
|
||||
</p>
|
||||
<pre class="display">
|
||||
<span class="plain">NEGATION_OPEN --> PREDICATE --> KIND --> NEGATION_CLOSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">would qualify. Note that detection succeeds only if the parentheses match,
|
||||
and that they may be nested.
|
||||
|
|
|
@ -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) & 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) & '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>
|
||||
|
|
|
@ -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 && Y && 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 --> DOMAIN_OPEN --> psi --> DOMAIN_CLOSE --> 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>§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 --> DOMAIN_OPEN --> psi --> DOMAIN_CLOSE --> 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>§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 --> DOMAIN_OPEN --> psi --> DOMAIN_CLOSE --> ...</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>
|
||||
|
|
|
@ -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() && (t_2=deferred_calling_list-->0, t_3=deferred_calling_list-->1, true))</span>
|
||||
<span class="plain">(</span><span class="identifier">Prop_19</span><span class="plain">() && (</span><span class="identifier">t_2</span><span class="plain">=</span><span class="identifier">deferred_calling_list</span><span class="plain">-->0, </span><span class="identifier">t_3</span><span class="plain">=</span><span class="identifier">deferred_calling_list</span><span class="plain">-->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
|
||||
|
|
|
@ -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 >= 0) && (strong < BASE_KIND_HWM)) weak = strong;</span>
|
||||
<span class="plain">else weak = strong-->0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">strong</span><span class="plain"> >= </span><span class="constant">0</span><span class="plain">) && (</span><span class="identifier">strong</span><span class="plain"> < </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">-->0;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">We must be careful with comparisons because a strong ID may be numerically
|
||||
|
|
|
@ -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 — to leave just those which will be compiled:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">? ? ? p</span>
|
||||
</pre>
|
||||
|
|
|
@ -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">§1.1.3</a>, <a href="#SP1_1_4">§1.1.4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1"></a><b>§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>§2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Now emit a propertyvalue</span> <span class="cwebmacronumber">2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
|
|
@ -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"> < </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>
|
||||
<<span class="cwebmacro">Issue a problem message for clash with wider inference</span> <span class="cwebmacronumber">1.2.2.1.1.1</span>>
|
||||
<span class="plain"> </span><<span class="cwebmacro">Issue a problem message for clash with wider inference</span> <span class="cwebmacronumber">1.2.2.1.1.1</span>>
|
||||
<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>
|
||||
|
|
|
@ -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 < 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">) && (</span><span class="functiontext">Properties::is_either_or</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::is_either_or</span><span class="plain">(</span><span class="identifier">pr2</span><span class="plain">)) &&</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"> > </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"> < </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">-></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">-></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->inference_type == list->inference_type</span>
|
||||
<span class="identifier">i</span><span class="plain">-></span><span class="element">inference_type</span><span class="plain"> == </span><span class="identifier">list</span><span class="plain">-></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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>§12.1. </b>Responses take the form
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">"blah blah blah" ( letter )</span>
|
||||
</pre>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
<<span class="cwebmacrodefn">Build the column correspondence tables</span> <span class="cwebmacronumber">20.10.1</span>> =
|
||||
<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"><</span><span class="identifier">old_t</span><span class="plain">-></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>
|
||||
|
|
|
@ -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">-></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>
|
||||
|
|
|
@ -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 —
|
|||
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>
|
||||
<<span class="cwebmacrodefn">Rearrange using the inverse of function</span> <span class="cwebmacronumber">50.3.2</span>> =
|
||||
<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">-></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">-></span><span class="element">leaf_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) -> number</span>
|
||||
</pre>
|
||||
|
|
|
@ -276,10 +276,8 @@ invocation which is given as verbatim I6.
|
|||
<p class="inwebparagraph"><a id="SP6_5"></a><b>§6.5. </b>The stack frame needs to know the kind of this phrase — something like
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">phrase number -> text</span>
|
||||
<span class="identifier">phrase</span><span class="plain"> </span><span class="identifier">number</span><span class="plain"> -> </span><span class="identifier">text</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">— in order to work out what happens when values are decided by it later on.
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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) -> 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) -> 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) -> nothing</span>
|
||||
</pre>
|
||||
|
|
|
@ -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) -> nothing</span>
|
||||
</pre>
|
||||
|
|
|
@ -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>§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>
|
||||
|
||||
<<span class="cwebmacrodefn">Compile code to set the formal parameters in void mode</span> <span class="cwebmacronumber">3.2.3.1</span>> =
|
||||
<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"><</span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<<span class="cwebmacro">Compile the actual assignment</span> <span class="cwebmacronumber">3.2.3.1.1</span>><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) && ((formal_rv = I1) bitwise-or 1))</span>
|
||||
<span class="plain">logical-or ((condition for I2 to be valid) && ((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>§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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
<<span class="cwebmacrodefn">Expand a bracing containing a kind command</span> <span class="cwebmacronumber">3.2</span>> =
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(4, </span><span class="identifier">sche</span><span class="plain">-></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">-></span><span class="identifier">inline_command</span><span class="plain"> == </span><span class="identifier">new_ISINC</span><span class="plain">) </span><<span class="cwebmacro">Inline command "new"</span> <span class="cwebmacronumber">3.2.1</span>><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-->{-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}<=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>
|
||||
|
||||
<<span class="cwebmacrodefn">Set the kind of the my-variable</span> <span class="cwebmacronumber">3.5.1.1.1</span>> =
|
||||
<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">-></span><span class="identifier">operand2</span><span class="plain">) > </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>
|
||||
|
||||
<<span class="cwebmacrodefn">Expand an entirely internal-made definition</span> <span class="cwebmacronumber">3.7</span>> =
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sche</span><span class="plain">-></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">-></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>
|
||||
|
|
|
@ -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 > 0) ...</span>
|
||||
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">counter_of_some_kind</span><span class="plain"> > </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>.
|
||||
|
|
|
@ -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, ... --> (Adj_53_t1_v61(*1))</span>
|
||||
<span class="plain">now the sack is open; ... --> 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, ... --> (scene_status->(*1 - 1)==1)</span>
|
||||
</pre>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">-></span><span class="identifier">vu_lex_entry</span><span class="plain"> == </span><span class="identifier">lex</span><span class="plain">) && (</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">&& (</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"> && (</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">(&(</span><span class="identifier">vu</span><span class="plain">-></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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 — 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
|
||||
|
|
|
@ -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 —
|
||||
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 — it's not
|
||||
mission-critical.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">) && (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-></span><span class="element">down</span><span class="plain">) == </span><span class="identifier">WITH_NT</span><span class="plain">)) {</span>
|
||||
|
@ -1307,24 +1299,22 @@ here work:
|
|||
</blockquote>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"> RELATIONSHIP_NT <below> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain"> AND_NT</span>
|
||||
<span class="plain"> PROPER_NOUN_NT <kudamm> (definite)</span>
|
||||
<span class="plain"> RELATIONSHIP_NT <above> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain"> PROPER_NOUN_NT <u-bahn> (definite)</span>
|
||||
<span class="plain">RELATIONSHIP_NT <below> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain">AND_NT</span>
|
||||
<span class="plain">PROPER_NOUN_NT <kudamm> (definite)</span>
|
||||
<span class="plain">RELATIONSHIP_NT <above> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <u-bahn> (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 <below> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain"> PROPER_NOUN_NT <kudamm> (definite)</span>
|
||||
<span class="plain"> RELATIONSHIP_NT <above> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain"> PROPER_NOUN_NT <u-bahn> (definite)</span>
|
||||
<span class="plain">AND_NT</span>
|
||||
<span class="plain">RELATIONSHIP_NT <below> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <kudamm> (definite)</span>
|
||||
<span class="plain">RELATIONSHIP_NT <above> (CONTAINS_THINGS_INF)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <u-bahn> (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">) &&</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 <called></span>
|
||||
<span class="plain"> RELATIONSHIP_NT <north of a room> (type:direction)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"> <code class="display"><span class="extract"> PROPER_NOUN_NT <room> (indefinite)</span></code>
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"> PROPER_NOUN_NT <north> (no article)</span>
|
||||
<span class="plain"> PROPER_NOUN_NT <hot and cold room> (definite)</span>
|
||||
<span class="plain">RELATIONSHIP_NT <north of a room> (type:direction)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <room> (indefinite)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <north> (no article)</span>
|
||||
<span class="plain">PROPER_NOUN_NT <hot and cold room> (definite)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">into:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">RELATIONSHIP_NT <called> (type:direction)</span>
|
||||
<span class="plain"> CALLED_NT <north of a room></span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"> <code class="display"><span class="extract"> COMMON_NOUN_NT <room></span></code>
|
||||
<code class="display"><span class="extract"> CREATED_NT <hot and cold room></span></code>
|
||||
<code class="display"><span class="extract"> PROPER_NOUN_NT <north> (no article)</span></code>
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">CALLED_NT <north of a room></span>
|
||||
<span class="plain">COMMON_NOUN_NT <room></span>
|
||||
<span class="plain">CREATED_NT <hot and cold room></span>
|
||||
<span class="plain">PROPER_NOUN_NT <north> (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">-></span><span class="element">down</span><span class="plain">-></span><span class="element">down</span><span class="plain">-></span><span class="element">next</span><span class="plain">; </span><span class="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">-></span><span class="element">down</span><span class="plain">-></span><span class="element">next</span><span class="plain">; </span><span class="comment">"hot and cold room" in the example</span>
|
||||
|
|
|
@ -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 <fifi> (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 <in> (type:standard)</span>
|
||||
<span class="plain"> node:PROPER_NOUN_NT <wicker basket> (definite)</span>
|
||||
<span class="plain">node:PROPER_NOUN_NT <wicker basket> (definite)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">The Creator is not alas a cultured gentleman with a white-pointed beard, a
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"><script language="JavaScript"></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"></script></span>
|
||||
</pre>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"><a href="***openUrl">...</a></span>
|
||||
</pre>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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 —
|
||||
</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 — 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 <string></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 <string></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 <number></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 <filename> <string></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 <filename> 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 <filename> ... unsupported by Inblorb</span>
|
||||
<span class="plain">storyfile <filename> 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>§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 <dim> ... unsupported by Inblorb</span>
|
||||
<span class="plain">resolution <dim> min <dim> ... unsupported by Inblorb</span>
|
||||
|
@ -382,8 +352,6 @@ infinity by infinity.
|
|||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Third, commands for adding audiovisual resources:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">sound <id> <filename></span>
|
||||
<span class="plain">sound <id> <filename> repeat <number> ... 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 <id> <filename></span>
|
||||
<span class="plain">picture <id> <filename> scale <ratio> ... 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 <filename></span>
|
||||
</pre>
|
||||
|
@ -465,8 +425,6 @@ of a typical desktop of 2001.
|
|||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>Three commands help us to specify locations.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">project folder <filename></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 <filename></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 <filename></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 <filename></span>
|
||||
</pre>
|
||||
|
@ -564,8 +510,6 @@ the named file is placed in the release folder.
|
|||
<p class="inwebparagraph"><a id="SP13"></a><b>§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 <filename> from <template></span>
|
||||
</pre>
|
||||
|
@ -596,8 +538,6 @@ expand interesting text in their places — see "Writing with Inform"
|
|||
for more on this.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">release source <filename>| using |<filename> from <template></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 <template></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 <filename> to <filename></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 <interpreter-name> <vm-letter></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 <template> <filename></span>
|
||||
<span class="plain">status alternative <link to Inform documentation></span>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -116,8 +116,6 @@ we can give a semantic version number range:
|
|||
<p class="inwebparagraph"><a id="SP3"></a><b>§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>
|
||||
|
|
|
@ -426,8 +426,6 @@ This is that time.
|
|||
<p class="inwebparagraph"><a id="SP3_1"></a><b>§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>§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
|
||||
|
|
|
@ -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">-></span><span class="element">as_copy</span><span class="plain">-></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">-></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">-></span><span class="element">kits_to_include</span><span class="plain">)</span>
|
||||
|
|
|
@ -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<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"><</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<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"><</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.
|
||||
|
|
|
@ -102,8 +102,6 @@ from multiple files and indeed from elsewhere.
|
|||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§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>
|
||||
|
|
|
@ -245,7 +245,7 @@ invisible unless the user scrolls a long way:
|
|||
<span class="string">"<b>Warning</b>. 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>§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>
|
||||
|
|
|
@ -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 >= MAX_ED_LINE_LENGTH</span>
|
||||
<span class="plain">MAX_EXTENSION_TITLE_LENGTH + MAX_EXTENSION_AUTHOR_LENGTH >= 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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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---> [c26] Menus by Emily Short v3</span>
|
||||
<span class="plain"> --use---> [c34] Basic Screen Effects by Emily Short v7.140425</span>
|
||||
<span class="plain">--use---> [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-> [f58] Menu Time.inform/Build/auto.inf</span>
|
||||
<span class="plain"> --build-> [f57] Menu Time.inform/Build/auto.inf</span>
|
||||
<span class="plain"> --build-> [c0] Menu Time.inform</span>
|
||||
<span class="plain"> --build-> [c53] Basic Help Menu by Emily Short</span>
|
||||
<span class="plain"> --use---> [c47] Menus by Emily Short v3</span>
|
||||
<span class="plain"> --use---> [c55] Basic Screen Effects by Emily Short v7.140425</span>
|
||||
<span class="plain"> --build-> [f1] Menu Time.inform/Source/story.ni</span>
|
||||
<span class="plain"> --build-> [c12] BasicInformKit</span>
|
||||
<span class="plain">--build-> [f57] Menu Time.inform/Build/auto.inf</span>
|
||||
<span class="plain"> --build-> [c0] Menu Time.inform</span>
|
||||
<span class="plain">--build-> [c53] Basic Help Menu by Emily Short</span>
|
||||
<span class="plain"> --use---> [c47] Menus by Emily Short v3</span>
|
||||
<span class="plain">--use---> [c55] Basic Screen Effects by Emily Short v7.140425</span>
|
||||
<span class="plain">--build-> [f1] Menu Time.inform/Source/story.ni</span>
|
||||
<span class="plain">--build-> [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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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>
|
||||
|
||||
<<span class="cwebmacrodefn">Act on a volume creation</span> <span class="cwebmacronumber">5.1.2</span>> =
|
||||
<<span class="cwebmacro">Disallow this in a specific target</span> <span class="cwebmacronumber">5.1.1</span>><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>
|
||||
|
|
|
@ -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">-></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"><</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">-></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"> >= </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">-></span><span class="element">sp_style</span><span class="plain">);</span>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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>§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>
|
||||
|
|
|
@ -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">-></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>§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>§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>
|
||||
|
||||
<<span class="cwebmacrodefn">Take note of documentation references</span> <span class="cwebmacronumber">4.1.1</span>> =
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</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>§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>§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>
|
||||
|
||||
<<span class="cwebmacrodefn">Deal with a phrase definition paragraph tag</span> <span class="cwebmacronumber">4.6.2</span>> =
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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>§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>§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>§16. </b>Lastly, an entry in the form:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">^{reptiles <-- crocodiles <-- alligators}</span>
|
||||
</pre>
|
||||
|
@ -623,8 +543,6 @@ sample program — 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>§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
Loading…
Reference in a new issue