mirror of
https://github.com/ganelson/inform.git
synced 2024-07-02 23:14:57 +03:00
Removed Glulx- and Zmachine-only sections of BasicInformKit
This commit is contained in:
parent
e802307073
commit
5a6469c072
|
@ -51,7 +51,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture16Kit</a></li><li><b>Capabilities Template</b></li></ul></div>
|
||||
<p class="purpose">Miscellaneous capabilities of the 16-bit architecture.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-cpb.html#SP1">§1. Summary</a></li><li><a href="S-cpb.html#SP2">§2. Header layout</a></li><li><a href="S-cpb.html#SP3">§3. Release Number</a></li><li><a href="S-cpb.html#SP4">§4. RNG</a></li><li><a href="S-cpb.html#SP5">§5. Memory Allocation</a></li><li><a href="S-cpb.html#SP6">§6. Memcpy</a></li><li><a href="S-cpb.html#SP8">§8. Audiovisual Resources</a></li><li><a href="S-cpb.html#SP9">§9. Typography</a></li><li><a href="S-cpb.html#SP10">§10. Undo</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-cpb.html#SP1">§1. Summary</a></li><li><a href="S-cpb.html#SP2">§2. Header layout</a></li><li><a href="S-cpb.html#SP3">§3. Release Number</a></li><li><a href="S-cpb.html#SP4">§4. RNG</a></li><li><a href="S-cpb.html#SP5">§5. Memory Allocation</a></li><li><a href="S-cpb.html#SP6">§6. Memcpy</a></li><li><a href="S-cpb.html#SP8">§8. Audiovisual Resources</a></li><li><a href="S-cpb.html#SP9">§9. Typography</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Summary. </b>The 16-bit architecture is for very limited virtual machines, and is closely
|
||||
modelled on Infocom's Z-machine, originally developed between 1979 and 1986,
|
||||
|
@ -190,22 +190,8 @@ Glulx are indistinguishable here.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Undo. </b>These simply wrap the relevant opcodes.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restore_undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">save_undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">cpb</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">cpb</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -212,7 +212,7 @@ expression matching.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mth.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-io.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mth.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-io.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -89,7 +89,7 @@ see above.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-io.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresscurrent">fio</li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-vnr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-io.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresscurrent">fio</li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-vnr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -65,16 +65,41 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture16Kit</a></li><li><b>Input Output Template</b></li></ul></div>
|
||||
<p class="purpose">Access to the keyboard and to textual windows.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-io.html#SP1">§1. Variables and Arrays</a></li><li><a href="S-io.html#SP2">§2. Dictionary words</a></li><li><a href="S-io.html#SP3">§3. Keyboard Input</a></li><li><a href="S-io.html#SP4">§4. Buffer Functions</a></li><li><a href="S-io.html#SP5">§5. Dictionary Functions</a></li><li><a href="S-io.html#SP6">§6. Command Tables</a></li><li><a href="S-io.html#SP7">§7. Extracting Verb Numbers</a></li><li><a href="S-io.html#SP8">§8. The Screen</a></li><li><a href="S-io.html#SP9">§9. Window Colours</a></li><li><a href="S-io.html#SP10">§10. Main Window</a></li><li><a href="S-io.html#SP11">§11. Status Line</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-io.html#SP1">§1. Transcript support</a></li><li><a href="S-io.html#SP2">§2. Variables and Arrays</a></li><li><a href="S-io.html#SP3">§3. Dictionary words</a></li><li><a href="S-io.html#SP4">§4. Keyboard Input</a></li><li><a href="S-io.html#SP5">§5. Buffer Functions</a></li><li><a href="S-io.html#SP6">§6. Dictionary Functions</a></li><li><a href="S-io.html#SP7">§7. Command Tables</a></li><li><a href="S-io.html#SP8">§8. Extracting Verb Numbers</a></li><li><a href="S-io.html#SP9">§9. Action functions</a></li><li><a href="S-io.html#SP10">§10. The Screen</a></li><li><a href="S-io.html#SP11">§11. Window Colours</a></li><li><a href="S-io.html#SP12">§12. Main Window</a></li><li><a href="S-io.html#SP13">§13. Status Line</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Variables and Arrays. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Transcript support. </b>This is a mode in which the transcript of text in the main window is being
|
||||
written out to an external file.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_TranscriptIsOn</span></span> tests whether this mode is on. <span class="extract"><span class="extract-syntax">VM_TranscriptOn</span></span> should
|
||||
be called only if it is off, and tries to turn it on, returning <span class="extract"><span class="extract-syntax">true</span></span> or <span class="extract"><span class="extract-syntax">false</span></span>
|
||||
according to whether or not it succeeds. <span class="extract"><span class="extract-syntax">VM_TranscriptOff</span></span> should be called
|
||||
only if scripting is on.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">HDR_GAMEFLAGS</span><span class="plain-syntax">-->0) & </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptOn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">output_stream</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptOff</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">output_stream</span><span class="plain-syntax"> -2;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">()) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Variables and Arrays. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> #</span><span class="identifier-syntax">dict_par1</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> #</span><span class="identifier-syntax">dict_par2</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">xcommsdir</span><span class="plain-syntax">; </span><span class="comment-syntax">true if command recording is on</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax">; </span><span class="comment-syntax">true if game scripting is on</span>
|
||||
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax"> = </span><span class="constant-syntax">120</span><span class="plain-syntax">; </span><span class="comment-syntax">Length of buffer array</span>
|
||||
|
||||
|
@ -88,7 +113,7 @@ MathJax = {
|
|||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">dict_end</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Dictionary words. </b>This tests whether an address is probably that of a dictionary word. It's used
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Dictionary words. </b>This tests whether an address is probably that of a dictionary word. It's used
|
||||
only for debugging output, so the false positives here (where an address is in
|
||||
the dictionary table, but mid-word) really do not matter.
|
||||
</p>
|
||||
|
@ -100,7 +125,7 @@ the dictionary table, but mid-word) really do not matter.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Keyboard Input. </b>The VM must provide three routines for keyboard input:
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Keyboard Input. </b>The VM must provide three routines for keyboard input:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) <span class="extract"><span class="extract-syntax">VM_KeyChar()</span></span> waits for a key to be pressed and then returns the
|
||||
|
@ -131,7 +156,7 @@ to document all of that.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">read</span><span class="plain-syntax"> </span><span class="identifier-syntax">a_buffer</span><span class="plain-syntax"> </span><span class="identifier-syntax">a_table</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Buffer Functions. </b>A "buffer", in this sense, is an array containing a stream of characters
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Buffer Functions. </b>A "buffer", in this sense, is an array containing a stream of characters
|
||||
typed from the keyboard; a "parse buffer" is an array which resolves this
|
||||
into individual words, pointing to the relevant entries in the dictionary
|
||||
structure. Because each VM has its own format for each of these arrays (not
|
||||
|
@ -194,7 +219,7 @@ languages of play.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">b</span><span class="plain-syntax">->1 < </span><span class="identifier-syntax">b</span><span class="plain-syntax">->0) (</span><span class="identifier-syntax">b</span><span class="plain-syntax">->1)++;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Dictionary Functions. </b>Again, the dictionary structure is differently arranged on the different VMs.
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Dictionary Functions. </b>Again, the dictionary structure is differently arranged on the different VMs.
|
||||
This is a data structure containing, in compressed form, the text of all the
|
||||
words to be recognised by tokenisation (above). In I6 for Z, a dictionary word
|
||||
value is represented at run-time by its record number in the dictionary,
|
||||
|
@ -220,7 +245,7 @@ convert between record numbers and dictionary addresses.
|
|||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_DictionaryAddressToNumber</span><span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">w</span><span class="plain-syntax">-(</span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax">))/</span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax">; ];</span>
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_NumberToDictionaryAddress</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax"> + </span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax">*</span><span class="identifier-syntax">n</span><span class="plain-syntax">; ];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
||||
produced by I6's <span class="extract"><span class="extract-syntax">Verb</span></span> and <span class="extract"><span class="extract-syntax">Extend</span></span> directives: this is essentially a
|
||||
list of command verbs such as DROP or PUSH, together with a list of
|
||||
synonyms, and then the grammar for the subsequent commands to be
|
||||
|
@ -239,7 +264,7 @@ recognised by the parser.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"'"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">address</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_NumberToDictionaryAddress</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</span><span class="plain-syntax">), </span><span class="string-syntax">"' "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Extracting Verb Numbers. </b>A long tale of woe lies behind the following. Infocom games stored verb numbers
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Extracting Verb Numbers. </b>A long tale of woe lies behind the following. Infocom games stored verb numbers
|
||||
in a single byte in dictionary entries, but they did so counting downwards, so
|
||||
that verb number 0 was stored as 255, 1 as 254, and so on. Inform followed
|
||||
suit so that debugging of Inform 1 could be aided by using the then-available
|
||||
|
@ -260,7 +285,16 @@ routine was added to concentrate lookups of this field in one place.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">$ff</span><span class="plain-syntax">-(</span><span class="identifier-syntax">dword</span><span class="plain-syntax">->#</span><span class="identifier-syntax">dict_par2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. The Screen. </b>Our generic screen model is that the screen is made up of windows: we tend
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Action functions. </b>This looks up the address of a function like <span class="extract"><span class="extract-syntax">TakeSub</span></span> from the table of
|
||||
"action subroutines".
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_ActionFunction</span><span class="plain-syntax"> </span><span class="identifier-syntax">act</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> #</span><span class="identifier-syntax">actions_table</span><span class="plain-syntax">--></span><span class="identifier-syntax">act</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. The Screen. </b>Our generic screen model is that the screen is made up of windows: we tend
|
||||
to refer only to two of these, the main window and the status line, but
|
||||
others may also exist from time to time. Windows have unique ID numbers:
|
||||
the special window ID \(-1\) means "all windows" or "the entire screen",
|
||||
|
@ -291,7 +325,7 @@ in order to keep it accurate.
|
|||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_ScreenHeight</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">HDR_SCREENHLINES</span><span class="plain-syntax">->0); ];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Window Colours. </b>Each window can have its own foreground and background colours.
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Window Colours. </b>Each window can have its own foreground and background colours.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The colour of individual letters or words of type is not controllable in
|
||||
|
@ -330,7 +364,7 @@ which is greatly superior in this respect).
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Main Window. </b>The part of the screen on which commands and responses are printed, which
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Main Window. </b>The part of the screen on which commands and responses are printed, which
|
||||
ordinarily occupies almost all of the screen area.
|
||||
</p>
|
||||
|
||||
|
@ -349,7 +383,7 @@ emulates the Glulx model of window rather than text colours.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_current</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Status Line. </b>Despite the name, the status line need not be a single line at the top of
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. Status Line. </b>Despite the name, the status line need not be a single line at the top of
|
||||
the screen: that's only the conventional default arrangement. It can expand
|
||||
to become the equivalent of an old-fashioned VT220 terminal, with menus
|
||||
and grids and mazes displayed lovingly in character graphics, or it can
|
||||
|
@ -391,7 +425,7 @@ line; line 2 is underneath, and so on; columns are similarly numbered from
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cs.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresscurrent">io</li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-fio.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cs.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresscurrent">io</li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-fio.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -105,7 +105,7 @@ addresses, we need to compare them with the following routine, which returns
|
|||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REAL_NUMBER_TY_Compare</span><span class="plain-syntax"> </span><span class="identifier-syntax">r1</span><span class="plain-syntax"> </span><span class="identifier-syntax">r2</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">UnsignedCompare</span><span class="plain-syntax">(</span><span class="identifier-syntax">r1</span><span class="plain-syntax">, </span><span class="identifier-syntax">r2</span><span class="plain-syntax">); ];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-str.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresscurrent">mth</li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-cs.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-stt.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresscurrent">mth</li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-cs.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -61,7 +61,6 @@ activity runs; and then <span class="extract"><span class="extract-syntax">VM_In
|
|||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Initialise</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_TERPSTANDARD</span><span class="plain-syntax">-->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> = ((</span><span class="identifier-syntax">HDR_GAMEFLAGS</span><span class="plain-syntax">-->0) & </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">dict_entry_size</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">->(</span><span class="identifier-syntax">dict_start</span><span class="plain-syntax">->0 + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
|
@ -82,7 +81,7 @@ activity runs; and then <span class="extract"><span class="extract-syntax">VM_In
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cpb.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresscurrent">str</li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-mth.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cpb.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresscurrent">str</li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-stt.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
138
docs/Architecture16Kit/S-stt.html
Normal file
138
docs/Architecture16Kit/S-stt.html
Normal file
|
@ -0,0 +1,138 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>State Template</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'State Template' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture16Kit</a></li><li><b>State Template</b></li></ul></div>
|
||||
<p class="purpose">Saving, restoring, restarting and verifying the program from within itself.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-stt.html#SP1">§1. Environment</a></li><li><a href="S-stt.html#SP2">§2. Verification</a></li><li><a href="S-stt.html#SP3">§3. Save, restore, restart</a></li><li><a href="S-stt.html#SP4">§4. Undo</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Environment. </b>The language "interpreter" here supposes that the eventual program is
|
||||
running in a VM which is being interpreted, and that may not be the case,
|
||||
but it's traditional.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_ReportOnInterpreter</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Standard interpreter "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax">/256, </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax">%256,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">" ("</span><span class="plain-syntax">, </span><span class="identifier-syntax">HDR_TERPNUMBER</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">HDR_TERPVERSION</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">")^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Interpreter "</span><span class="plain-syntax">, </span><span class="identifier-syntax">HDR_TERPNUMBER</span><span class="plain-syntax">->0, </span><span class="string-syntax">" Version "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">HDR_TERPVERSION</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Verification. </b>This verifies that the current story file is intact.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Verify</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">verify</span><span class="plain-syntax"> ?</span><span class="identifier-syntax">Vmaybe</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">Vmaybe</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Save, restore, restart. </b>Restart does what it says: restarts the program as if it had just loaded for
|
||||
the first time.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_Save()</span></span> attempts to save the current state of the program to a file, and
|
||||
returns 0 if this fails, 1 if this succeeds, or 2 if in fact a restore has
|
||||
just succeeded. (A successful restoration should resume execution where the
|
||||
save succeeded, but we want to distinguish those cases.)
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_Restore()</span></span> pretends to return <span class="extract"><span class="extract-syntax">true</span></span> or <span class="extract"><span class="extract-syntax">false</span></span> according to whether or not
|
||||
it succeeds, but in fact it can only return <span class="extract"><span class="extract-syntax">false</span></span> to indicate failure, because
|
||||
a successful restoration means that execution has transferred to <span class="extract"><span class="extract-syntax">VM_Save</span></span>
|
||||
instead.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Restore</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">restore</span><span class="plain-syntax"> </span><span class="identifier-syntax">RMaybe</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">RMaybe</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">save</span><span class="plain-syntax"> -> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Undo. </b>These also simply wrap the relevant opcodes.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restore_undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">save_undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-str.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresscurrent">stt</li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-mth.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -87,7 +87,7 @@ and do no harm.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fio.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresscurrent">vnr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fio.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresscurrent">vnr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -59,6 +59,11 @@
|
|||
<spon class="sectiontitle">Startup Template</span></a> -
|
||||
<span class="sectionpurpose">How programs for this architecture start up the virtual machine.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-stt.html">
|
||||
<spon class="sectiontitle">State Template</span></a> -
|
||||
<span class="sectionpurpose">Saving, restoring, restarting and verifying the program from within itself.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-mth.html">
|
||||
<spon class="sectiontitle">Mathematics Template</span></a> -
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>Capabilities Template</b></li></ul></div>
|
||||
<p class="purpose">Miscellaneous capabilities of the 16-bit architecture.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-cpb.html#SP1">§1. Summary</a></li><li><a href="S-cpb.html#SP2">§2. Header layout</a></li><li><a href="S-cpb.html#SP3">§3. Release Number</a></li><li><a href="S-cpb.html#SP4">§4. Random Number Generator</a></li><li><a href="S-cpb.html#SP5">§5. Memory Allocation</a></li><li><a href="S-cpb.html#SP6">§6. Memcpy</a></li><li><a href="S-cpb.html#SP8">§8. Audiovisual Resources</a></li><li><a href="S-cpb.html#SP9">§9. Typography</a></li><li><a href="S-cpb.html#SP10">§10. Undo</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-cpb.html#SP1">§1. Summary</a></li><li><a href="S-cpb.html#SP2">§2. Header layout</a></li><li><a href="S-cpb.html#SP3">§3. Release Number</a></li><li><a href="S-cpb.html#SP4">§4. Random Number Generator</a></li><li><a href="S-cpb.html#SP5">§5. Memory Allocation</a></li><li><a href="S-cpb.html#SP6">§6. Memcpy</a></li><li><a href="S-cpb.html#SP8">§8. Audiovisual Resources</a></li><li><a href="S-cpb.html#SP9">§9. Typography</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Summary. </b>The 32-bit architecture is currently the default targeted by Inform, and is
|
||||
used both for programs compiled via Inform 6 to the Glulx virtual machine, and
|
||||
|
@ -193,23 +193,8 @@ not the place to discuss whether that was a wise decision for Glk to take.)
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Undo. </b>These are really emulations of the Z-machine's conventions on UNDO.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restoreundo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (~~</span><span class="identifier-syntax">result_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">saveundo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_code</span><span class="plain-syntax"> == -1) { </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax">(); </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (~~</span><span class="identifier-syntax">result_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">cpb</li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-glk.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">cpb</li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-glk.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -203,7 +203,7 @@ expression matching.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mth.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-io.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mth.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-io.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -505,7 +505,7 @@ see above.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-io.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresscurrent">fio</li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-vnr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-io.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresscurrent">fio</li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-vnr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -978,7 +978,7 @@ put together by John Cater.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cpb.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresscurrent">glk</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cpb.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresscurrent">glk</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -65,9 +65,69 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>Input Output Template</b></li></ul></div>
|
||||
<p class="purpose">Access to the keyboard and to textual windows.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-io.html#SP1">§1. Variables and Arrays</a></li><li><a href="S-io.html#SP2">§2. Rocks</a></li><li><a href="S-io.html#SP3">§3. Dictionary words</a></li><li><a href="S-io.html#SP4">§4. Keyboard Input</a></li><li><a href="S-io.html#SP5">§5. Buffer Functions</a></li><li><a href="S-io.html#SP6">§6. Dictionary Functions</a></li><li><a href="S-io.html#SP7">§7. Command Tables</a></li><li><a href="S-io.html#SP8">§8. Extracting Verb Numbers</a></li><li><a href="S-io.html#SP9">§9. Glulx-Only Printing Routines</a></li><li><a href="S-io.html#SP10">§10. The Screen</a></li><li><a href="S-io.html#SP11">§11. Window Colours</a></li><li><a href="S-io.html#SP12">§12. Main Window</a></li><li><a href="S-io.html#SP13">§13. Status Line</a></li><li><a href="S-io.html#SP14">§14. Quotation Boxes</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-io.html#SP1">§1. Rocks</a></li><li><a href="S-io.html#SP2">§2. Transcript support</a></li><li><a href="S-io.html#SP3">§3. Variables and Arrays</a></li><li><a href="S-io.html#SP4">§4. Dictionary words</a></li><li><a href="S-io.html#SP5">§5. Keyboard Input</a></li><li><a href="S-io.html#SP6">§6. Buffer Functions</a></li><li><a href="S-io.html#SP7">§7. Dictionary Functions</a></li><li><a href="S-io.html#SP8">§8. Command Tables</a></li><li><a href="S-io.html#SP9">§9. Extracting Verb Numbers</a></li><li><a href="S-io.html#SP10">§10. Action functions</a></li><li><a href="S-io.html#SP11">§11. Glulx-Only Printing Routines</a></li><li><a href="S-io.html#SP12">§12. The Screen</a></li><li><a href="S-io.html#SP13">§13. Window Colours</a></li><li><a href="S-io.html#SP14">§14. Main Window</a></li><li><a href="S-io.html#SP15">§15. Status Line</a></li><li><a href="S-io.html#SP16">§16. Quotation Boxes</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Variables and Arrays. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Rocks. </b>These are unique ID codes used to mark resources; think of them as inedible
|
||||
cookies.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">201</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">202</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_QUOTEWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">203</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">301</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">302</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDWSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">303</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDRSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">304</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">401</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_FOREGROUNDCHAN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">410</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_BACKGROUNDCHAN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">411</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Transcript support. </b>This is a mode in which the transcript of text in the main window is being
|
||||
written out to an external file.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_TranscriptIsOn</span></span> tests whether this mode is on. <span class="extract"><span class="extract-syntax">VM_TranscriptOn</span></span> should
|
||||
be called only if it is off, and tries to turn it on, returning <span class="extract"><span class="extract-syntax">true</span></span> or <span class="extract"><span class="extract-syntax">false</span></span>
|
||||
according to whether or not it succeeds. <span class="extract"><span class="extract-syntax">VM_TranscriptOff</span></span> should be called
|
||||
only if scripting is on: this always succeeds.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax">) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptOn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="reserved-syntax">true</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="constant-syntax">$102</span><span class="plain-syntax">, </span><span class="constant-syntax">$05</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">stream_open_file</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax">, </span><span class="constant-syntax">$05</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Could not open selected file; select again</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_window_set_echo_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_TranscriptOff</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="comment-syntax">stream_close</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Variables and Arrays. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax"> = </span><span class="constant-syntax">12</span><span class="plain-syntax">+</span><span class="identifier-syntax">DICT_WORD_SIZE</span><span class="plain-syntax">*</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">;</span>
|
||||
|
@ -79,8 +139,6 @@ MathJax = {
|
|||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_statuswin</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_quotewin</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_commandstr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_command_reading</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">true if gg_commandstr is being replayed</span>
|
||||
|
@ -97,23 +155,7 @@ MathJax = {
|
|||
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax"> --> </span><span class="identifier-syntax">PARSE_BUFFER_LEN</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse2</span><span class="plain-syntax"> --> </span><span class="identifier-syntax">PARSE_BUFFER_LEN</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Rocks. </b>These are unique ID codes used to mark resources; think of them as inedible
|
||||
cookies.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_MAINWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">201</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_STATUSWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">202</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_QUOTEWIN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">203</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">301</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">302</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDWSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">303</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_COMMANDRSTR_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">304</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">401</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_FOREGROUNDCHAN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">410</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GG_BACKGROUNDCHAN_ROCK</span><span class="plain-syntax"> </span><span class="constant-syntax">411</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Dictionary words. </b>This tests whether an address is probably that of a dictionary word. It's used
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Dictionary words. </b>This tests whether an address is probably that of a dictionary word. It's used
|
||||
only for debugging output, so the false positives here really do not matter.
|
||||
</p>
|
||||
|
||||
|
@ -123,7 +165,7 @@ only for debugging output, so the false positives here really do not matter.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Keyboard Input. </b>The VM must provide three routines for keyboard input:
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Keyboard Input. </b>The VM must provide three routines for keyboard input:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) <span class="extract"><span class="extract-syntax">VM_KeyChar()</span></span> waits for a key to be pressed and then returns the
|
||||
|
@ -289,7 +331,7 @@ to document all of that.
|
|||
<span class="character-syntax"> }</span>
|
||||
<span class="character-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Buffer Functions. </b>A "buffer", in this sense, is an array containing a stream of characters
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Buffer Functions. </b>A "buffer", in this sense, is an array containing a stream of characters
|
||||
typed from the keyboard; a "parse buffer" is an array which resolves this
|
||||
into individual words, pointing to the relevant entries in the dictionary
|
||||
structure. Because each VM has its own format for each of these arrays (not
|
||||
|
@ -422,7 +464,7 @@ languages of play, and is not called in the template.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">b</span><span class="plain-syntax">-->0 < </span><span class="identifier-syntax">INPUT_BUFFER_LEN</span><span class="plain-syntax">) (</span><span class="identifier-syntax">b</span><span class="plain-syntax">-->0)++;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Dictionary Functions. </b>Again, the dictionary structure is differently arranged on the different VMs.
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Dictionary Functions. </b>Again, the dictionary structure is differently arranged on the different VMs.
|
||||
This is a data structure containing, in compressed form, the text of all the
|
||||
words to be recognised by tokenisation (above). In I6 for Glulx, a dictionary
|
||||
word is represented at run-time by its record's address in the dictionary.
|
||||
|
@ -459,7 +501,7 @@ since, on Glulx, they are the same, these are each the identity function.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
||||
produced by I6's <span class="extract"><span class="extract-syntax">Verb</span></span> and <span class="extract"><span class="extract-syntax">Extend</span></span> directives: this is essentially a
|
||||
list of command verbs such as DROP or PUSH, together with a list of
|
||||
synonyms, and then the grammar for the subsequent commands to be
|
||||
|
@ -481,7 +523,7 @@ recognised by the parser.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Extracting Verb Numbers. </b>A long tale of woe lies behind the following. Infocom games stored verb numbers
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Extracting Verb Numbers. </b>A long tale of woe lies behind the following. Infocom games stored verb numbers
|
||||
in a single byte in dictionary entries, but they did so counting downwards, so
|
||||
that verb number 0 was stored as 255, 1 as 254, and so on. Inform followed
|
||||
suit so that debugging of Inform 1 could be aided by using the then-available
|
||||
|
@ -505,7 +547,20 @@ routine was added to concentrate lookups of this field in one place.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">verbnum</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Glulx-Only Printing Routines. </b>Partly because of the smallness of the range of representable values in
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Action functions. </b>This looks up the address of a function like <span class="extract"><span class="extract-syntax">TakeSub</span></span> from the table of
|
||||
"action subroutines".
|
||||
</p>
|
||||
|
||||
<p class="commentary">Strangely, Glulx's action routines table is numbered in an off-by-one way
|
||||
compared to the Z-machine's: hence the <span class="extract"><span class="extract-syntax">+1</span></span> here.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_ActionFunction</span><span class="plain-syntax"> </span><span class="identifier-syntax">act</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> #</span><span class="identifier-syntax">actions_table</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">act</span><span class="plain-syntax">+1);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Glulx-Only Printing Routines. </b>Partly because of the smallness of the range of representable values in
|
||||
the Z-machine, there is little run-time type-checking that can be done:
|
||||
for instance a dictionary address cannot be distinguished from a function
|
||||
address because they are encoded differently, so that a function address
|
||||
|
@ -658,7 +713,7 @@ set stored here is once again ZSCII, not Unicode.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">AnyToStrArr</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. The Screen. </b>Our generic screen model is that the screen is made up of windows: we tend
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. The Screen. </b>Our generic screen model is that the screen is made up of windows: we tend
|
||||
to refer only to two of these, the main window and the status line, but
|
||||
others may also exist from time to time. Windows have unique ID numbers:
|
||||
the special window ID \(-1\) means "all windows" or "the entire screen",
|
||||
|
@ -695,7 +750,7 @@ make little sense there.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_arguments</span><span class="plain-syntax">-->0;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Window Colours. </b>Our generic screen model is that the screen is made up of windows, each of
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. Window Colours. </b>Our generic screen model is that the screen is made up of windows, each of
|
||||
which can have its own foreground and background colours.
|
||||
</p>
|
||||
|
||||
|
@ -763,7 +818,7 @@ which is greatly superior in this respect).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">$ff0000</span><span class="plain-syntax">*(</span><span class="identifier-syntax">c</span><span class="plain-syntax">&1) + </span><span class="constant-syntax">$ff00</span><span class="plain-syntax">*(</span><span class="identifier-syntax">c</span><span class="plain-syntax">&2 ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) + </span><span class="constant-syntax">$ff</span><span class="plain-syntax">*(</span><span class="identifier-syntax">c</span><span class="plain-syntax">&4 ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Main Window. </b>The part of the screen on which commands and responses are printed, which
|
||||
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. Main Window. </b>The part of the screen on which commands and responses are printed, which
|
||||
ordinarily occupies almost all of the screen area.
|
||||
</p>
|
||||
|
||||
|
@ -777,7 +832,7 @@ status line, to the main window.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_current</span><span class="plain-syntax">=0;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. Status Line. </b>Despite the name, the status line need not be a single line at the top of
|
||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. Status Line. </b>Despite the name, the status line need not be a single line at the top of
|
||||
the screen: that's only the conventional default arrangement. It can expand
|
||||
to become the equivalent of an old-fashioned VT220 terminal, with menus
|
||||
and grids and mazes displayed lovingly in character graphics, or it can
|
||||
|
@ -813,7 +868,7 @@ line; line 2 is underneath, and so on; columns are similarly numbered from
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">statuswin_current</span><span class="plain-syntax">=1;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. Quotation Boxes. </b>On the Z-machine, quotation boxes are produced by stretching the status line,
|
||||
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. Quotation Boxes. </b>On the Z-machine, quotation boxes are produced by stretching the status line,
|
||||
but on Glulx they usually occupy windows of their own. If it isn't possible
|
||||
to create such a window, so that <span class="extract"><span class="extract-syntax">gg_quotewin</span></span> is zero below, the quotation
|
||||
text just appears in the main window.
|
||||
|
@ -854,7 +909,7 @@ text just appears in the main window.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cs.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresscurrent">io</li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-fio.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-cs.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresscurrent">io</li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-fio.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -677,7 +677,7 @@ cases used to check the floating-point extensions to Glulx.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-str.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresscurrent">mth</li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-cs.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-stt.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresscurrent">mth</li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-cs.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -230,7 +230,7 @@ light to the Dark Room.")
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-glk.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresscurrent">str</li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-mth.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-glk.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresscurrent">str</li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-stt.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
176
docs/Architecture32Kit/S-stt.html
Normal file
176
docs/Architecture32Kit/S-stt.html
Normal file
|
@ -0,0 +1,176 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>State Template</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'State Template' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">Architecture32Kit</a></li><li><b>State Template</b></li></ul></div>
|
||||
<p class="purpose">Saving, restoring, restarting and verifying the program from within itself.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-stt.html#SP1">§1. Environment</a></li><li><a href="S-stt.html#SP2">§2. Verification</a></li><li><a href="S-stt.html#SP3">§3. Save, restore, restart</a></li><li><a href="S-stt.html#SP4">§4. Undo</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Environment. </b>The language "interpreter" here supposes that the eventual program is
|
||||
running in a VM which is being interpreted, and that may not be the case,
|
||||
but it's traditional.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_ReportOnInterpreter</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Interpreter version "</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> / </span><span class="constant-syntax">$10000</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, (</span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF00</span><span class="plain-syntax">) / </span><span class="constant-syntax">$100</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF</span><span class="plain-syntax">, </span><span class="string-syntax">" / "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"VM "</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> / </span><span class="constant-syntax">$10000</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, (</span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF00</span><span class="plain-syntax">) / </span><span class="constant-syntax">$100</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF</span><span class="plain-syntax">, </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Verification. </b>This verifies that the current story file is intact.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Verify</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">verify</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Save, restore, restart. </b>Restart does what it says: restarts the program as if it had just loaded for
|
||||
the first time.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_Save()</span></span> attempts to save the current state of the program to a file, and
|
||||
returns 0 if this fails, 1 if this succeeds, or 2 if in fact a restore has
|
||||
just succeeded. (A successful restoration should resume execution where the
|
||||
save succeeded, but we want to distinguish those cases.)
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">VM_Restore()</span></span> pretends to return <span class="extract"><span class="extract-syntax">true</span></span> or <span class="extract"><span class="extract-syntax">false</span></span> according to whether or not
|
||||
it succeeds, but in fact it can only return <span class="extract"><span class="extract-syntax">false</span></span> to indicate failure, because
|
||||
a successful restoration means that execution has transferred to <span class="extract"><span class="extract-syntax">VM_Save</span></span>
|
||||
instead.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Restore</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="constant-syntax">$01</span><span class="plain-syntax">, </span><span class="constant-syntax">$02</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="constant-syntax">$02</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">restore</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save</span><span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="identifier-syntax">fileusage_SavedGame</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fref</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">save</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == -1) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">The player actually just typed "restore". We first have to recover</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">all the Glk objects; the values in our global variables are all wrong.</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Check that the savefile was actually written - this is mostly to account for browser limits in Parchment</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">glk_fileref_does_file_exist</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Read</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_set_position</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">seekmode_End</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_get_position</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">We've confirmed the file exists and has content, which is about all we can do</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Cleanup the empty file</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_delete_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Undo. </b>These are really emulations of the Z-machine's conventions on UNDO.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restoreundo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (~~</span><span class="identifier-syntax">result_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_Save_Undo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">saveundo</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_code</span><span class="plain-syntax"> == -1) { </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax">(); </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (~~</span><span class="identifier-syntax">result_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-str.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresscurrent">stt</li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresssection"><a href="S-vnr.html">vnr</a></li><li class="progressnext"><a href="S-mth.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -79,7 +79,7 @@ and do no harm.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fio.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresscurrent">vnr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fio.html">❮</a></li><li class="progresssection"><a href="S-cpb.html">cpb</a></li><li class="progresssection"><a href="S-glk.html">glk</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-cs.html">cs</a></li><li class="progresssection"><a href="S-io.html">io</a></li><li class="progresssection"><a href="S-fio.html">fio</a></li><li class="progresscurrent">vnr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -64,6 +64,11 @@
|
|||
<spon class="sectiontitle">Startup Template</span></a> -
|
||||
<span class="sectionpurpose">How programs for this architecture start up the virtual machine.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-stt.html">
|
||||
<spon class="sectiontitle">State Template</span></a> -
|
||||
<span class="sectionpurpose">Saving, restoring, restarting and verifying the program from within itself.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-mth.html">
|
||||
<spon class="sectiontitle">Mathematics Template</span></a> -
|
||||
|
|
|
@ -159,10 +159,7 @@ buffer and then altering the first character.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">: </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">length</span><span class="plain-syntax">+</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax">: </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">-></span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">Ifnot</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">length</span><span class="plain-syntax"> > </span><span class="identifier-syntax">SHORT_NAME_BUFFER_LEN</span><span class="plain-syntax">) </span><span class="identifier-syntax">length</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SHORT_NAME_BUFFER_LEN</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">### length = glk_buffer_to_title_case_uni(StorageForShortName, SHORT_NAME_BUFFER_LEN, length, false);</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">### glk_put_buffer_uni(StorageForShortName, length);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">length</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">-->0 = </span><span class="identifier-syntax">VM_LowerToUpperCase</span><span class="plain-syntax">(</span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">-->0);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">length</span><span class="plain-syntax">) </span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">-->0 = </span><span class="identifier-syntax">VM_LowerToUpperCase</span><span class="plain-syntax">(</span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">-->0);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_put_buffer_uni</span><span class="plain-syntax">(</span><span class="identifier-syntax">StorageForShortName</span><span class="plain-syntax">, </span><span class="identifier-syntax">length</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>Actions Template</b></li></ul></div>
|
||||
<p class="purpose">To try actions by people in the model world, processing the necessary rulebooks.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-act.html#SP1">§1. Summary</a></li><li><a href="S-act.html#SP2">§2. Fake Actions</a></li><li><a href="S-act.html#SP3">§3. Action Data</a></li><li><a href="S-act.html#SP4">§4. Requirements Bitmap</a></li><li><a href="S-act.html#SP5">§5. Try Action</a></li><li><a href="S-act.html#SP6">§6. I6 Angle Brackets</a></li><li><a href="S-act.html#SP7">§7. Conversion</a></li><li><a href="S-act.html#SP8">§8. Implicit Take</a></li><li><a href="S-act.html#SP9">§9. Look After Going</a></li><li><a href="S-act.html#SP10">§10. Abbreviated Room Description</a></li><li><a href="S-act.html#SP11">§11. Begin Action</a></li><li><a href="S-act.html#SP12">§12. Action Primitive</a></li><li><a href="S-act.html#SP13">§13. Internal Rule</a></li><li><a href="S-act.html#SP14">§14. Type Safety</a></li><li><a href="S-act.html#SP15">§15. Basic Visibility Rule</a></li><li><a href="S-act.html#SP16">§16. Basic Accessibility Rule</a></li><li><a href="S-act.html#SP17">§17. Carrying Requirements Rule</a></li><li><a href="S-act.html#SP18">§18. Standard Implicit Taking Rule</a></li><li><a href="S-act.html#SP19">§19. Requested Actions Require Persuasion Rule</a></li><li><a href="S-act.html#SP20">§20. Carry Out Requested Actions Rule</a></li><li><a href="S-act.html#SP21">§21. Generic Verb Subroutine</a></li><li><a href="S-act.html#SP22">§22. Work Out Details Of Specific Action Rule</a></li><li><a href="S-act.html#SP23">§23. Actions Bitmap</a></li><li><a href="S-act.html#SP24">§24. Printing Actions</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-act.html#SP1">§1. Summary</a></li><li><a href="S-act.html#SP2">§2. Fake Actions</a></li><li><a href="S-act.html#SP3">§3. Action Data</a></li><li><a href="S-act.html#SP4">§4. Requirements Bitmap</a></li><li><a href="S-act.html#SP5">§5. Try Action</a></li><li><a href="S-act.html#SP6">§6. I6 Angle Brackets</a></li><li><a href="S-act.html#SP7">§7. Conversion</a></li><li><a href="S-act.html#SP8">§8. Implicit Take</a></li><li><a href="S-act.html#SP9">§9. Look After Going</a></li><li><a href="S-act.html#SP10">§10. Abbreviated Room Description</a></li><li><a href="S-act.html#SP11">§11. Begin Action</a></li><li><a href="S-act.html#SP12">§12. Action Primitive</a></li><li><a href="S-act.html#SP13">§13. Internal Rule</a></li><li><a href="S-act.html#SP14">§14. Type Safety</a></li><li><a href="S-act.html#SP15">§15. Basic Visibility Rule</a></li><li><a href="S-act.html#SP16">§16. Basic Accessibility Rule</a></li><li><a href="S-act.html#SP17">§17. Carrying Requirements Rule</a></li><li><a href="S-act.html#SP18">§18. Standard Implicit Taking Rule</a></li><li><a href="S-act.html#SP19">§19. Requested Actions Require Persuasion Rule</a></li><li><a href="S-act.html#SP20">§20. Carry Out Requested Actions Rule</a></li><li><a href="S-act.html#SP21">§21. Generic Verb Subroutine</a></li><li><a href="S-act.html#SP22">§22. Descend To Specific Action Rule</a></li><li><a href="S-act.html#SP23">§23. Work Out Details Of Specific Action Rule</a></li><li><a href="S-act.html#SP24">§24. Actions Bitmap</a></li><li><a href="S-act.html#SP25">§25. Printing Actions</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Summary. </b>To review: an action is an impulse to do something by a person in the model
|
||||
world. Commands such as DROP POTATO are converted into actions ("dropping
|
||||
|
@ -794,7 +794,22 @@ carry out and report rulebooks.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. Work Out Details Of Specific Action Rule. </b>This is one of the I6 primitive rules in the specific action processing
|
||||
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. Descend To Specific Action Rule. </b>There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the <span class="extract"><span class="extract-syntax">-Sub</span></span>
|
||||
routines: thus, for instance, if <span class="extract"><span class="extract-syntax">action</span></span> is <span class="extract"><span class="extract-syntax">##Wait</span></span> then <span class="extract"><span class="extract-syntax">WaitSub</span></span> is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">DESCEND_TO_SPECIFIC_ACTION_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ( </span><span class="identifier-syntax">VM_ActionFunction</span><span class="plain-syntax">(</span><span class="identifier-syntax">action</span><span class="plain-syntax">) )();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. Work Out Details Of Specific Action Rule. </b>This is one of the I6 primitive rules in the specific action processing
|
||||
rulebook, and it's basically a trick to allow information known to the
|
||||
<span class="extract"><span class="extract-syntax">GenericVerbSub</span></span> routine to be passed down as rulebook variables for the
|
||||
specific action-processing rules — in effect allowing us to pass not
|
||||
|
@ -812,7 +827,7 @@ flags, plus the three specific rulebooks needed to process the action.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. Actions Bitmap. </b>This is a fairly large bitmap recording which actions have succeeded thus
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. Actions Bitmap. </b>This is a fairly large bitmap recording which actions have succeeded thus
|
||||
far on which nouns. It was to some extent an early attempt at implementing
|
||||
a past-tense system; I'm not at all sure it was successful, since it is
|
||||
hindered by certain restrictions — it only records action/noun combinations,
|
||||
|
@ -860,7 +875,7 @@ to what the user might expect, which is unfortunate.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. Printing Actions. </b>This is really for debugging purposes, but also provides us with a way to
|
||||
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>§25. Printing Actions. </b>This is really for debugging purposes, but also provides us with a way to
|
||||
print a stored action, for instance, or to print an action name value.
|
||||
(For instance, printing an action name might result in "taking"; printing
|
||||
a whole action might produce "Henry taking the grapefruit".)
|
||||
|
@ -898,7 +913,7 @@ a whole action might produce "Henry taking the grapefruit".)
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-ord.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresscurrent">act</li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-act2.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-ord.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresscurrent">act</li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-act2.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -222,7 +222,7 @@ activity must be being run by calling the three stages individually, and
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-act.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresscurrent">act2</li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-fgr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-act.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresscurrent">act2</li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-fgr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -347,7 +347,7 @@ can it zero the turns count for another action.
|
|||
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">present_chronological_record</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_CONDS</span><span class="plain-syntax">+1);</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-tst.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresscurrent">chr</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-tst.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresscurrent">chr</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -90,7 +90,7 @@ value "figure of cover".
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-act2.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresscurrent">fgr</li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-otf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-act2.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresscurrent">fgr</li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-otf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1,272 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Glulx Template</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Glulx Template' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>Glulx Template</b></li></ul></div>
|
||||
<p class="purpose">To provide Glulx-specific actions.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-gll.html#SP1">§1. Begin Glulx-only matter</a></li><li><a href="S-gll.html#SP2">§2. GlkList Command</a></li><li><a href="S-gll.html#SP3">§3. Quit The Game Rule</a></li><li><a href="S-gll.html#SP4">§4. Restart The Game Rule</a></li><li><a href="S-gll.html#SP5">§5. Restore The Game Rule</a></li><li><a href="S-gll.html#SP6">§6. Save The Game Rule</a></li><li><a href="S-gll.html#SP7">§7. Verify The Story File Rule</a></li><li><a href="S-gll.html#SP8">§8. Switch Transcript On Rule</a></li><li><a href="S-gll.html#SP9">§9. Switch Transcript Off Rule</a></li><li><a href="S-gll.html#SP10">§10. Announce Story File Version Rule</a></li><li><a href="S-gll.html#SP11">§11. Descend To Specific Action Rule</a></li><li><a href="S-gll.html#SP12">§12. End Glulx-only matter</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Begin Glulx-only matter. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. GlkList Command. </b>GLKLIST is a testing command best used by those who understand Glulx and its
|
||||
ways: it isn't documented in the I7 manual, because it is pretty inscrutable
|
||||
for "real" users, but it's probably worth keeping just the same.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEBUG</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">GlkListSub</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">GlkDebuggingList</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="identifier-syntax">Verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">meta</span><span class="plain-syntax"> </span><span class="character-syntax">'glklist'</span>
|
||||
<span class="plain-syntax"> * -> </span><span class="identifier-syntax">GlkList</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Quit The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">QUIT_THE_GAME_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">QUIT_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">YesOrNo</span><span class="plain-syntax">()~=0) </span><span class="reserved-syntax">quit</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Restart The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">RESTART_THE_GAME_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTART_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">YesOrNo</span><span class="plain-syntax">()~=0) {</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTART_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Restore The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">RESTORE_THE_GAME_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="constant-syntax">$01</span><span class="plain-syntax">, </span><span class="constant-syntax">$02</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="constant-syntax">$02</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">restore</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">RFailed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Save The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SAVE_THE_GAME_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="identifier-syntax">fileusage_SavedGame</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fref</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Write</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">save</span><span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == -1) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">The player actually just typed "restore". We first have to recover</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">all the Glk objects; the values in our global variables are all wrong.</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">GGRecoverObjects</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Check that the savefile was actually written - this is mostly to account for browser limits in Parchment</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">glk_fileref_does_file_exist</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">, </span><span class="identifier-syntax">filemode_Read</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SAVESTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_set_position</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">seekmode_End</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_get_position</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax">, </span><span class="identifier-syntax">GLK_NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_savestr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">We've confirmed the file exists and has content, which is about all we can do</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SAVE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Cleanup the empty file</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_delete_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">fref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SAVE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Verify The Story File Rule. </b>This is a fossil now, really, but in the days of Infocom, the 110K story
|
||||
file occupying an entire disc was a huge data set: floppy discs were by no
|
||||
means a reliable medium, and cheap hardware often used hit-and-miss
|
||||
components, as on the notorious Commodore 64 disc controller. If somebody
|
||||
experienced an apparent bug in play, it could easily be that he had a
|
||||
corrupt disc or was unable to read data of that density. So the VERIFY
|
||||
command, which took up to ten minutes on some early computers, would chug
|
||||
through the entire story file and compute a checksum, compare it against a
|
||||
known result in the header, and determine that the story file could or
|
||||
could not properly be read. The Z-machine provided this service as an
|
||||
opcode, and so Glulx followed suit.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">verify</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Switch Transcript On Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">S2Failed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_fileref_create_by_prompt</span><span class="plain-syntax">(</span><span class="constant-syntax">$102</span><span class="plain-syntax">, </span><span class="constant-syntax">$05</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SCRIPTFREF_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">S1Failed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">stream_open_file</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">glk_stream_open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax">, </span><span class="constant-syntax">$05</span><span class="plain-syntax">, </span><span class="identifier-syntax">GG_SCRIPTSTR_ROCK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax">Could not open selected file; select again</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_fileref_destroy</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptfref</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">S2Failed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_window_set_echo_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_mainwin</span><span class="plain-syntax">, </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VersionSub</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">S1Failed</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Switch Transcript Off Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">glk_stream_close</span><span class="plain-syntax">(</span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="comment-syntax">stream_close</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gg_scriptstr</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Announce Story File Version Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">ANNOUNCE_STORY_FILE_VERSION_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Banner</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Inform 7 v"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PrintI6Text</span><span class="plain-syntax">) </span><span class="identifier-syntax">I7_FULL_VERSION_NUMBER</span><span class="plain-syntax">, </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UUID_ARRAY</span><span class="plain-syntax">->0 >= </span><span class="constant-syntax">6</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Identification number: "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ix</span><span class="plain-syntax">=6: </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">UUID_ARRAY</span><span class="plain-syntax">->0: </span><span class="identifier-syntax">ix</span><span class="plain-syntax">++) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">UUID_ARRAY</span><span class="plain-syntax">-></span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Interpreter version "</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> / </span><span class="constant-syntax">$10000</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, (</span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF00</span><span class="plain-syntax">) / </span><span class="constant-syntax">$100</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF</span><span class="plain-syntax">, </span><span class="string-syntax">" / "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">gestalt</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"VM "</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> / </span><span class="constant-syntax">$10000</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, (</span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF00</span><span class="plain-syntax">) / </span><span class="constant-syntax">$100</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> & </span><span class="constant-syntax">$FF</span><span class="plain-syntax">, </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ShowExtensionVersions</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Descend To Specific Action Rule. </b>There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the <span class="extract"><span class="extract-syntax">-Sub</span></span>
|
||||
routines: thus, for instance, if <span class="extract"><span class="extract-syntax">action</span></span> is <span class="extract"><span class="extract-syntax">##Wait</span></span> then <span class="extract"><span class="extract-syntax">WaitSub</span></span> is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Strangely, Glulx's action routines table is numbered in an off-by-one way
|
||||
compared to the Z-machine's: hence the <span class="extract"><span class="extract-syntax">+1</span></span>.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">DESCEND_TO_SPECIFIC_ACTION_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ( #</span><span class="identifier-syntax">actions_table</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">action</span><span class="plain-syntax">+1) )();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. End Glulx-only matter. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-msc.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresscurrent">gll</li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-zmc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -454,7 +454,7 @@ improbable.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-zmc.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresscurrent">lgh</li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-lst.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-stt.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresscurrent">lgh</li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-lst.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1148,7 +1148,7 @@ response texts used by the list-writer.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-lgh.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresscurrent">lst</li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-ord.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-lgh.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresscurrent">lst</li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-ord.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -453,7 +453,7 @@ the direction of the shortest path from there to \(R_y\).
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-wrl.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresscurrent">mpr</li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-rtp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-wrl.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresscurrent">mpr</li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-rtp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -309,7 +309,7 @@ possibility later.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">msc</li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-gll.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrent">msc</li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-stt.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -724,7 +724,7 @@ obituary" activity.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-lst.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresscurrent">ord</li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-act.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-lst.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresscurrent">ord</li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-act.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -51,22 +51,9 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>OutOfWorld Template</b></li></ul></div>
|
||||
<p class="purpose">To implement some of the out of world actions.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-otf.html#SP1">§1. Perform Undo</a></li><li><a href="S-otf.html#SP2">§2. Announce Score Rule</a></li><li><a href="S-otf.html#SP3">§3. Switch Score Notification On Rule</a></li><li><a href="S-otf.html#SP4">§4. Standard Report Switching Score Notification On Rule</a></li><li><a href="S-otf.html#SP5">§5. Switch Score Notification Off Rule</a></li><li><a href="S-otf.html#SP6">§6. Standard Report Switching Score Notification Off Rule</a></li><li><a href="S-otf.html#SP7">§7. Prefer Sometimes Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP8">§8. Standard Report Prefer Sometimes Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP9">§9. Prefer Unabbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP10">§10. Standard Report Prefer Unabbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP11">§11. Prefer Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP12">§12. Standard Report Prefer Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP13">§13. Announce Pronoun Meanings Rule</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-otf.html#SP1">§1. Announce Score Rule</a></li><li><a href="S-otf.html#SP2">§2. Switch Score Notification On Rule</a></li><li><a href="S-otf.html#SP3">§3. Standard Report Switching Score Notification On Rule</a></li><li><a href="S-otf.html#SP4">§4. Switch Score Notification Off Rule</a></li><li><a href="S-otf.html#SP5">§5. Standard Report Switching Score Notification Off Rule</a></li><li><a href="S-otf.html#SP6">§6. Prefer Sometimes Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP7">§7. Standard Report Prefer Sometimes Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP8">§8. Prefer Unabbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP9">§9. Standard Report Prefer Unabbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP10">§10. Prefer Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP11">§11. Standard Report Prefer Abbreviated Room Descriptions Rule</a></li><li><a href="S-otf.html#SP12">§12. Announce Pronoun Meanings Rule</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Perform Undo. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">Perform_Undo</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CommandParserKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">UNDO_PREVENTION_CFGF</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IterationsOfTurnSequence</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">undo_flag</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">undo_flag</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'D'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax">() == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'F'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Announce Score Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Announce Score Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">ANNOUNCE_SCORE_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -78,7 +65,7 @@
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Switch Score Notification On Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Switch Score Notification On Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_SCORE_NOTIFY_ON_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -87,7 +74,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">notify_mode</span><span class="plain-syntax">=1;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Standard Report Switching Score Notification On Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Standard Report Switching Score Notification On Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REP_SWITCH_NOTIFY_ON_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -97,7 +84,7 @@
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Switch Score Notification Off Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Switch Score Notification Off Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_SCORE_NOTIFY_OFF_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -106,7 +93,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">notify_mode</span><span class="plain-syntax">=0;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Standard Report Switching Score Notification Off Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Standard Report Switching Score Notification Off Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REP_SWITCH_NOTIFY_OFF_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -116,7 +103,7 @@
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Prefer Sometimes Abbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Prefer Sometimes Abbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">PREFER_SOMETIMES_ABBREVIATED_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -124,7 +111,7 @@
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">lookmode</span><span class="plain-syntax">=1;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Brief</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Standard Report Prefer Sometimes Abbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Standard Report Prefer Sometimes Abbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REP_PREFER_SOMETIMES_ABBR_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -132,7 +119,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEXT_TY_Say</span><span class="plain-syntax">) </span><span class="identifier-syntax">Story</span><span class="plain-syntax">; </span><span class="identifier-syntax">REP_PREFER_SOMETIMES_ABBR_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Brief</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Prefer Unabbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Prefer Unabbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">PREFER_UNABBREVIATED_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -140,7 +127,7 @@
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">lookmode</span><span class="plain-syntax">=2;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Verbose</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Standard Report Prefer Unabbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Standard Report Prefer Unabbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REP_PREFER_UNABBREVIATED_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -148,7 +135,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEXT_TY_Say</span><span class="plain-syntax">) </span><span class="identifier-syntax">Story</span><span class="plain-syntax">; </span><span class="identifier-syntax">REP_PREFER_UNABBREVIATED_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Verbose</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Prefer Abbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Prefer Abbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">PREFER_ABBREVIATED_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -156,7 +143,7 @@
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">lookmode</span><span class="plain-syntax">=3;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Superbrief</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Standard Report Prefer Abbreviated Room Descriptions Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Standard Report Prefer Abbreviated Room Descriptions Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">REP_PREFER_ABBREVIATED_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -164,7 +151,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEXT_TY_Say</span><span class="plain-syntax">) </span><span class="identifier-syntax">Story</span><span class="plain-syntax">; </span><span class="identifier-syntax">REP_PREFER_ABBREVIATED_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">]; </span><span class="comment-syntax">Superbrief</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. Announce Pronoun Meanings Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Announce Pronoun Meanings Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">ANNOUNCE_PRONOUN_MEANINGS_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax"> </span><span class="identifier-syntax">y</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">;</span>
|
||||
|
@ -197,7 +184,7 @@
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fgr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresscurrent">otf</li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-prn.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-fgr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresscurrent">otf</li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-prn.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -500,7 +500,7 @@ is the default "for" rule for that activity:
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-otf.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresscurrent">prn</li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-wrl.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-otf.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresscurrent">prn</li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-wrl.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -135,7 +135,7 @@
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mpr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresscurrent">rtp</li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-tm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-mpr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresscurrent">rtp</li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-tm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -436,7 +436,7 @@ either silently or not.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-chr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresscurrent">str</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-chr.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresscurrent">str</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>ZMachine Template</title>
|
||||
<title>State Template</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
|
@ -46,19 +46,14 @@
|
|||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'ZMachine Template' generated by Inweb-->
|
||||
<!--Weave of 'State Template' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>ZMachine Template</b></li></ul></div>
|
||||
<p class="purpose">To provide Z-specific actions.</p>
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>State Template</b></li></ul></div>
|
||||
<p class="purpose">To implement out of world actions relating to the program state.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-zmc.html#SP1">§1. Begin Z-only matter</a></li><li><a href="S-zmc.html#SP2">§2. Quit The Game Rule</a></li><li><a href="S-zmc.html#SP3">§3. Restart The Game Rule</a></li><li><a href="S-zmc.html#SP4">§4. Restore The Game Rule</a></li><li><a href="S-zmc.html#SP5">§5. Save The Game Rule</a></li><li><a href="S-zmc.html#SP6">§6. Verify The Story File Rule</a></li><li><a href="S-zmc.html#SP7">§7. Switch Transcript On Rule</a></li><li><a href="S-zmc.html#SP8">§8. Switch Transcript Off Rule</a></li><li><a href="S-zmc.html#SP9">§9. Announce Story File Version Rule</a></li><li><a href="S-zmc.html#SP10">§10. Descend To Specific Action Rule</a></li><li><a href="S-zmc.html#SP11">§11. End Z-only matter</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-stt.html#SP1">§1. Quit The Game Rule</a></li><li><a href="S-stt.html#SP2">§2. Restart The Game Rule</a></li><li><a href="S-stt.html#SP3">§3. Restore The Game Rule</a></li><li><a href="S-stt.html#SP4">§4. Save The Game Rule</a></li><li><a href="S-stt.html#SP5">§5. Perform Undo</a></li><li><a href="S-stt.html#SP6">§6. Verify The Story File Rule</a></li><li><a href="S-stt.html#SP7">§7. Switch Transcript On Rule</a></li><li><a href="S-stt.html#SP8">§8. Switch Transcript Off Rule</a></li><li><a href="S-stt.html#SP9">§9. Announce Story File Version Rule</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Begin Z-only matter. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_ZCODE</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Quit The Game Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Quit The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">QUIT_THE_GAME_R</span><span class="plain-syntax">;</span>
|
||||
|
@ -67,42 +62,55 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">YesOrNo</span><span class="plain-syntax">()~=0) </span><span class="reserved-syntax">quit</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Restart The Game Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Restart The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">RESTART_THE_GAME_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTART_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">YesOrNo</span><span class="plain-syntax">()~=0) {</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">restart</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_Restart</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTART_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Restore The Game Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Restore The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">RESTORE_THE_GAME_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">restore</span><span class="plain-syntax"> </span><span class="identifier-syntax">RMaybe</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">RMaybe</span><span class="plain-syntax">; </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_Restore</span><span class="plain-syntax">()) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Save The Game Rule. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Save The Game Rule. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SAVE_THE_GAME_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="reserved-syntax">save</span><span class="plain-syntax"> -> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">flag</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_Save</span><span class="plain-syntax">()) {</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">SAVE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">SAVE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">RESTORE_THE_GAME_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Perform Undo. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">Perform_Undo</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CommandParserKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">UNDO_PREVENTION_CFGF</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IterationsOfTurnSequence</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">undo_flag</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">undo_flag</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'D'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_Undo</span><span class="plain-syntax">() == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">IMMEDIATELY_UNDO_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'F'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Verify The Story File Rule. </b>This is a fossil now, really, but in the days of Infocom, the 110K story
|
||||
file occupying an entire disc was a huge data set: floppy discs were by no
|
||||
means a reliable medium, and cheap hardware often used hit-and-miss
|
||||
|
@ -112,18 +120,14 @@ corrupt disc or was unable to read data of that density. So the VERIFY
|
|||
command, which took up to ten minutes on some early computers, would chug
|
||||
through the entire story file and compute a checksum, compare it against a
|
||||
known result in the header, and determine that the story file could or
|
||||
could not properly be read. The Z-machine provided this service as an
|
||||
opcode, and so Glulx followed suit.
|
||||
could not properly be read.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">verify</span><span class="plain-syntax"> ?</span><span class="identifier-syntax">Vmaybe</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">Vwrong</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">Vmaybe</span><span class="plain-syntax">; </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">Vwrong</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_Verify</span><span class="plain-syntax">()) { </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">VERIFY_THE_STORY_FILE_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Switch Transcript On Rule. </b></p>
|
||||
|
@ -131,12 +135,9 @@ opcode, and so Glulx followed suit.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> = ((0-->8) & </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">output_stream</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((0-->8) & </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">()) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_TranscriptOn</span><span class="plain-syntax">() == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="identifier-syntax">VersionSub</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Switch Transcript Off Rule. </b></p>
|
||||
|
@ -144,12 +145,9 @@ opcode, and so Glulx followed suit.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actor</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">player</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> = ((0-->8) & </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_TranscriptIsOn</span><span class="plain-syntax">() == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">output_stream</span><span class="plain-syntax"> -2;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((0-->8) & </span><span class="constant-syntax">1</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">transcript_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VM_TranscriptOff</span><span class="plain-syntax">() == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) { </span><span class="identifier-syntax">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Announce Story File Version Rule. </b></p>
|
||||
|
@ -164,48 +162,13 @@ opcode, and so Glulx followed suit.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ix</span><span class="plain-syntax">=6: </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">UUID_ARRAY</span><span class="plain-syntax">->0: </span><span class="identifier-syntax">ix</span><span class="plain-syntax">++) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">UUID_ARRAY</span><span class="plain-syntax">-></span><span class="identifier-syntax">ix</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ix</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">shut up compiler warning</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Standard interpreter "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax">/256, </span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="identifier-syntax">standard_interpreter</span><span class="plain-syntax">%256,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">" ("</span><span class="plain-syntax">, </span><span class="identifier-syntax">HDR_TERPNUMBER</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">HDR_TERPVERSION</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">")^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"Interpreter "</span><span class="plain-syntax">, </span><span class="identifier-syntax">HDR_TERPNUMBER</span><span class="plain-syntax">->0, </span><span class="string-syntax">" Version "</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">HDR_TERPVERSION</span><span class="plain-syntax">->0;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"^"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VM_ReportOnInterpreter</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ShowExtensionVersions</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Descend To Specific Action Rule. </b>There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the <span class="extract"><span class="extract-syntax">-Sub</span></span>
|
||||
routines: thus, for instance, if <span class="extract"><span class="extract-syntax">action</span></span> is <span class="extract"><span class="extract-syntax">##Wait</span></span> then <span class="extract"><span class="extract-syntax">WaitSub</span></span> is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Strangely, Glulx's action routines table is numbered in an off-by-one way
|
||||
compared to the Z-machine's: hence the <span class="extract"><span class="extract-syntax">+1</span></span>.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">DESCEND_TO_SPECIFIC_ACTION_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ( #</span><span class="identifier-syntax">actions_table</span><span class="plain-syntax">--></span><span class="identifier-syntax">action</span><span class="plain-syntax"> )();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. End Z-only matter. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">; </span><span class="comment-syntax">TARGET_ZCODE</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-gll.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresscurrent">zmc</li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-lgh.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-msc.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresscurrent">stt</li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-lgh.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -280,7 +280,7 @@ only absolute times; we need the following for relative ones.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-rtp.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresscurrent">tm</li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-tst.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-rtp.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresscurrent">tm</li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-tst.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>Tests Template</b></li></ul></div>
|
||||
<p class="purpose">The command grammar and I6 implementation for testing commands such as TEST, ACTIONS and PURLOIN.</p>
|
||||
|
||||
<ul class="toc"><li><a href="S-tst.html#SP1">§1. All testy</a></li><li><a href="S-tst.html#SP2">§2. Abstract Command</a></li><li><a href="S-tst.html#SP3">§3. Actions Command</a></li><li><a href="S-tst.html#SP4">§4. Gonear Command</a></li><li><a href="S-tst.html#SP5">§5. Purloin Command</a></li><li><a href="S-tst.html#SP6">§6. Random Command</a></li><li><a href="S-tst.html#SP7">§7. Relations Command</a></li><li><a href="S-tst.html#SP8">§8. Responses Command</a></li><li><a href="S-tst.html#SP9">§9. Rules Command</a></li><li><a href="S-tst.html#SP10">§10. Dialogue Command</a></li><li><a href="S-tst.html#SP11">§11. Scenes Command</a></li><li><a href="S-tst.html#SP12">§12. Scope Command</a></li><li><a href="S-tst.html#SP13">§13. Showheap Command</a></li><li><a href="S-tst.html#SP14">§14. ShowMe Command</a></li><li><a href="S-tst.html#SP15">§15. Showverb Command</a></li><li><a href="S-tst.html#SP16">§16. Test Command</a></li><li><a href="S-tst.html#SP17">§17. Trace Command</a></li><li><a href="S-tst.html#SP18">§18. Tree Command</a></li><li><a href="S-tst.html#SP19">§19. Grammar</a></li><li><a href="S-tst.html#SP20">§20. End testy</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="S-tst.html#SP1">§1. All testy</a></li><li><a href="S-tst.html#SP2">§2. Abstract Command</a></li><li><a href="S-tst.html#SP3">§3. Actions Command</a></li><li><a href="S-tst.html#SP4">§4. Gonear Command</a></li><li><a href="S-tst.html#SP5">§5. Purloin Command</a></li><li><a href="S-tst.html#SP6">§6. Random Command</a></li><li><a href="S-tst.html#SP7">§7. Relations Command</a></li><li><a href="S-tst.html#SP8">§8. Responses Command</a></li><li><a href="S-tst.html#SP9">§9. Rules Command</a></li><li><a href="S-tst.html#SP10">§10. Dialogue Command</a></li><li><a href="S-tst.html#SP11">§11. Scenes Command</a></li><li><a href="S-tst.html#SP12">§12. Scope Command</a></li><li><a href="S-tst.html#SP13">§13. Showheap Command</a></li><li><a href="S-tst.html#SP14">§14. ShowMe Command</a></li><li><a href="S-tst.html#SP15">§15. Showverb Command</a></li><li><a href="S-tst.html#SP16">§16. Test Command</a></li><li><a href="S-tst.html#SP17">§17. Trace Command</a></li><li><a href="S-tst.html#SP18">§18. Tree Command</a></li><li><a href="S-tst.html#SP19">§19. GlkList Command</a></li><li><a href="S-tst.html#SP20">§20. Grammar</a></li><li><a href="S-tst.html#SP21">§21. End testy</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. All testy. </b></p>
|
||||
|
||||
|
@ -558,7 +558,19 @@ in I7 terms. It should arguably be withdrawn, but doesn't seem to do any harm.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WriteListFrom</span><span class="plain-syntax">(</span><span class="reserved-syntax">child</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">), </span><span class="identifier-syntax">NEWLINE_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">INDENT_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">ALWAYS_BIT</span><span class="plain-syntax">+</span><span class="identifier-syntax">FULLINV_BIT</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. Grammar. </b>In the old I6 parser, testing commands had their own scope hardwired in to the
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. GlkList Command. </b>GLKLIST is a testing command best used by those who understand Glulx and its
|
||||
ways: it isn't documented in the I7 manual, because it is pretty inscrutable
|
||||
for "real" users, but it's probably worth keeping just the same.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">GlkListSub</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">GlkDebuggingList</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. Grammar. </b>In the old I6 parser, testing commands had their own scope hardwired in to the
|
||||
code: this worked by comparing the verb command word directly against <span class="extract"><span class="extract-syntax">'scope'</span></span>
|
||||
and the like. That would go wrong if the testing commands were translated into
|
||||
other languages, and was a crude design at best. The following scope token is
|
||||
|
@ -632,14 +644,18 @@ not picked up) and able to accept multiple objects.
|
|||
<span class="identifier-syntax">Verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">meta</span><span class="plain-syntax"> </span><span class="character-syntax">'tree'</span>
|
||||
<span class="plain-syntax"> * -> </span><span class="identifier-syntax">XTree</span>
|
||||
<span class="plain-syntax"> * </span><span class="identifier-syntax">scope</span><span class="plain-syntax">=</span><span class="identifier-syntax">testcommandnoun</span><span class="plain-syntax"> -> </span><span class="identifier-syntax">XTree</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">Verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">meta</span><span class="plain-syntax"> </span><span class="character-syntax">'glklist'</span>
|
||||
<span class="plain-syntax"> * -> </span><span class="identifier-syntax">GlkList</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. End testy. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. End testy. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-tm.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresscurrent">tst</li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-chr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-tm.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresscurrent">tst</li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-chr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1015,7 +1015,7 @@ which cannot be asserted true or false.
|
|||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-prn.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresscurrent">wrl</li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-mpr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="S-prn.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresscurrent">wrl</li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-mpr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -55,14 +55,9 @@
|
|||
<span class="sectionpurpose"></span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-gll.html">
|
||||
<spon class="sectiontitle">Glulx Template</span></a> -
|
||||
<span class="sectionpurpose">To provide Glulx-specific actions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-zmc.html">
|
||||
<spon class="sectiontitle">ZMachine Template</span></a> -
|
||||
<span class="sectionpurpose">To provide Z-specific actions.</span></p>
|
||||
<p class="chapterentry"><a href="S-stt.html">
|
||||
<spon class="sectiontitle">State Template</span></a> -
|
||||
<span class="sectionpurpose">To implement out of world actions relating to the program state.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a href="S-lgh.html">
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
Total memory consumption was 137315K = 134 MB
|
||||
Total memory consumption was 137388K = 134 MB
|
||||
|
||||
---- was used for 2100591 objects, in 372222 frames in 0 x 800K = 0K = 0 MB:
|
||||
---- was used for 2101258 objects, in 372295 frames in 0 x 800K = 0K = 0 MB:
|
||||
|
||||
30.2% inter_tree_node_array 59 x 8192 = 483328 objects, 42534752 bytes
|
||||
19.2% text_stream_array 4811 x 100 = 481100 objects, 27095552 bytes
|
||||
17.8% linked_list 44815 objects, 25096400 bytes
|
||||
19.2% text_stream_array 4816 x 100 = 481600 objects, 27123712 bytes
|
||||
17.8% linked_list 44827 objects, 25103120 bytes
|
||||
10.1% inter_symbol_array 134 x 1024 = 137216 objects, 14274752 bytes
|
||||
9.7% inter_error_stash_array 105 x 1024 = 107520 objects, 13765920 bytes
|
||||
7.5% parse_node 133417 objects, 10673360 bytes
|
||||
5.4% verb_conjugation 164 objects, 7610912 bytes
|
||||
4.0% parse_node_annotation_array 356 x 500 = 178000 objects, 5707392 bytes
|
||||
2.7% scan_directory 922 objects, 3806016 bytes
|
||||
2.7% scan_directory 923 objects, 3810144 bytes
|
||||
2.5% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes
|
||||
2.2% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
|
||||
1.9% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
|
||||
|
@ -18,11 +18,11 @@ Total memory consumption was 137315K = 134 MB
|
|||
1.4% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
|
||||
1.3% package_request 21234 objects, 1868592 bytes
|
||||
1.3% vocabulary_entry_array 164 x 100 = 16400 objects, 1842048 bytes
|
||||
1.1% dict_entry_array 481 x 100 = 48100 objects, 1554592 bytes
|
||||
1.1% dict_entry_array 482 x 100 = 48200 objects, 1557824 bytes
|
||||
1.0% inter_symbols_table 26729 objects, 1496824 bytes
|
||||
1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
|
||||
1.0% inter_symbols_table 26711 objects, 1495816 bytes
|
||||
1.0% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes
|
||||
0.9% inter_package 26711 objects, 1282128 bytes
|
||||
0.9% inter_package 26729 objects, 1282992 bytes
|
||||
0.8% map_data 672 objects, 1128960 bytes
|
||||
0.7% id_body 955 objects, 1092520 bytes
|
||||
0.7% adjective_meaning 208 objects, 1030016 bytes
|
||||
|
@ -36,13 +36,13 @@ Total memory consumption was 137315K = 134 MB
|
|||
0.3% local_variable_array 48 x 100 = 4800 objects, 462336 bytes
|
||||
0.2% verb_usage 1148 objects, 394912 bytes
|
||||
0.2% rule 472 objects, 370048 bytes
|
||||
0.2% dictionary 7689 objects, 369072 bytes
|
||||
0.2% dictionary 7693 objects, 369264 bytes
|
||||
0.2% verb_form 388 objects, 350752 bytes
|
||||
0.2% noun 2388 objects, 286560 bytes
|
||||
0.1% compilation_subtask 3369 objects, 269520 bytes
|
||||
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
|
||||
0.1% inference_subject 667 objects, 261464 bytes
|
||||
0.1% vanilla_function 3744 objects, 239616 bytes
|
||||
0.1% vanilla_function 3753 objects, 240192 bytes
|
||||
0.1% binary_predicate 326 objects, 172128 bytes
|
||||
0.1% hierarchy_location 1179 objects, 169776 bytes
|
||||
0.1% linguistic_stock_item 3331 objects, 159888 bytes
|
||||
|
@ -93,16 +93,16 @@ Total memory consumption was 137315K = 134 MB
|
|||
---- verb_sense 407 objects, 29304 bytes
|
||||
---- parse_node_tree 33 objects, 28776 bytes
|
||||
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
|
||||
---- filename 634 objects, 25360 bytes
|
||||
---- filename 635 objects, 25400 bytes
|
||||
---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes
|
||||
---- property 146 objects, 22192 bytes
|
||||
---- backdrops_data 672 objects, 21504 bytes
|
||||
---- pathname 526 objects, 21040 bytes
|
||||
---- pathname 527 objects, 21080 bytes
|
||||
---- inter_node_list 646 objects, 20672 bytes
|
||||
---- nonlocal_variable 94 objects, 20304 bytes
|
||||
---- pipeline_step 15 objects, 20280 bytes
|
||||
---- build_vertex 169 objects, 20280 bytes
|
||||
---- action_name 90 objects, 20160 bytes
|
||||
---- build_vertex 168 objects, 20160 bytes
|
||||
---- timed_rules_rfd_data 403 objects, 19344 bytes
|
||||
---- method 395 objects, 18960 bytes
|
||||
---- pcalc_prop_deferral 86 objects, 17888 bytes
|
||||
|
@ -131,10 +131,10 @@ Total memory consumption was 137315K = 134 MB
|
|||
---- hierarchy_attachment_point 78 objects, 6864 bytes
|
||||
---- inform_extension 32 objects, 6656 bytes
|
||||
---- text_literal_holder 163 objects, 6520 bytes
|
||||
---- section_md 61 objects, 5856 bytes
|
||||
---- section_md 62 objects, 5952 bytes
|
||||
---- parsed_use_option_setting 79 objects, 5688 bytes
|
||||
---- compatibility_specification 114 objects, 5472 bytes
|
||||
---- build_script 168 objects, 5376 bytes
|
||||
---- build_script 169 objects, 5408 bytes
|
||||
---- explicit_action_array 1 x 100 objects, 4832 bytes
|
||||
---- activity 35 objects, 4760 bytes
|
||||
---- value_property_data 84 objects, 4704 bytes
|
||||
|
@ -251,15 +251,15 @@ Total memory consumption was 137315K = 134 MB
|
|||
|
||||
100.0% was used for memory not allocated for objects:
|
||||
|
||||
61.8% text stream storage 87006012 bytes in 504091 claims
|
||||
3.8% dictionary storage 5361152 bytes in 7689 claims
|
||||
61.8% text stream storage 87060500 bytes in 504665 claims
|
||||
3.8% dictionary storage 5379072 bytes in 7693 claims
|
||||
---- sorting 2792 bytes in 403 claims
|
||||
5.1% source text 7200000 bytes in 3 claims
|
||||
7.6% source text details 10800000 bytes in 2 claims
|
||||
0.1% documentation fragments 262144 bytes in 1 claim
|
||||
---- linguistic stock array 81920 bytes in 2 claims
|
||||
---- small word set array 105600 bytes in 22 claims
|
||||
3.2% inter symbols storage 4587584 bytes in 28086 claims
|
||||
3.2% inter symbols storage 4589888 bytes in 28104 claims
|
||||
11.9% inter bytecode storage 16761584 bytes in 15 claims
|
||||
4.4% inter links storage 6222976 bytes in 11 claims
|
||||
0.1% inter tree location list storage 191232 bytes in 32 claims
|
||||
|
@ -269,5 +269,5 @@ Total memory consumption was 137315K = 134 MB
|
|||
---- code generation workspace for objects 3480 bytes in 19 claims
|
||||
0.1% emitter array storage 280672 bytes in 2002 claims
|
||||
|
||||
-136.-7% was overhead - -192290816 bytes = -187784K = -183 MB
|
||||
-136.-7% was overhead - -192336024 bytes = -187828K = -183 MB
|
||||
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
100.0% in inform7 run
|
||||
68.8% in compilation to Inter
|
||||
48.8% in //Sequence::undertake_queued_tasks//
|
||||
69.7% in compilation to Inter
|
||||
49.3% in //Sequence::undertake_queued_tasks//
|
||||
4.8% in //MajorNodes::pre_pass//
|
||||
3.2% in //MajorNodes::pass_1//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.4% in //RTKindConstructors::compile//
|
||||
1.4% in //RTPhrasebook::compile_entries//
|
||||
1.0% in //Sequence::lint_inter//
|
||||
0.6% in //ImperativeDefinitions::compile_first_block//
|
||||
0.6% in //World::stage_V//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.2% in //CompletionModule::compile//
|
||||
0.2% in //InferenceSubjects::emit_all//
|
||||
0.2% in //RTKindConstructors::compile_permissions//
|
||||
0.2% in //Task::make_built_in_kind_constructors//
|
||||
3.2% not specifically accounted for
|
||||
27.8% in running Inter pipeline
|
||||
11.8% in step 14/15: generate inform6 -> auto.inf
|
||||
6.0% in step 5/15: load-binary-kits
|
||||
1.7% in //ImperativeDefinitions::assess_all//
|
||||
1.5% in //RTPhrasebook::compile_entries//
|
||||
1.3% in //RTKindConstructors::compile//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.5% in //ImperativeDefinitions::compile_first_block//
|
||||
0.5% in //MajorNodes::pass_2//
|
||||
0.5% in //Sequence::undertake_queued_tasks//
|
||||
0.5% in //Sequence::undertake_queued_tasks//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //InferenceSubjects::emit_all//
|
||||
0.1% in //CompletionModule::compile//
|
||||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
2.7% not specifically accounted for
|
||||
26.7% in running Inter pipeline
|
||||
11.1% in step 14/15: generate inform6 -> auto.inf
|
||||
5.7% in step 5/15: load-binary-kits
|
||||
5.2% in step 6/15: make-synoptic-module
|
||||
1.8% in step 9/15: make-identifiers-unique
|
||||
0.4% in step 12/15: eliminate-redundant-operations
|
||||
0.4% in step 4/15: compile-splats
|
||||
0.4% in step 7/15: shorten-wiring
|
||||
0.4% in step 8/15: detect-indirect-calls
|
||||
0.2% in step 11/15: eliminate-redundant-labels
|
||||
1.2% not specifically accounted for
|
||||
3.0% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
1.7% in step 9/15: make-identifiers-unique
|
||||
0.3% in step 12/15: eliminate-redundant-operations
|
||||
0.3% in step 4/15: compile-splats
|
||||
0.3% in step 7/15: shorten-wiring
|
||||
0.3% in step 8/15: detect-indirect-calls
|
||||
0.1% in step 11/15: eliminate-redundant-labels
|
||||
1.1% not specifically accounted for
|
||||
2.8% in supervisor
|
||||
0.6% not specifically accounted for
|
||||
|
|
|
@ -8,6 +8,7 @@ Web Syntax Version: 2
|
|||
Sections
|
||||
Capabilities
|
||||
Startup
|
||||
State
|
||||
Mathematics
|
||||
Character Set
|
||||
Input Output
|
||||
|
|
|
@ -136,17 +136,3 @@ Glulx are indistinguishable here.
|
|||
HEADER_VMSTY, SUBHEADER_VMSTY, ALERT_VMSTY: style bold;
|
||||
}
|
||||
];
|
||||
|
||||
@h Undo.
|
||||
These simply wrap the relevant opcodes.
|
||||
|
||||
=
|
||||
[ VM_Undo result_code;
|
||||
@restore_undo result_code;
|
||||
return result_code;
|
||||
];
|
||||
|
||||
[ VM_Save_Undo result_code;
|
||||
@save_undo result_code;
|
||||
return result_code;
|
||||
];
|
||||
|
|
|
@ -2,6 +2,31 @@ Input Output Template.
|
|||
|
||||
Access to the keyboard and to textual windows.
|
||||
|
||||
@h Transcript support.
|
||||
This is a mode in which the transcript of text in the main window is being
|
||||
written out to an external file.
|
||||
|
||||
|VM_TranscriptIsOn| tests whether this mode is on. |VM_TranscriptOn| should
|
||||
be called only if it is off, and tries to turn it on, returning |true| or |false|
|
||||
according to whether or not it succeeds. |VM_TranscriptOff| should be called
|
||||
only if scripting is on.
|
||||
|
||||
=
|
||||
[ VM_TranscriptIsOn;
|
||||
return ((HDR_GAMEFLAGS-->0) & 1);
|
||||
];
|
||||
|
||||
[ VM_TranscriptOn;
|
||||
@output_stream 2;
|
||||
return VM_TranscriptIsOn();
|
||||
];
|
||||
|
||||
[ VM_TranscriptOff;
|
||||
@output_stream -2;
|
||||
if (VM_TranscriptIsOn()) rfalse;
|
||||
rtrue;
|
||||
];
|
||||
|
||||
@h Variables and Arrays.
|
||||
|
||||
=
|
||||
|
@ -9,7 +34,6 @@ Constant #dict_par1 = 6;
|
|||
Constant #dict_par2 = 7;
|
||||
|
||||
Global xcommsdir; ! true if command recording is on
|
||||
Global transcript_mode; ! true if game scripting is on
|
||||
|
||||
Constant INPUT_BUFFER_LEN = 120; ! Length of buffer array
|
||||
|
||||
|
@ -187,6 +211,15 @@ routine was added to concentrate lookups of this field in one place.
|
|||
return $ff-(dword->#dict_par2);
|
||||
];
|
||||
|
||||
@h Action functions.
|
||||
This looks up the address of a function like |TakeSub| from the table of
|
||||
"action subroutines".
|
||||
|
||||
=
|
||||
[ VM_ActionFunction act;
|
||||
return #actions_table-->act;
|
||||
];
|
||||
|
||||
@h The Screen.
|
||||
Our generic screen model is that the screen is made up of windows: we tend
|
||||
to refer only to two of these, the main window and the status line, but
|
||||
|
|
|
@ -11,7 +11,6 @@ activity runs; and then |VM_Initialise()| is called.
|
|||
|
||||
[ VM_Initialise i;
|
||||
standard_interpreter = HDR_TERPSTANDARD-->0;
|
||||
transcript_mode = ((HDR_GAMEFLAGS-->0) & 1);
|
||||
|
||||
dict_start = HDR_DICTIONARY-->0;
|
||||
dict_entry_size = dict_start->(dict_start->0 + 1);
|
||||
|
|
76
inform7/Internal/Inter/Architecture16Kit/Sections/State.i6t
Normal file
76
inform7/Internal/Inter/Architecture16Kit/Sections/State.i6t
Normal file
|
@ -0,0 +1,76 @@
|
|||
State Template.
|
||||
|
||||
Saving, restoring, restarting and verifying the program from within itself.
|
||||
|
||||
@h Environment.
|
||||
The language "interpreter" here supposes that the eventual program is
|
||||
running in a VM which is being interpreted, and that may not be the case,
|
||||
but it's traditional.
|
||||
|
||||
=
|
||||
[ VM_ReportOnInterpreter;
|
||||
if (standard_interpreter > 0) {
|
||||
print "Standard interpreter ",
|
||||
standard_interpreter/256, ".", standard_interpreter%256,
|
||||
" (", HDR_TERPNUMBER->0;
|
||||
print (char) HDR_TERPVERSION->0;
|
||||
print ")^";
|
||||
} else {
|
||||
print "Interpreter ", HDR_TERPNUMBER->0, " Version ";
|
||||
print (char) HDR_TERPVERSION->0;
|
||||
print "^";
|
||||
}
|
||||
];
|
||||
|
||||
@h Verification.
|
||||
This verifies that the current story file is intact.
|
||||
|
||||
=
|
||||
[ VM_Verify;
|
||||
@verify ?Vmaybe;
|
||||
rfalse;
|
||||
.Vmaybe; rtrue;
|
||||
];
|
||||
|
||||
@h Save, restore, restart.
|
||||
Restart does what it says: restarts the program as if it had just loaded for
|
||||
the first time.
|
||||
|
||||
|VM_Save()| attempts to save the current state of the program to a file, and
|
||||
returns 0 if this fails, 1 if this succeeds, or 2 if in fact a restore has
|
||||
just succeeded. (A successful restoration should resume execution where the
|
||||
save succeeded, but we want to distinguish those cases.)
|
||||
|
||||
|VM_Restore()| pretends to return |true| or |false| according to whether or not
|
||||
it succeeds, but in fact it can only return |false| to indicate failure, because
|
||||
a successful restoration means that execution has transferred to |VM_Save|
|
||||
instead.
|
||||
|
||||
=
|
||||
[ VM_Restart;
|
||||
@restart;
|
||||
];
|
||||
|
||||
[ VM_Restore;
|
||||
restore RMaybe; rfalse;
|
||||
.RMaybe; rtrue;
|
||||
];
|
||||
|
||||
[ VM_Save flag;
|
||||
@save -> flag;
|
||||
return flag;
|
||||
];
|
||||
|
||||
@h Undo.
|
||||
These also simply wrap the relevant opcodes.
|
||||
|
||||
=
|
||||
[ VM_Undo result_code;
|
||||
@restore_undo result_code;
|
||||
return result_code;
|
||||
];
|
||||
|
||||
[ VM_Save_Undo result_code;
|
||||
@save_undo result_code;
|
||||
return result_code;
|
||||
];
|
|
@ -9,6 +9,7 @@ Sections
|
|||
Capabilities
|
||||
Glk
|
||||
Startup
|
||||
State
|
||||
Mathematics
|
||||
Character Set
|
||||
Input Output
|
||||
|
|
|
@ -139,18 +139,3 @@ not the place to discuss whether that was a wise decision for Glk to take.)
|
|||
INPUT_VMSTY: glk_set_style(style_Input);
|
||||
}
|
||||
];
|
||||
|
||||
@h Undo.
|
||||
These are really emulations of the Z-machine's conventions on UNDO.
|
||||
|
||||
=
|
||||
[ VM_Undo result_code;
|
||||
@restoreundo result_code;
|
||||
return (~~result_code);
|
||||
];
|
||||
|
||||
[ VM_Save_Undo result_code;
|
||||
@saveundo result_code;
|
||||
if (result_code == -1) { GGRecoverObjects(); return 2; }
|
||||
return (~~result_code);
|
||||
];
|
||||
|
|
|
@ -2,36 +2,6 @@ Input Output Template.
|
|||
|
||||
Access to the keyboard and to textual windows.
|
||||
|
||||
@h Variables and Arrays.
|
||||
|
||||
=
|
||||
Constant DICT_ENTRY_BYTES = 12+DICT_WORD_SIZE*WORDSIZE;
|
||||
Constant #dict_par1 = DICT_WORD_SIZE*WORDSIZE+4+1;
|
||||
Constant #dict_par2 = DICT_WORD_SIZE*WORDSIZE+4+3;
|
||||
|
||||
Array gg_event --> 4;
|
||||
Array gg_arguments buffer 28;
|
||||
Global gg_mainwin = 0;
|
||||
Global gg_statuswin = 0;
|
||||
Global gg_quotewin = 0;
|
||||
Global gg_scriptfref = 0;
|
||||
Global gg_scriptstr = 0;
|
||||
Global gg_savestr = 0;
|
||||
Global gg_commandstr = 0;
|
||||
Global gg_command_reading = 0; ! true if gg_commandstr is being replayed
|
||||
Global gg_foregroundchan = 0;
|
||||
Global gg_backgroundchan = 0;
|
||||
|
||||
Constant INPUT_BUFFER_LEN = 260; ! No extra byte necessary
|
||||
Constant MAX_BUFFER_WORDS = 20;
|
||||
Constant PARSE_BUFFER_LEN = 61;
|
||||
|
||||
Array buffer --> INPUT_BUFFER_LEN;
|
||||
Array buffer2 --> INPUT_BUFFER_LEN;
|
||||
Array buffer3 --> INPUT_BUFFER_LEN;
|
||||
Array parse --> PARSE_BUFFER_LEN;
|
||||
Array parse2 --> PARSE_BUFFER_LEN;
|
||||
|
||||
@h Rocks.
|
||||
These are unique ID codes used to mark resources; think of them as inedible
|
||||
cookies.
|
||||
|
@ -48,6 +18,77 @@ Constant GG_SCRIPTFREF_ROCK 401;
|
|||
Constant GG_FOREGROUNDCHAN_ROCK 410;
|
||||
Constant GG_BACKGROUNDCHAN_ROCK 411;
|
||||
|
||||
@h Transcript support.
|
||||
This is a mode in which the transcript of text in the main window is being
|
||||
written out to an external file.
|
||||
|
||||
|VM_TranscriptIsOn| tests whether this mode is on. |VM_TranscriptOn| should
|
||||
be called only if it is off, and tries to turn it on, returning |true| or |false|
|
||||
according to whether or not it succeeds. |VM_TranscriptOff| should be called
|
||||
only if scripting is on: this always succeeds.
|
||||
|
||||
=
|
||||
Global gg_scriptfref = 0;
|
||||
Global gg_scriptstr = 0;
|
||||
|
||||
[ VM_TranscriptIsOn;
|
||||
if (gg_scriptstr) rtrue;
|
||||
rfalse;
|
||||
];
|
||||
|
||||
[ VM_TranscriptOn;
|
||||
while (true) {
|
||||
if (gg_scriptfref == 0) {
|
||||
gg_scriptfref = glk_fileref_create_by_prompt($102, $05, GG_SCRIPTFREF_ROCK);
|
||||
if (gg_scriptfref == 0) rfalse;
|
||||
}
|
||||
! stream_open_file
|
||||
gg_scriptstr = glk_stream_open_file(gg_scriptfref, $05, GG_SCRIPTSTR_ROCK);
|
||||
if (gg_scriptstr == 0) {
|
||||
! Could not open selected file; select again
|
||||
glk_fileref_destroy(gg_scriptfref);
|
||||
gg_scriptfref = 0;
|
||||
continue;
|
||||
}
|
||||
glk_window_set_echo_stream(gg_mainwin, gg_scriptstr);
|
||||
rtrue;
|
||||
}
|
||||
];
|
||||
|
||||
[ VM_TranscriptOff;
|
||||
glk_stream_close(gg_scriptstr, 0); ! stream_close
|
||||
gg_scriptstr = 0;
|
||||
rtrue;
|
||||
];
|
||||
|
||||
@h Variables and Arrays.
|
||||
|
||||
=
|
||||
Constant DICT_ENTRY_BYTES = 12+DICT_WORD_SIZE*WORDSIZE;
|
||||
Constant #dict_par1 = DICT_WORD_SIZE*WORDSIZE+4+1;
|
||||
Constant #dict_par2 = DICT_WORD_SIZE*WORDSIZE+4+3;
|
||||
|
||||
Array gg_event --> 4;
|
||||
Array gg_arguments buffer 28;
|
||||
Global gg_mainwin = 0;
|
||||
Global gg_statuswin = 0;
|
||||
Global gg_quotewin = 0;
|
||||
Global gg_savestr = 0;
|
||||
Global gg_commandstr = 0;
|
||||
Global gg_command_reading = 0; ! true if gg_commandstr is being replayed
|
||||
Global gg_foregroundchan = 0;
|
||||
Global gg_backgroundchan = 0;
|
||||
|
||||
Constant INPUT_BUFFER_LEN = 260; ! No extra byte necessary
|
||||
Constant MAX_BUFFER_WORDS = 20;
|
||||
Constant PARSE_BUFFER_LEN = 61;
|
||||
|
||||
Array buffer --> INPUT_BUFFER_LEN;
|
||||
Array buffer2 --> INPUT_BUFFER_LEN;
|
||||
Array buffer3 --> INPUT_BUFFER_LEN;
|
||||
Array parse --> PARSE_BUFFER_LEN;
|
||||
Array parse2 --> PARSE_BUFFER_LEN;
|
||||
|
||||
@h Dictionary words.
|
||||
This tests whether an address is probably that of a dictionary word. It's used
|
||||
only for debugging output, so the false positives here really do not matter.
|
||||
|
@ -433,6 +474,18 @@ routine was added to concentrate lookups of this field in one place.
|
|||
return verbnum;
|
||||
];
|
||||
|
||||
@h Action functions.
|
||||
This looks up the address of a function like |TakeSub| from the table of
|
||||
"action subroutines".
|
||||
|
||||
Strangely, Glulx's action routines table is numbered in an off-by-one way
|
||||
compared to the Z-machine's: hence the |+1| here.
|
||||
|
||||
=
|
||||
[ VM_ActionFunction act;
|
||||
return #actions_table-->(act+1);
|
||||
];
|
||||
|
||||
@h Glulx-Only Printing Routines.
|
||||
Partly because of the smallness of the range of representable values in
|
||||
the Z-machine, there is little run-time type-checking that can be done:
|
||||
|
|
114
inform7/Internal/Inter/Architecture32Kit/Sections/State.i6t
Normal file
114
inform7/Internal/Inter/Architecture32Kit/Sections/State.i6t
Normal file
|
@ -0,0 +1,114 @@
|
|||
State Template.
|
||||
|
||||
Saving, restoring, restarting and verifying the program from within itself.
|
||||
|
||||
@h Environment.
|
||||
The language "interpreter" here supposes that the eventual program is
|
||||
running in a VM which is being interpreted, and that may not be the case,
|
||||
but it's traditional.
|
||||
|
||||
=
|
||||
[ VM_ReportOnInterpreter ix;
|
||||
@gestalt 1 0 ix;
|
||||
print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100,
|
||||
".", ix & $FF, " / ";
|
||||
@gestalt 0 0 ix;
|
||||
print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, "^";
|
||||
];
|
||||
|
||||
@h Verification.
|
||||
This verifies that the current story file is intact.
|
||||
|
||||
=
|
||||
[ VM_Verify res;
|
||||
@verify res;
|
||||
return res;
|
||||
];
|
||||
|
||||
@h Save, restore, restart.
|
||||
Restart does what it says: restarts the program as if it had just loaded for
|
||||
the first time.
|
||||
|
||||
|VM_Save()| attempts to save the current state of the program to a file, and
|
||||
returns 0 if this fails, 1 if this succeeds, or 2 if in fact a restore has
|
||||
just succeeded. (A successful restoration should resume execution where the
|
||||
save succeeded, but we want to distinguish those cases.)
|
||||
|
||||
|VM_Restore()| pretends to return |true| or |false| according to whether or not
|
||||
it succeeds, but in fact it can only return |false| to indicate failure, because
|
||||
a successful restoration means that execution has transferred to |VM_Save|
|
||||
instead.
|
||||
|
||||
=
|
||||
[ VM_Restart;
|
||||
@restart;
|
||||
];
|
||||
|
||||
[ VM_Restore res fref;
|
||||
fref = glk_fileref_create_by_prompt($01, $02, 0);
|
||||
if (fref == 0) jump RFailed;
|
||||
gg_savestr = glk_stream_open_file(fref, $02, GG_SAVESTR_ROCK);
|
||||
glk_fileref_destroy(fref);
|
||||
if (gg_savestr == 0) jump RFailed;
|
||||
@restore gg_savestr res;
|
||||
glk_stream_close(gg_savestr, 0);
|
||||
gg_savestr = 0;
|
||||
.RFailed;
|
||||
rfalse;
|
||||
];
|
||||
|
||||
[ VM_Save fref len res;
|
||||
fref = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Write, 0);
|
||||
if (fref) {
|
||||
gg_savestr = glk_stream_open_file(fref, filemode_Write, GG_SAVESTR_ROCK);
|
||||
if (gg_savestr) {
|
||||
@save gg_savestr res;
|
||||
if (res == -1) {
|
||||
! The player actually just typed "restore". We first have to recover
|
||||
! all the Glk objects; the values in our global variables are all wrong.
|
||||
GGRecoverObjects();
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
return 2;
|
||||
}
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
if (res == 0) {
|
||||
! Check that the savefile was actually written - this is mostly to account for browser limits in Parchment
|
||||
if (glk_fileref_does_file_exist(fref)) {
|
||||
gg_savestr = glk_stream_open_file(fref, filemode_Read, GG_SAVESTR_ROCK);
|
||||
if (gg_savestr) {
|
||||
glk_stream_set_position(gg_savestr, 0, seekmode_End);
|
||||
len = glk_stream_get_position(gg_savestr);
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
if (len) {
|
||||
! We've confirmed the file exists and has content, which is about all we can do
|
||||
glk_fileref_destroy(fref);
|
||||
return 1;
|
||||
}
|
||||
! Cleanup the empty file
|
||||
glk_fileref_delete_file(fref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
glk_fileref_destroy(fref);
|
||||
}
|
||||
return 0;
|
||||
];
|
||||
|
||||
@h Undo.
|
||||
These are really emulations of the Z-machine's conventions on UNDO.
|
||||
|
||||
=
|
||||
[ VM_Undo result_code;
|
||||
@restoreundo result_code;
|
||||
return (~~result_code);
|
||||
];
|
||||
|
||||
[ VM_Save_Undo result_code;
|
||||
@saveundo result_code;
|
||||
if (result_code == -1) { GGRecoverObjects(); return 2; }
|
||||
return (~~result_code);
|
||||
];
|
|
@ -7,8 +7,7 @@ Web Syntax Version: 2
|
|||
|
||||
Sections
|
||||
Miscellany
|
||||
Glulx
|
||||
ZMachine
|
||||
State
|
||||
Light
|
||||
ListWriter
|
||||
OrderOfPlay
|
||||
|
|
|
@ -715,6 +715,21 @@ Array Details_of_Specific_Action-->5;
|
|||
rtrue;
|
||||
];
|
||||
|
||||
@h Descend To Specific Action Rule.
|
||||
There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the |-Sub|
|
||||
routines: thus, for instance, if |action| is |##Wait| then |WaitSub| is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
|
||||
=
|
||||
[ DESCEND_TO_SPECIFIC_ACTION_R;
|
||||
( VM_ActionFunction(action) )();
|
||||
rtrue;
|
||||
];
|
||||
|
||||
@h Work Out Details Of Specific Action Rule.
|
||||
This is one of the I6 primitive rules in the specific action processing
|
||||
rulebook, and it's basically a trick to allow information known to the
|
||||
|
|
|
@ -1,211 +0,0 @@
|
|||
Glulx Template.
|
||||
|
||||
To provide Glulx-specific actions.
|
||||
|
||||
@h Begin Glulx-only matter.
|
||||
|
||||
=
|
||||
#Ifdef TARGET_GLULX;
|
||||
|
||||
@h GlkList Command.
|
||||
GLKLIST is a testing command best used by those who understand Glulx and its
|
||||
ways: it isn't documented in the I7 manual, because it is pretty inscrutable
|
||||
for "real" users, but it's probably worth keeping just the same.
|
||||
|
||||
=
|
||||
#Ifdef DEBUG;
|
||||
[ GlkListSub;
|
||||
GlkDebuggingList();
|
||||
];
|
||||
|
||||
Verb meta 'glklist'
|
||||
* -> GlkList;
|
||||
#Endif;
|
||||
|
||||
@h Quit The Game Rule.
|
||||
|
||||
=
|
||||
[ QUIT_THE_GAME_R;
|
||||
if (actor ~= player) rfalse;
|
||||
QUIT_THE_GAME_RM('A');
|
||||
if (YesOrNo()~=0) quit;
|
||||
];
|
||||
|
||||
@h Restart The Game Rule.
|
||||
|
||||
=
|
||||
[ RESTART_THE_GAME_R;
|
||||
if (actor ~= player) rfalse;
|
||||
RESTART_THE_GAME_RM('A');
|
||||
if (YesOrNo()~=0) {
|
||||
@restart;
|
||||
RESTART_THE_GAME_RM('B'); new_line;
|
||||
}
|
||||
];
|
||||
|
||||
@h Restore The Game Rule.
|
||||
|
||||
=
|
||||
[ RESTORE_THE_GAME_R res fref;
|
||||
if (actor ~= player) rfalse;
|
||||
fref = glk_fileref_create_by_prompt($01, $02, 0);
|
||||
if (fref == 0) jump RFailed;
|
||||
gg_savestr = glk_stream_open_file(fref, $02, GG_SAVESTR_ROCK);
|
||||
glk_fileref_destroy(fref);
|
||||
if (gg_savestr == 0) jump RFailed;
|
||||
@restore gg_savestr res;
|
||||
glk_stream_close(gg_savestr, 0);
|
||||
gg_savestr = 0;
|
||||
.RFailed;
|
||||
RESTORE_THE_GAME_RM('A'); new_line;
|
||||
];
|
||||
|
||||
@h Save The Game Rule.
|
||||
|
||||
=
|
||||
[ SAVE_THE_GAME_R fref len res;
|
||||
if (actor ~= player) rfalse;
|
||||
fref = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Write, 0);
|
||||
if (fref) {
|
||||
gg_savestr = glk_stream_open_file(fref, filemode_Write, GG_SAVESTR_ROCK);
|
||||
if (gg_savestr) {
|
||||
@save gg_savestr res;
|
||||
if (res == -1) {
|
||||
! The player actually just typed "restore". We first have to recover
|
||||
! all the Glk objects; the values in our global variables are all wrong.
|
||||
GGRecoverObjects();
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
RESTORE_THE_GAME_RM('B'); new_line;
|
||||
rtrue;
|
||||
}
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
if (res == 0) {
|
||||
! Check that the savefile was actually written - this is mostly to account for browser limits in Parchment
|
||||
if (glk_fileref_does_file_exist(fref)) {
|
||||
gg_savestr = glk_stream_open_file(fref, filemode_Read, GG_SAVESTR_ROCK);
|
||||
if (gg_savestr) {
|
||||
glk_stream_set_position(gg_savestr, 0, seekmode_End);
|
||||
len = glk_stream_get_position(gg_savestr);
|
||||
glk_stream_close(gg_savestr, GLK_NULL);
|
||||
gg_savestr = 0;
|
||||
if (len) {
|
||||
! We've confirmed the file exists and has content, which is about all we can do
|
||||
SAVE_THE_GAME_RM('B'); new_line;
|
||||
glk_fileref_destroy(fref);
|
||||
rtrue;
|
||||
}
|
||||
! Cleanup the empty file
|
||||
glk_fileref_delete_file(fref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
glk_fileref_destroy(fref);
|
||||
}
|
||||
SAVE_THE_GAME_RM('A'); new_line;
|
||||
];
|
||||
|
||||
@h Verify The Story File Rule.
|
||||
This is a fossil now, really, but in the days of Infocom, the 110K story
|
||||
file occupying an entire disc was a huge data set: floppy discs were by no
|
||||
means a reliable medium, and cheap hardware often used hit-and-miss
|
||||
components, as on the notorious Commodore 64 disc controller. If somebody
|
||||
experienced an apparent bug in play, it could easily be that he had a
|
||||
corrupt disc or was unable to read data of that density. So the VERIFY
|
||||
command, which took up to ten minutes on some early computers, would chug
|
||||
through the entire story file and compute a checksum, compare it against a
|
||||
known result in the header, and determine that the story file could or
|
||||
could not properly be read. The Z-machine provided this service as an
|
||||
opcode, and so Glulx followed suit.
|
||||
|
||||
=
|
||||
[ VERIFY_THE_STORY_FILE_R res;
|
||||
if (actor ~= player) rfalse;
|
||||
@verify res;
|
||||
if (res == 0) { VERIFY_THE_STORY_FILE_RM('A'); new_line; rtrue; }
|
||||
VERIFY_THE_STORY_FILE_RM('B'); new_line;
|
||||
];
|
||||
|
||||
@h Switch Transcript On Rule.
|
||||
|
||||
=
|
||||
[ SWITCH_TRANSCRIPT_ON_R;
|
||||
if (actor ~= player) rfalse;
|
||||
if (gg_scriptstr ~= 0) { SWITCH_TRANSCRIPT_ON_RM('A'); new_line; rtrue; }
|
||||
.S2Failed;
|
||||
if (gg_scriptfref == 0) {
|
||||
gg_scriptfref = glk_fileref_create_by_prompt($102, $05, GG_SCRIPTFREF_ROCK);
|
||||
if (gg_scriptfref == 0) jump S1Failed;
|
||||
}
|
||||
! stream_open_file
|
||||
gg_scriptstr = glk_stream_open_file(gg_scriptfref, $05, GG_SCRIPTSTR_ROCK);
|
||||
if (gg_scriptstr == 0) {
|
||||
! Could not open selected file; select again
|
||||
glk_fileref_destroy(gg_scriptfref);
|
||||
gg_scriptfref = 0;
|
||||
jump S2Failed;
|
||||
}
|
||||
glk_window_set_echo_stream(gg_mainwin, gg_scriptstr);
|
||||
SWITCH_TRANSCRIPT_ON_RM('B'); new_line;
|
||||
VersionSub();
|
||||
return;
|
||||
.S1Failed;
|
||||
SWITCH_TRANSCRIPT_ON_RM('C'); new_line;
|
||||
];
|
||||
|
||||
@h Switch Transcript Off Rule.
|
||||
|
||||
=
|
||||
[ SWITCH_TRANSCRIPT_OFF_R;
|
||||
if (actor ~= player) rfalse;
|
||||
if (gg_scriptstr == 0) { SWITCH_TRANSCRIPT_OFF_RM('A'); new_line; rtrue; }
|
||||
SWITCH_TRANSCRIPT_OFF_RM('B'); new_line;
|
||||
glk_stream_close(gg_scriptstr, 0); ! stream_close
|
||||
gg_scriptstr = 0;
|
||||
];
|
||||
|
||||
@h Announce Story File Version Rule.
|
||||
|
||||
=
|
||||
[ ANNOUNCE_STORY_FILE_VERSION_R ix;
|
||||
if (actor ~= player) rfalse;
|
||||
Banner();
|
||||
print "Inform 7 v", (PrintI6Text) I7_FULL_VERSION_NUMBER, "^";
|
||||
if (UUID_ARRAY->0 >= 6) {
|
||||
print "Identification number: ";
|
||||
for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix;
|
||||
print "^";
|
||||
}
|
||||
@gestalt 1 0 ix;
|
||||
print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100,
|
||||
".", ix & $FF, " / ";
|
||||
@gestalt 0 0 ix;
|
||||
print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, "^";
|
||||
ShowExtensionVersions();
|
||||
say__p = 1;
|
||||
];
|
||||
|
||||
@h Descend To Specific Action Rule.
|
||||
There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the |-Sub|
|
||||
routines: thus, for instance, if |action| is |##Wait| then |WaitSub| is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
|
||||
Strangely, Glulx's action routines table is numbered in an off-by-one way
|
||||
compared to the Z-machine's: hence the |+1|.
|
||||
|
||||
=
|
||||
[ DESCEND_TO_SPECIFIC_ACTION_R;
|
||||
( #actions_table-->(action+1) )();
|
||||
rtrue;
|
||||
];
|
||||
|
||||
@h End Glulx-only matter.
|
||||
|
||||
=
|
||||
#Endif;
|
|
@ -2,19 +2,6 @@ OutOfWorld Template.
|
|||
|
||||
To implement some of the out of world actions.
|
||||
|
||||
@h Perform Undo.
|
||||
|
||||
=
|
||||
[ Perform_Undo;
|
||||
if (CommandParserKit`UNDO_PREVENTION_CFGF) {
|
||||
IMMEDIATELY_UNDO_RM('A'); new_line; return;
|
||||
}
|
||||
if (IterationsOfTurnSequence == 0) { IMMEDIATELY_UNDO_RM('B'); new_line; return; }
|
||||
if (undo_flag == 0) { IMMEDIATELY_UNDO_RM('C'); new_line; return; }
|
||||
if (undo_flag == 1) { IMMEDIATELY_UNDO_RM('D'); new_line; return; }
|
||||
if (VM_Undo() == 0) { IMMEDIATELY_UNDO_RM('F'); new_line; }
|
||||
];
|
||||
|
||||
@h Announce Score Rule.
|
||||
|
||||
=
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
ZMachine Template.
|
||||
State Template.
|
||||
|
||||
To provide Z-specific actions.
|
||||
|
||||
@h Begin Z-only matter.
|
||||
|
||||
=
|
||||
#Ifdef TARGET_ZCODE;
|
||||
To implement out of world actions relating to the program state.
|
||||
|
||||
@h Quit The Game Rule.
|
||||
|
||||
|
@ -23,7 +18,7 @@ To provide Z-specific actions.
|
|||
if (actor ~= player) rfalse;
|
||||
RESTART_THE_GAME_RM('A');
|
||||
if (YesOrNo()~=0) {
|
||||
@restart;
|
||||
VM_Restart();
|
||||
RESTART_THE_GAME_RM('B'); new_line;
|
||||
}
|
||||
];
|
||||
|
@ -33,10 +28,11 @@ To provide Z-specific actions.
|
|||
=
|
||||
[ RESTORE_THE_GAME_R;
|
||||
if (actor ~= player) rfalse;
|
||||
restore RMaybe;
|
||||
RESTORE_THE_GAME_RM('A'); new_line;
|
||||
rtrue;
|
||||
.RMaybe; RESTORE_THE_GAME_RM('B'); new_line;
|
||||
if (VM_Restore()) {
|
||||
RESTORE_THE_GAME_RM('B'); new_line;
|
||||
} else {
|
||||
RESTORE_THE_GAME_RM('A'); new_line;
|
||||
}
|
||||
];
|
||||
|
||||
@h Save The Game Rule.
|
||||
|
@ -44,14 +40,26 @@ To provide Z-specific actions.
|
|||
=
|
||||
[ SAVE_THE_GAME_R flag;
|
||||
if (actor ~= player) rfalse;
|
||||
@save -> flag;
|
||||
switch (flag) {
|
||||
switch (VM_Save()) {
|
||||
0: SAVE_THE_GAME_RM('A'); new_line;
|
||||
1: SAVE_THE_GAME_RM('B'); new_line;
|
||||
2: RESTORE_THE_GAME_RM('B'); new_line;
|
||||
}
|
||||
];
|
||||
|
||||
@h Perform Undo.
|
||||
|
||||
=
|
||||
[ Perform_Undo;
|
||||
if (CommandParserKit`UNDO_PREVENTION_CFGF) {
|
||||
IMMEDIATELY_UNDO_RM('A'); new_line; return;
|
||||
}
|
||||
if (IterationsOfTurnSequence == 0) { IMMEDIATELY_UNDO_RM('B'); new_line; return; }
|
||||
if (undo_flag == 0) { IMMEDIATELY_UNDO_RM('C'); new_line; return; }
|
||||
if (undo_flag == 1) { IMMEDIATELY_UNDO_RM('D'); new_line; return; }
|
||||
if (VM_Undo() == 0) { IMMEDIATELY_UNDO_RM('F'); new_line; }
|
||||
];
|
||||
|
||||
@h Verify The Story File Rule.
|
||||
This is a fossil now, really, but in the days of Infocom, the 110K story
|
||||
file occupying an entire disc was a huge data set: floppy discs were by no
|
||||
|
@ -62,17 +70,13 @@ corrupt disc or was unable to read data of that density. So the VERIFY
|
|||
command, which took up to ten minutes on some early computers, would chug
|
||||
through the entire story file and compute a checksum, compare it against a
|
||||
known result in the header, and determine that the story file could or
|
||||
could not properly be read. The Z-machine provided this service as an
|
||||
opcode, and so Glulx followed suit.
|
||||
could not properly be read.
|
||||
|
||||
=
|
||||
[ VERIFY_THE_STORY_FILE_R;
|
||||
if (actor ~= player) rfalse;
|
||||
@verify ?Vmaybe;
|
||||
jump Vwrong;
|
||||
.Vmaybe; VERIFY_THE_STORY_FILE_RM('A'); new_line; rtrue;
|
||||
.Vwrong;
|
||||
VERIFY_THE_STORY_FILE_RM('B'); new_line;
|
||||
if (VM_Verify()) { VERIFY_THE_STORY_FILE_RM('A'); new_line; }
|
||||
else { VERIFY_THE_STORY_FILE_RM('B'); new_line; }
|
||||
];
|
||||
|
||||
@h Switch Transcript On Rule.
|
||||
|
@ -80,12 +84,9 @@ opcode, and so Glulx followed suit.
|
|||
=
|
||||
[ SWITCH_TRANSCRIPT_ON_R;
|
||||
if (actor ~= player) rfalse;
|
||||
transcript_mode = ((0-->8) & 1);
|
||||
if (transcript_mode) { SWITCH_TRANSCRIPT_ON_RM('A'); new_line; rtrue; }
|
||||
@output_stream 2;
|
||||
if (((0-->8) & 1) == 0) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; }
|
||||
if (VM_TranscriptIsOn()) { SWITCH_TRANSCRIPT_ON_RM('A'); new_line; rtrue; }
|
||||
if (VM_TranscriptOn() == false) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; }
|
||||
SWITCH_TRANSCRIPT_ON_RM('B'); new_line; VersionSub();
|
||||
transcript_mode = true;
|
||||
];
|
||||
|
||||
@h Switch Transcript Off Rule.
|
||||
|
@ -93,12 +94,9 @@ opcode, and so Glulx followed suit.
|
|||
=
|
||||
[ SWITCH_TRANSCRIPT_OFF_R;
|
||||
if (actor ~= player) rfalse;
|
||||
transcript_mode = ((0-->8) & 1);
|
||||
if (transcript_mode == false) { SWITCH_TRANSCRIPT_OFF_RM('A'); new_line; rtrue; }
|
||||
if (VM_TranscriptIsOn() == false) { SWITCH_TRANSCRIPT_OFF_RM('A'); new_line; rtrue; }
|
||||
SWITCH_TRANSCRIPT_OFF_RM('B'); new_line;
|
||||
@output_stream -2;
|
||||
if ((0-->8) & 1) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; }
|
||||
transcript_mode = false;
|
||||
if (VM_TranscriptOff() == false) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; }
|
||||
];
|
||||
|
||||
@h Announce Story File Version Rule.
|
||||
|
@ -113,38 +111,7 @@ opcode, and so Glulx followed suit.
|
|||
for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix;
|
||||
print "^";
|
||||
}
|
||||
ix = 0; ! shut up compiler warning
|
||||
if (standard_interpreter > 0) {
|
||||
print "Standard interpreter ",
|
||||
standard_interpreter/256, ".", standard_interpreter%256,
|
||||
" (", HDR_TERPNUMBER->0;
|
||||
print (char) HDR_TERPVERSION->0;
|
||||
print ")^";
|
||||
} else {
|
||||
print "Interpreter ", HDR_TERPNUMBER->0, " Version ";
|
||||
print (char) HDR_TERPVERSION->0;
|
||||
print "^";
|
||||
}
|
||||
VM_ReportOnInterpreter();
|
||||
ShowExtensionVersions();
|
||||
say__p = 1;
|
||||
];
|
||||
|
||||
@h Descend To Specific Action Rule.
|
||||
There are 100 or so actions, typically, and this rule is for efficiency's
|
||||
sake: rather than perform 100 or so comparisons to see which routine to
|
||||
call, we indirect through a jump table. The routines called are the |-Sub|
|
||||
routines: thus, for instance, if |action| is |##Wait| then |WaitSub| is
|
||||
called. It is essential that this routine not be called for fake actions:
|
||||
in I7 use this is guaranteed, since fake actions are not allowed into the
|
||||
action machinery at all.
|
||||
|
||||
=
|
||||
[ DESCEND_TO_SPECIFIC_ACTION_R;
|
||||
( #actions_table-->action )();
|
||||
rtrue;
|
||||
];
|
||||
|
||||
@h End Z-only matter.
|
||||
|
||||
=
|
||||
#Endif; ! TARGET_ZCODE
|
|
@ -506,6 +506,18 @@ in I7 terms. It should arguably be withdrawn, but doesn't seem to do any harm.
|
|||
WriteListFrom(child(obj), NEWLINE_BIT+INDENT_BIT+ALWAYS_BIT+FULLINV_BIT, 1);
|
||||
];
|
||||
|
||||
@h GlkList Command.
|
||||
GLKLIST is a testing command best used by those who understand Glulx and its
|
||||
ways: it isn't documented in the I7 manual, because it is pretty inscrutable
|
||||
for "real" users, but it's probably worth keeping just the same.
|
||||
|
||||
=
|
||||
#Ifdef TARGET_GLULX;
|
||||
[ GlkListSub;
|
||||
GlkDebuggingList();
|
||||
];
|
||||
#Endif;
|
||||
|
||||
@h Grammar.
|
||||
In the old I6 parser, testing commands had their own scope hardwired in to the
|
||||
code: this worked by comparing the verb command word directly against |'scope'|
|
||||
|
@ -580,6 +592,10 @@ Verb meta 'trace'
|
|||
Verb meta 'tree'
|
||||
* -> XTree
|
||||
* scope=testcommandnoun -> XTree;
|
||||
#Ifdef TARGET_GLULX;
|
||||
Verb meta 'glklist'
|
||||
* -> GlkList;
|
||||
#Endif;
|
||||
|
||||
@h End testy.
|
||||
|
||||
|
|
Loading…
Reference in a new issue