mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 10:04:21 +03:00
645 lines
93 KiB
HTML
645 lines
93 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Tests Template</title>
|
|
<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="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body>
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-src/Figures/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Extensions</h2><ul>
|
|
<li><a href="../basic_inform/index.html">basic_inform</a></li>
|
|
<li><a href="../standard_rules/index.html">standard_rules</a></li>
|
|
</ul><h2>Kits</h2><ul>
|
|
<li><a href="../BasicInformKit/index.html">BasicInformKit</a></li>
|
|
<li><a href="../BasicInformExtrasKit/index.html">BasicInformExtrasKit</a></li>
|
|
<li><a href="../CommandParserKit/index.html">CommandParserKit</a></li>
|
|
<li><a href="../EnglishLanguageKit/index.html">EnglishLanguageKit</a></li>
|
|
<li><a href="index.html"><span class="selectedlink">WorldModelKit</span></a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of 'Tests Template' generated by 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><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. Scenes Command</a></li><li><a href="S-tst.html#SP11">§11. Scope Command</a></li><li><a href="S-tst.html#SP12">§12. Showheap Command</a></li><li><a href="S-tst.html#SP13">§13. ShowMe Command</a></li><li><a href="S-tst.html#SP14">§14. Showverb Command</a></li><li><a href="S-tst.html#SP15">§15. Test Command</a></li><li><a href="S-tst.html#SP16">§16. Trace Command</a></li><li><a href="S-tst.html#SP17">§17. Tree Command</a></li><li><a href="S-tst.html#SP18">§18. Grammar</a></li><li><a href="S-tst.html#SP19">§19. End testy</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. All testy. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Abstract Command. </b>The code below is compiled only if the symbol <code class="display"><span class="extract">DEBUG</span></code> is defined, which it
|
|
always is for normal runs in the Inform user interface, but not for Release
|
|
runs.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Not all of these commands are documented; this is intentional. They may be
|
|
changed in name or function. This is all of the testing commands except for
|
|
the GLKLIST command, which is in Glulx.i6t (and does not exist when the
|
|
target VM is the Z-machine).
|
|
</p>
|
|
|
|
<p class="inwebparagraph">We take the commands in alphabetical order, beginning with ABSTRACT, which
|
|
moves an object to a new position in the object tree.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">XAbstractSub</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">XTestMove</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">, </span><span class="identifier">second</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="reserved">move</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> </span><span class="reserved">to</span><span class="plain"> </span><span class="identifier">second</span><span class="plain">;</span>
|
|
<span class="string">"[Abstracted.]"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">XTestMove</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">dest</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> <= </span><span class="identifier">InformLibrary</span><span class="plain">) </span><span class="reserved">print_ret</span><span class="plain"> </span><span class="string">"[Can't move "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">": it's a system object.]"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">) </span><span class="reserved">print_ret</span><span class="plain"> </span><span class="string">"[Can't move "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">": it's part of "</span><span class="plain">,</span>
|
|
<span class="plain">(</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">, </span><span class="string">".]"</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">dest</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dest</span><span class="plain"> == </span><span class="identifier">obj</span><span class="plain">) </span><span class="reserved">print_ret</span><span class="plain"> </span><span class="string">"[Can't move "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">": it would contain itself.]"</span><span class="plain">;</span>
|
|
<span class="identifier">dest</span><span class="plain"> = </span><span class="identifier">CoreOfParentOfCoreOf</span><span class="plain">(</span><span class="identifier">dest</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">rfalse</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Actions Command. </b>ACTIONS turns tracing of actions on.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ActionsOnSub</span><span class="plain">; </span><span class="identifier">trace_actions</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="string">"Actions listing on."</span><span class="plain">; ];</span>
|
|
<span class="plain">[ </span><span class="identifier">ActionsOffSub</span><span class="plain">; </span><span class="identifier">trace_actions</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="string">"Actions listing off."</span><span class="plain">; ];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. Gonear Command. </b>GONEAR teleports the player to the vicinity of some named item.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">GonearSub</span><span class="plain">;</span>
|
|
<span class="identifier">PlayerTo</span><span class="plain">(</span><span class="identifier">LocationOf</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">));</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Purloin Command. </b>To PURLOIN is to acquire something without reference to any rules on accessibility.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">XPurloinSub</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">XTestMove</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">, </span><span class="identifier">player</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="reserved">move</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> </span><span class="reserved">to</span><span class="plain"> </span><span class="identifier">player</span><span class="plain">; </span><span class="reserved">give</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> </span><span class="identifier">moved</span><span class="plain">; </span><span class="reserved">give</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> ~</span><span class="identifier">concealed</span><span class="plain">;</span>
|
|
<span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"[Purloined.]"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Random Command. </b>RANDOM forces the random-number generator to a predictable seed value.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">PredictableSub</span><span class="plain">;</span>
|
|
<span class="identifier">VM_Seed_RNG</span><span class="plain">(-100);</span>
|
|
<span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"[Random number generator now predictable.]"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Relations Command. </b>RELATIONS lists the current state of the mutable relations.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ShowRelationsSub</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">IterateRelations</span><span class="plain">(</span><span class="identifier">ShowOneRelation</span><span class="plain">);</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">ShowOneRelation</span><span class="plain"> </span><span class="identifier">rel</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">RR_PERMISSIONS</span><span class="plain">)) & (</span><span class="identifier">RELS_SHOW</span><span class="plain">)) {</span>
|
|
<span class="plain">(</span><span class="identifier">RlnGetF</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">RR_HANDLER</span><span class="plain">))(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">RELS_SHOW</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Responses Command. </b>RESPONSES lists the known responses.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ShowResponsesSub</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">reg</span><span class="plain"> </span><span class="identifier">wd</span><span class="plain"> </span><span class="identifier">set_mode</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NO_RESPONSES</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="string">"There are no lettered responses."</span><span class="plain">;</span>
|
|
<span class="identifier">wn</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NextWordStopped</span><span class="plain">() == </span><span class="character">'now'</span><span class="plain">) </span><span class="identifier">set_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain">--;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NextWordStopped</span><span class="plain">() == </span><span class="character">'set'</span><span class="plain">) </span><span class="identifier">set_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain">--;</span>
|
|
<span class="identifier">wd</span><span class="plain"> = </span><span class="identifier">NextWordStopped</span><span class="plain">(); </span><span class="identifier">wn</span><span class="plain">--;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wd</span><span class="plain"> == </span><span class="character">'all'</span><span class="plain">) </span><span class="identifier">reg</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">reg</span><span class="plain"> = -1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wd</span><span class="plain"> ~= -1) </span><span class="identifier">reg</span><span class="plain"> = </span><span class="identifier">TryNumber</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">reg</span><span class="plain"> < </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">">--> The following sets of responses are available:^"</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" RESPONSES ALL^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">a</span><span class="plain">=0, </span><span class="identifier">i</span><span class="plain">=1, </span><span class="identifier">j</span><span class="plain">=0: </span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain">: </span><span class="identifier">a</span><span class="plain">=</span><span class="identifier">a</span><span class="plain">+3, </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain"> ~= </span><span class="identifier">EMPTY_TEXT_PACKED</span><span class="plain">) </span><span class="identifier">j</span><span class="plain">++;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">reg</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) || (</span><span class="identifier">reg</span><span class="plain"> == </span><span class="identifier">j</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain"> ~= </span><span class="identifier">EMPTY_TEXT_PACKED</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">set_mode</span><span class="plain">) {</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"["</span><span class="plain">, (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain">, </span><span class="string">":^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">ShowResponsesRange</span><span class="plain">(</span><span class="identifier">ResponseDivisions</span><span class="plain">-->(</span><span class="identifier">a</span><span class="plain">+1), </span><span class="identifier">ResponseDivisions</span><span class="plain">-->(</span><span class="identifier">a</span><span class="plain">+2), </span><span class="identifier">set_mode</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">reg</span><span class="plain"> < </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain"> ~= </span><span class="identifier">EMPTY_TEXT_PACKED</span><span class="plain">) {</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" RESPONSES "</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="string">": "</span><span class="plain">, (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">ResponseDivisions</span><span class="plain">--></span><span class="identifier">a</span><span class="plain">, </span><span class="string">"^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">ShowResponsesRange</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> </span><span class="reserved">to</span><span class="plain"> </span><span class="identifier">set_mode</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">: </span><span class="identifier">i</span><span class="plain"><=</span><span class="reserved">to</span><span class="plain">: </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">set_mode</span><span class="plain">) {</span>
|
|
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"now "</span><span class="plain">;</span>
|
|
<span class="constant">2</span><span class="plain">: ;</span>
|
|
<span class="constant">0</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">PrintResponse</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">set_mode</span><span class="plain">) {</span>
|
|
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" is "</span><span class="plain">;</span>
|
|
<span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" is "</span><span class="plain">;</span>
|
|
<span class="constant">0</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">": "</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">suppress_text_substitution</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
|
|
<span class="identifier">CarryOutActivity</span><span class="plain">(</span><span class="identifier">PRINTING_RESPONSE_ACT</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="identifier">suppress_text_substitution</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">set_mode</span><span class="plain">) {</span>
|
|
<span class="constant">1</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">";"</span><span class="plain">;</span>
|
|
<span class="constant">2</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"."</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Rules Command. </b>RULES changes the level of rule tracing.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">RulesOnSub</span><span class="plain">;</span>
|
|
<span class="identifier">debug_rules</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"Rules tracing now switched on. Type ~rules off~ to switch it off again,</span>
|
|
<span class="string"> or ~rules all~ to include even rules which do not apply."</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
<span class="plain">[ </span><span class="identifier">RulesAllSub</span><span class="plain">;</span>
|
|
<span class="identifier">debug_rules</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again."</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
<span class="plain">[ </span><span class="identifier">RulesOffSub</span><span class="plain">;</span>
|
|
<span class="identifier">debug_rules</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"Rules tracing now switched off. Type ~rules~ to switch it on again."</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. Scenes Command. </b>SCENES switches scene-change tracing on or off, and also shows the current position.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ScenesOnSub</span><span class="plain">;</span>
|
|
<span class="identifier">debug_scenes</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="identifier">ShowSceneStatus</span><span class="plain">(); </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"(Scene monitoring now switched on. Type ~scenes off~ to switch it off again.)"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
<span class="plain">[ </span><span class="identifier">ScenesOffSub</span><span class="plain">;</span>
|
|
<span class="identifier">debug_scenes</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="string">"(Scene monitoring now switched off. Type ~scenes~ to switch it on again.)"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Scope Command. </b>SCOPE prints a numbered list of all objects in scope to the player.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="identifier">Global</span><span class="plain"> </span><span class="identifier">x_scope_count</span><span class="plain">;</span>
|
|
<span class="plain">[ </span><span class="identifier">ScopeSub</span><span class="plain">;</span>
|
|
<span class="identifier">x_scope_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">LoopOverScope</span><span class="plain">(</span><span class="identifier">Print_ScL</span><span class="plain">, </span><span class="identifier">noun</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x_scope_count</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="string">"Nothing is in scope."</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
<span class="plain">[ </span><span class="identifier">Print_ScL</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain">; </span><span class="reserved">print_ret</span><span class="plain"> ++</span><span class="identifier">x_scope_count</span><span class="plain">, </span><span class="string">": "</span><span class="plain">, (</span><span class="identifier">a</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">")"</span><span class="plain">; ];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Showheap Command. </b>SHOWHEAP is for debugging the memory heap, and is intended for Inform
|
|
maintainers rather than users.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ShowHeapSub</span><span class="plain">;</span>
|
|
<span class="identifier">HeapDebug</span><span class="plain">();</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. ShowMe Command. </b>SHOWME is probably the most useful testing command: it shows the state of the
|
|
current room, or a named item.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ShowMeSub</span><span class="plain"> </span><span class="identifier">t_0</span><span class="plain">;</span>
|
|
<span class="identifier">t_0</span><span class="plain"> = </span><span class="identifier">noun</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">noun</span><span class="plain"> == </span><span class="reserved">nothing</span><span class="plain">) </span><span class="identifier">noun</span><span class="plain"> = </span><span class="identifier">real_location</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ShowMeRecursively</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, (</span><span class="identifier">noun</span><span class="plain"> == </span><span class="identifier">real_location</span><span class="plain">))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">noun</span><span class="plain"> == </span><span class="identifier">real_location</span><span class="plain">)</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"* denotes things which are not in scope^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_0</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">K2_thing</span><span class="plain">) {</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"location:"</span><span class="plain">; </span><span class="identifier">ShowRLocation</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">); </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">ShowMeDetails</span><span class="plain">(</span><span class="identifier">t_0</span><span class="plain">);</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">ShowRLocation</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">top</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">K1_room</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">worn</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"worn by "</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">animate</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"carried by "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">container</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"in "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">K1_room</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"in "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">supporter</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"on "</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">the</span><span class="plain">) </span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">);</span>
|
|
<span class="identifier">ShowRLocation</span><span class="plain">(</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">));</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">top</span><span class="plain"> == </span><span class="reserved">false</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">", which is "</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"part of "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">;</span>
|
|
<span class="identifier">ShowRLocation</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"out of play"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">ShowMeRecursively</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="identifier">k</span><span class="plain">;</span>
|
|
<span class="reserved">spaces</span><span class="plain">(2*</span><span class="identifier">depth</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain"> && (</span><span class="identifier">depth</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) && (</span><span class="identifier">TestScope</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">player</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">)) { </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"*"</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">; }</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">depth</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" (part of "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_parent</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">worn</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" (worn)"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">KD_Count</span><span class="plain">) {</span>
|
|
<span class="identifier">k</span><span class="plain"> = </span><span class="identifier">KindHierarchy</span><span class="plain">-->((</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">KD_Count</span><span class="plain">)*2);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">k</span><span class="plain"> ~= </span><span class="identifier">K2_thing</span><span class="plain">) || (</span><span class="identifier">depth</span><span class="plain">==0)) {</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" - "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">k</span><span class="plain"> == </span><span class="identifier">K4_door</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">K5_container</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">transparent</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"transparent "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">locked</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"locked "</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">open</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"open "</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"closed "</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">I7_Kind_Name</span><span class="plain">) </span><span class="identifier">k</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_child</span><span class="plain">) </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> | </span><span class="identifier">ShowMeRecursively</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_child</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">+2, </span><span class="identifier">f</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">depth</span><span class="plain">>0) && (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_sibling</span><span class="plain">))</span>
|
|
<span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> | </span><span class="identifier">ShowMeRecursively</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">component_sibling</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">f</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">child</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">)) </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> | </span><span class="identifier">ShowMeRecursively</span><span class="plain">(</span><span class="reserved">child</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="identifier">depth</span><span class="plain">+2, </span><span class="identifier">f</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">depth</span><span class="plain">>0) && (</span><span class="reserved">sibling</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">))) </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> | </span><span class="identifier">ShowMeRecursively</span><span class="plain">(</span><span class="reserved">sibling</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">f</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">AllowInShowme</span><span class="plain"> </span><span class="identifier">pr</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pr</span><span class="plain"> == </span><span class="identifier">workflag</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">concealed</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">mentioned</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
|
|
<span class="reserved">rtrue</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. Showverb Command. </b>SHOWVERB is a holdover from old I6 days, but still quite useful. It writes
|
|
out the I6 command verb grammar for the supplied command.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">ShowVerbSub</span><span class="plain"> </span><span class="identifier">address</span><span class="plain"> </span><span class="identifier">lines</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">;</span>
|
|
<span class="identifier">wn</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">NextWordStopped</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">0</span><span class="plain"> || ((</span><span class="identifier">x</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </span><span class="constant">1</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
|
|
<span class="string">"Try typing ~showverb~ and then the name of a verb."</span><span class="plain">;</span>
|
|
<span class="identifier">meta</span><span class="plain"> = ((</span><span class="identifier">x</span><span class="plain">->#</span><span class="identifier">dict_par1</span><span class="plain">) & </span><span class="constant">2</span><span class="plain">)/2;</span>
|
|
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">DictionaryWordToVerbNum</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">);</span>
|
|
<span class="identifier">address</span><span class="plain"> = </span><span class="identifier">VM_CommandTableAddress</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="identifier">lines</span><span class="plain"> = </span><span class="identifier">address</span><span class="plain">->0;</span>
|
|
<span class="identifier">address</span><span class="plain">++;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Verb "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">meta</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"meta "</span><span class="plain">;</span>
|
|
<span class="identifier">VM_PrintCommandWords</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="reserved">new_line</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">lines</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"has no grammar lines.^"</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (: </span><span class="identifier">lines</span><span class="plain">>0 : </span><span class="identifier">lines</span><span class="plain">--) {</span>
|
|
<span class="identifier">address</span><span class="plain"> = </span><span class="identifier">UnpackGrammarLine</span><span class="plain">(</span><span class="identifier">address</span><span class="plain">);</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" "</span><span class="plain">; </span><span class="identifier">DebugGrammarLine</span><span class="plain">(); </span><span class="reserved">new_line</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">ParaContent</span><span class="plain">();</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">DebugGrammarLine</span><span class="plain"> </span><span class="identifier">pcount</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" * "</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (: </span><span class="identifier">line_token</span><span class="plain">--></span><span class="identifier">pcount</span><span class="plain"> ~= </span><span class="identifier">ENDIT_TOKEN</span><span class="plain"> : </span><span class="identifier">pcount</span><span class="plain">++) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">line_token</span><span class="plain">--></span><span class="identifier">pcount</span><span class="plain">)->0 & </span><span class="constant">$10</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"/ "</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">DebugToken</span><span class="plain">) </span><span class="identifier">line_token</span><span class="plain">--></span><span class="identifier">pcount</span><span class="plain">, </span><span class="string">" "</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"-> "</span><span class="plain">, (</span><span class="identifier">DebugAction</span><span class="plain">) </span><span class="identifier">action_to_be</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">action_reversed</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">" reverse"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">DebugToken</span><span class="plain"> </span><span class="identifier">token</span><span class="plain">;</span>
|
|
<span class="identifier">AnalyseToken</span><span class="plain">(</span><span class="identifier">token</span><span class="plain">);</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">found_ttype</span><span class="plain">) {</span>
|
|
<span class="plain"> </span><span class="identifier">ILLEGAL_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"<illegal token number "</span><span class="plain">, </span><span class="identifier">token</span><span class="plain">, </span><span class="string">">"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">ELEMENTARY_TT</span><span class="plain">:</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">found_tdata</span><span class="plain">) {</span>
|
|
<span class="plain"> </span><span class="identifier">NOUN_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"noun"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">HELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"held"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">MULTI_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multi"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">MULTIHELD_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiheld"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">MULTIEXCEPT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiexcept"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">MULTIINSIDE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"multiinside"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">CREATURE_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"creature"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">SPECIAL_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"special"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">NUMBER_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"number"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">TOPIC_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"topic"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">ENDIT_TOKEN</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"END"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain"> </span><span class="identifier">PREPOSITION_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"'"</span><span class="plain">, (</span><span class="identifier">address</span><span class="plain">) </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">"'"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">ROUTINE_FILTER_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"noun=Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">ATTR_FILTER_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">DebugAttribute</span><span class="plain">) </span><span class="identifier">found_tdata</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">SCOPE_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"scope=Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">GPR_TT</span><span class="plain">:</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Routine("</span><span class="plain">, </span><span class="identifier">found_tdata</span><span class="plain">, </span><span class="string">")"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP15"></a><b>§15. Test Command. </b>TEST runs a short script of commands from the source text.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">TARGET_GLULX</span><span class="plain">;</span>
|
|
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">TEST_STACK_SIZE</span><span class="plain"> = </span><span class="constant">128</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifnot</span><span class="plain">;</span>
|
|
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">TEST_STACK_SIZE</span><span class="plain"> = </span><span class="constant">48</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">test_stack</span><span class="plain"> --> </span><span class="identifier">TEST_STACK_SIZE</span><span class="plain">;</span>
|
|
<span class="identifier">Global</span><span class="plain"> </span><span class="identifier">test_sp</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="plain">[ </span><span class="identifier">TestStart</span><span class="plain"> </span><span class="identifier">T</span><span class="plain"> </span><span class="identifier">R</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> </span><span class="identifier">k</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">test_sp</span><span class="plain"> >= </span><span class="identifier">TEST_STACK_SIZE</span><span class="plain">) </span><span class="string">">--> Testing too many levels deep"</span><span class="plain">;</span>
|
|
<span class="identifier">test_stack</span><span class="plain">--></span><span class="identifier">test_sp</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">;</span>
|
|
<span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">+1) = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">+3) = </span><span class="identifier">l</span><span class="plain">;</span>
|
|
<span class="identifier">test_sp</span><span class="plain"> = </span><span class="identifier">test_sp</span><span class="plain"> + </span><span class="constant">4</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">R</span><span class="plain">-->0) && (</span><span class="identifier">R</span><span class="plain">-->0 ~= </span><span class="identifier">real_location</span><span class="plain">)) {</span>
|
|
<span class="plain"> </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"(first moving to "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">R</span><span class="plain">-->0, </span><span class="string">")^"</span><span class="plain">;</span>
|
|
<span class="plain"> </span><span class="identifier">PlayerTo</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-->0, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">k</span><span class="plain">=1;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">--></span><span class="identifier">k</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">--></span><span class="identifier">k</span><span class="plain"> </span><span class="reserved">notin</span><span class="plain"> </span><span class="identifier">player</span><span class="plain">) {</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"(first acquiring "</span><span class="plain">, (</span><span class="identifier">the</span><span class="plain">) </span><span class="identifier">R</span><span class="plain">--></span><span class="identifier">k</span><span class="plain">, </span><span class="string">")^"</span><span class="plain">;</span>
|
|
<span class="reserved">move</span><span class="plain"> </span><span class="identifier">R</span><span class="plain">--></span><span class="identifier">k</span><span class="plain"> </span><span class="reserved">to</span><span class="plain"> </span><span class="identifier">player</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">k</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"(Testing.)^"</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
<span class="plain">[ </span><span class="identifier">TestKeyboardPrimitive</span><span class="plain"> </span><span class="identifier">a_buffer</span><span class="plain"> </span><span class="identifier">a_table</span><span class="plain"> </span><span class="identifier">p</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> </span><span class="identifier">spaced</span><span class="plain"> </span><span class="identifier">ch</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">test_sp</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">test_stack</span><span class="plain">-->2 = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">VM_ReadKeyboard</span><span class="plain">(</span><span class="identifier">a_buffer</span><span class="plain">, </span><span class="identifier">a_table</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">-4);</span>
|
|
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">-3);</span>
|
|
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">-1);</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"["</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="identifier">test_stack</span><span class="plain">-->2;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"] "</span><span class="plain">;</span>
|
|
<span class="identifier">test_stack</span><span class="plain">-->2 = </span><span class="identifier">test_stack</span><span class="plain">-->2 + </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="reserved">style</span><span class="plain"> </span><span class="identifier">bold</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> < </span><span class="identifier">l</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">i</span><span class="plain"> ~= </span><span class="character">'/'</span><span class="plain">)) {</span>
|
|
<span class="identifier">ch</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">spaced</span><span class="plain"> || (</span><span class="identifier">ch</span><span class="plain"> ~= </span><span class="character">' '</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">i</span><span class="plain"> == </span><span class="character">'['</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">->(</span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'/'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">->(</span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">']'</span><span class="plain">)) {</span>
|
|
<span class="identifier">ch</span><span class="plain"> = </span><span class="character">'/'</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">+2;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">a_buffer</span><span class="plain">->(</span><span class="identifier">j</span><span class="plain">+</span><span class="identifier">WORDSIZE</span><span class="plain">) = </span><span class="identifier">ch</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">char</span><span class="plain">) </span><span class="identifier">ch</span><span class="plain">;</span>
|
|
<span class="identifier">i</span><span class="plain">++; </span><span class="identifier">j</span><span class="plain">++;</span>
|
|
<span class="identifier">spaced</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">style</span><span class="plain"> </span><span class="identifier">roman</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
|
|
<span class="identifier">a_buffer</span><span class="plain">->1 = </span><span class="identifier">j</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifnot</span><span class="plain">; </span><span class="comment">TARGET_GLULX</span>
|
|
<span class="identifier">a_buffer</span><span class="plain">-->0 = </span><span class="identifier">j</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span><span class="plain">;</span>
|
|
<span class="identifier">VM_Tokenise</span><span class="plain">(</span><span class="identifier">a_buffer</span><span class="plain">, </span><span class="identifier">a_table</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">i</span><span class="plain"> == </span><span class="character">'/'</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">++;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> >= </span><span class="identifier">l</span><span class="plain">) {</span>
|
|
<span class="identifier">test_sp</span><span class="plain"> = </span><span class="identifier">test_sp</span><span class="plain"> - </span><span class="constant">4</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">test_stack</span><span class="plain">-->(</span><span class="identifier">test_sp</span><span class="plain">-3) = </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ENDIF</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP16"></a><b>§16. Trace Command. </b>Another holdover from I6: TRACE sets the level of parser tracing, on a scale
|
|
of 0 (off, the default) to 5.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">TraceOnSub</span><span class="plain">; </span><span class="identifier">parser_trace</span><span class="plain">=1; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="string">"[Trace on.]"</span><span class="plain">; ];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">TraceLevelSub</span><span class="plain">;</span>
|
|
<span class="identifier">parser_trace</span><span class="plain"> = </span><span class="identifier">parsed_number</span><span class="plain">; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"[Parser tracing set to level "</span><span class="plain">, </span><span class="identifier">parser_trace</span><span class="plain">, </span><span class="string">".]^"</span><span class="plain">;</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">TraceOffSub</span><span class="plain">; </span><span class="identifier">parser_trace</span><span class="plain">=0; </span><span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="string">"Trace off."</span><span class="plain">; ];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17"></a><b>§17. Tree Command. </b>TREE prints out the I6 object tree, though this is not always very helpful
|
|
in I7 terms. It should arguably be withdrawn, but doesn't seem to do any harm.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">XTreeSub</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">noun</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> && </span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">XObj</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">XObj</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain">,1);</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="plain">[ </span><span class="identifier">XObj</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">f</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">a</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">" ("</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">") "</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain"> == </span><span class="constant">1</span><span class="plain"> && </span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">)</span>
|
|
<span class="reserved">print</span><span class="plain"> </span><span class="string">"(in "</span><span class="plain">, (</span><span class="identifier">name</span><span class="plain">) </span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="string">" "</span><span class="plain">, </span><span class="reserved">parent</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="string">")"</span><span class="plain">;</span>
|
|
<span class="reserved">new_line</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">child</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">rtrue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> == </span><span class="identifier">Class</span><span class="plain">)</span>
|
|
<span class="identifier">WriteListFrom</span><span class="plain">(</span><span class="reserved">child</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="identifier">NEWLINE_BIT</span><span class="plain">+</span><span class="identifier">INDENT_BIT</span><span class="plain">+</span><span class="identifier">ALWAYS_BIT</span><span class="plain">+</span><span class="identifier">NOARTICLE_BIT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">WriteListFrom</span><span class="plain">(</span><span class="reserved">child</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">), </span><span class="identifier">NEWLINE_BIT</span><span class="plain">+</span><span class="identifier">INDENT_BIT</span><span class="plain">+</span><span class="identifier">ALWAYS_BIT</span><span class="plain">+</span><span class="identifier">FULLINV_BIT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="plain">];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18"></a><b>§18. 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 <code class="display"><span class="extract">'scope'</span></code>
|
|
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
|
|
better: using this token instead of <code class="display"><span class="extract">multi</span></code> provides a noun with universal
|
|
scope (but restricted to I7 objects, so I6 pseudo-objects like <code class="display"><span class="extract">compass</span></code> are
|
|
not picked up) and able to accept multiple objects.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">[ </span><span class="identifier">testcommandnoun</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">o2</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">scope_stage</span><span class="plain">) {</span>
|
|
<span class="constant">1</span><span class="plain">: </span><span class="reserved">rtrue</span><span class="plain">; </span><span class="comment">allow multiple objects</span>
|
|
<span class="constant">2</span><span class="plain">: </span><span class="reserved">objectloop</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain">) && (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">provides</span><span class="plain"> </span><span class="identifier">KD_Count</span><span class="plain">))</span>
|
|
<span class="identifier">PlaceInScope</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">);</span>
|
|
<span class="constant">3</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"There seems to be no such object anywhere in the model world.^"</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">];</span>
|
|
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'abstract'</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> </span><span class="character">'to'</span><span class="plain"> </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">XAbstract</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'actions'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ActionsOn</span>
|
|
<span class="plain">* </span><span class="character">'on'</span><span class="plain"> -> </span><span class="identifier">ActionsOn</span>
|
|
<span class="plain">* </span><span class="character">'off'</span><span class="plain"> -> </span><span class="identifier">ActionsOff</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'gonear'</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">Gonear</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'purloin'</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">XPurloin</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'random'</span>
|
|
<span class="plain">* -> </span><span class="identifier">Predictable</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'relations'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ShowRelations</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'responses'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ShowResponses</span>
|
|
<span class="plain">* </span><span class="identifier">special</span><span class="plain"> -> </span><span class="identifier">ShowResponses</span>
|
|
<span class="plain">* </span><span class="character">'now'</span><span class="plain"> </span><span class="identifier">special</span><span class="plain"> -> </span><span class="identifier">ShowResponses</span>
|
|
<span class="plain">* </span><span class="character">'set'</span><span class="plain"> </span><span class="identifier">special</span><span class="plain"> -> </span><span class="identifier">ShowResponses</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'rules'</span>
|
|
<span class="plain">* -> </span><span class="identifier">RulesOn</span>
|
|
<span class="plain">* </span><span class="character">'all'</span><span class="plain"> -> </span><span class="identifier">RulesAll</span>
|
|
<span class="plain">* </span><span class="character">'on'</span><span class="plain"> -> </span><span class="identifier">RulesOn</span>
|
|
<span class="plain">* </span><span class="character">'off'</span><span class="plain"> -> </span><span class="identifier">RulesOff</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'scenes'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ScenesOn</span>
|
|
<span class="plain">* </span><span class="character">'on'</span><span class="plain"> -> </span><span class="identifier">ScenesOn</span>
|
|
<span class="plain">* </span><span class="character">'off'</span><span class="plain"> -> </span><span class="identifier">ScenesOff</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'scope'</span>
|
|
<span class="plain">* -> </span><span class="identifier">Scope</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">Scope</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'showheap'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ShowHeap</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'showme'</span>
|
|
<span class="plain">* -> </span><span class="identifier">ShowMe</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">ShowMe</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'showverb'</span>
|
|
<span class="plain">* </span><span class="identifier">special</span><span class="plain"> -> </span><span class="identifier">ShowVerb</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'test'</span>
|
|
<span class="plain">* -> </span><span class="identifier">TestScript</span>
|
|
<span class="plain">* </span><span class="identifier">special</span><span class="plain"> -> </span><span class="identifier">TestScript</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'trace'</span>
|
|
<span class="plain">* -> </span><span class="identifier">TraceOn</span>
|
|
<span class="plain">* </span><span class="identifier">number</span><span class="plain"> -> </span><span class="identifier">TraceLevel</span>
|
|
<span class="plain">* </span><span class="character">'on'</span><span class="plain"> -> </span><span class="identifier">TraceOn</span>
|
|
<span class="plain">* </span><span class="character">'off'</span><span class="plain"> -> </span><span class="identifier">TraceOff</span><span class="plain">;</span>
|
|
<span class="identifier">Verb</span><span class="plain"> </span><span class="identifier">meta</span><span class="plain"> </span><span class="character">'tree'</span>
|
|
<span class="plain">* -> </span><span class="identifier">XTree</span>
|
|
<span class="plain">* </span><span class="identifier">scope</span><span class="plain">=</span><span class="identifier">testcommandnoun</span><span class="plain"> -> </span><span class="identifier">XTree</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP19"></a><b>§19. End testy. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="S-tm.html">Back to 'Time Template'</a></li><li><a href="S-chr.html">Continue with 'Chronology Template'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|