1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 16:44:21 +03:00
inform7/docs/BasicInformExtrasKit/S-msc.html
2020-03-19 00:11:25 +00:00

455 lines
67 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Booklet Title</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="../webs.html">Sources</a></h1>
<ul>
<li><a href="../compiler.html">compiler</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html"><b>extensions and kits</b></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="../WorldModelKit/index.html">WorldModelKit</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'S/msc' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformExtrasKit</a></li><li><b>Miscellany</b></li></ul><p class="purpose">Additions to the Basic Inform template which are needed only if the Standard Rules are not to be used.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Justification</a></li><li><a href="#SP2">&#167;2. Miscellany</a></li><li><a href="#SP3">&#167;3. Veneer</a></li><li><a href="#SP4">&#167;4. Short Name Storage</a></li><li><a href="#SP5">&#167;5. Object Names I</a></li><li><a href="#SP6">&#167;6. Standard Name Printing Rule</a></li><li><a href="#SP7">&#167;7. Object Names II</a></li><li><a href="#SP8">&#167;8. Object Names III</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Justification. </b>Q. Why isn't all of this done with conditional compilation in the Basic Inform
template files? A. That wouldn't work, since template files are assimilated
before it is known how they will be used.
</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Miscellany. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">DefaultTopic</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">; ];</span>
<span class="plain">[ </span><span class="identifier">PrintSnippet</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">; ];</span>
<span class="plain">[ </span><span class="identifier">LIST_WRITER_INTERNAL_RM</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" and "</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">RunTimeProblemShowWM</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> </span><span class="identifier">y</span><span class="plain"> </span><span class="identifier">z</span><span class="plain">; ];</span>
<span class="plain">[ </span><span class="identifier">OwnerOf</span><span class="plain"> </span><span class="identifier">o</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="reserved">nothing</span><span class="plain">; ];</span>
<span class="plain">[ </span><span class="identifier">MoveObject</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="plain">[ </span><span class="identifier">WriteListOfMarkedObjects</span><span class="plain"> </span><span class="identifier">in_style</span>
<span class="identifier">obj</span><span class="plain"> </span><span class="identifier">c</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">ofclass</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> &amp;&amp; </span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">workflag2</span><span class="plain">) {</span>
<span class="identifier">c</span><span class="plain">++;</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">ofclass</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> &amp;&amp; </span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">workflag2</span><span class="plain">) {</span>
<span class="identifier">PrintShortName</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="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> </span><span class="string">", "</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">Main</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">max_z_object</span><span class="plain"> = #</span><span class="identifier">largest_object</span><span class="plain"> </span><span class="constant">-</span><span class="plain"> </span><span class="constant">255</span><span class="plain">; #</span><span class="identifier">endif</span><span class="plain">;</span>
<span class="identifier">VM_Initialise</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">INITIALISE_MEMORY_R</span><span class="plain">();</span>
<span class="identifier">SEED_RANDOM_NUMBER_GENERATOR_R</span><span class="plain">();</span>
<span class="identifier">Submain</span><span class="plain">();</span>
<span class="plain">];</span>
<span class="reserved">Constant</span><span class="plain"> </span><span class="identifier">FBNA_PROP_NUMBER</span><span class="plain"> = </span><span class="identifier">MAX_POSITIVE_NUMBER</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">INITIALISE_MEMORY_R</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="identifier">VM_PreInitialise</span><span class="plain">(); #</span><span class="identifier">Endif</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">LanguageInitialise</span><span class="plain">; </span><span class="identifier">LanguageInitialise</span><span class="plain">(); #</span><span class="identifier">Endif</span><span class="plain">;</span>
<span class="identifier">CreatePropertyOffsets</span><span class="plain">();</span>
<span class="identifier">HeapInitialise</span><span class="plain">(); </span><span class="comment">! Create a completely unused memory allocation heap</span>
<span class="identifier">StackFramingInitialise</span><span class="plain">(); </span><span class="comment">! Create an empty stack</span>
<span class="identifier">CreateDynamicRelations</span><span class="plain">(); </span><span class="comment">! Create relation structures on the heap</span>
<span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">DrawStatusLine</span><span class="plain"> </span><span class="identifier">width</span><span class="plain"> </span><span class="identifier">posb</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Veneer. </b></p>
<pre class="display">
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">VM_Initialise</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">standard_interpreter</span><span class="plain"> = </span><span class="identifier">HDR_TERPSTANDARD</span><span class="plain">--&gt;0;</span>
<span class="identifier">top_object</span><span class="plain"> = #</span><span class="identifier">largest_object</span><span class="plain">-255;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TEMPLATE_CONFIGURATION_BITMAP</span><span class="plain"> &amp; </span><span class="identifier">FIX_RNG_TCBIT</span><span class="plain">) {</span>
<span class="plain">@</span><span class="reserved">random</span><span class="plain"> </span><span class="constant">10000</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="constant">-</span><span class="identifier">i</span><span class="plain">-2000;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"[Random number generator seed is "</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">random</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </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">OC__Cl</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jl</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> ?</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">max_z_object</span><span class="plain"> ?</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> </span><span class="identifier">Class</span><span class="plain"> ?</span><span class="identifier">ObjOrClass</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Routine</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?</span><span class="identifier">RoutOrStr</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> ?~</span><span class="identifier">Mistake</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">get_prop_addr</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">a</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">get_prop_len</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">div</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Loop</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">loadw</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jl</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> ?</span><span class="identifier">Loop</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">ObjOrClass</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> ?</span><span class="identifier">JustObj</span><span class="plain">;</span>
<span class="comment">! So now cla is Class</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?~</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</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="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">JustObj</span><span class="plain">;</span>
<span class="comment">! So now cla is Object</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?~</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</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="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">RoutOrStr</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?~</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">call_2s</span><span class="plain"> </span><span class="identifier">Z__Region</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Mistake</span><span class="plain">;</span>
<span class="identifier">RT__Err</span><span class="plain">(</span><span class="string">"apply 'ofclass' for"</span><span class="plain">, </span><span class="identifier">cla</span><span class="plain">, </span><span class="constant">-1</span><span class="plain">);</span>
<span class="reserved">rfalse</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="SP4"></a><b>&#167;4. Short Name Storage. </b>None of the following functions should be called for the Z-machine if the
short name exceeds the size of the following buffer: whereas the Glulx
implementation of <code class="display"><span class="extract">VM_PrintToBuffer</span></code> will safely truncate overlong text,
that's impossible for the Z-machine, and horrible results will follow.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">CPrintOrRun</span></code> is a variation on <code class="display"><span class="extract">PrintOrRun</span></code>, simplified by not needing
to handle entire paragraphs (so, no fuss about dividing) but complicated
by having to capitalise the first letter. We do this by writing to the
buffer and then altering the first character.
</p>
<pre class="display">
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">StorageForShortName</span><span class="plain"> </span><span class="identifier">buffer</span><span class="plain"> </span><span class="constant">250</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">CPrintOrRun</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">prop</span><span class="plain"> </span><span class="identifier">v</span><span class="plain"> </span><span class="identifier">length</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">obj</span><span class="plain"> </span><span class="reserved">ofclass</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">Routine</span><span class="plain">) || (</span><span class="identifier">prop</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">))</span>
<span class="identifier">VM_PrintToBuffer</span><span class="plain"> (</span><span class="identifier">StorageForShortName</span><span class="plain">, </span><span class="constant">160</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">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">prop</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="reserved">metaclass</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">prop</span><span class="plain">) == </span><span class="identifier">Routine</span><span class="plain"> </span><span class="reserved">or</span><span class="plain"> </span><span class="identifier">String</span><span class="plain">)</span>
<span class="identifier">VM_PrintToBuffer</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain">, </span><span class="constant">160</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">prop</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">RunTimeError</span><span class="plain">(2, </span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">prop</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">length</span><span class="plain"> = </span><span class="identifier">StorageForShortName</span><span class="plain">--&gt;0;</span>
<span class="identifier">StorageForShortName</span><span class="plain">-&gt;</span><span class="identifier">WORDSIZE</span><span class="plain"> = </span><span class="identifier">VM_LowerToUpperCase</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain">-&gt;</span><span class="identifier">WORDSIZE</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">WORDSIZE</span><span class="plain">: </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">length</span><span class="plain">+</span><span class="identifier">WORDSIZE</span><span class="plain">: </span><span class="identifier">i</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">StorageForShortName</span><span class="plain">-&gt;</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">&gt;</span><span class="identifier">WORDSIZE</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">return</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">Cap</span><span class="plain"> </span><span class="identifier">str</span><span class="plain"> </span><span class="identifier">nocaps</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nocaps</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">str</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">CPrintOrRun</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Object Names I. </b>We now begin the work of printing object names. In the lowest level of this
process we print just the name itself (without articles attached), and we
do it by carrying out an activity.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">PSN__</span><span class="plain"> </span><span class="identifier">o</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">o</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">LIST_WRITER_INTERNAL_RM</span><span class="plain">(</span><span class="character">'Y'</span><span class="plain">); </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="reserved">metaclass</span><span class="plain">(</span><span class="identifier">o</span><span class="plain">)) {</span>
<span class="identifier">Routine</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;routine "</span><span class="plain">, </span><span class="identifier">o</span><span class="plain">, </span><span class="string">"&gt;"</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="identifier">String</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;string ~"</span><span class="plain">, (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">o</span><span class="plain">, </span><span class="string">"~&gt;"</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="reserved">nothing</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;illegal object number "</span><span class="plain">, </span><span class="identifier">o</span><span class="plain">, </span><span class="string">"&gt;"</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">RegardingSingleObject</span><span class="plain">(</span><span class="identifier">o</span><span class="plain">);</span>
<span class="identifier">CarryOutActivity</span><span class="plain">(</span><span class="identifier">PRINTING_THE_NAME_ACT</span><span class="plain">, </span><span class="identifier">o</span><span class="plain">);</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">PrintShortName</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">indef_mode</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">PSN__</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">); </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Standard Name Printing Rule. </b>In its initial state, the "printing the name of" activity has just one rule:
the following "for" rule.
</p>
<pre class="display">
<span class="identifier">Global</span><span class="plain"> </span><span class="identifier">caps_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">STANDARD_NAME_PRINTING_R</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="identifier">obj</span><span class="plain"> = </span><span class="identifier">parameter_value</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="constant">0</span><span class="plain">) {</span>
<span class="identifier">LIST_WRITER_INTERNAL_RM</span><span class="plain">(</span><span class="character">'Y'</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="reserved">metaclass</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">)) {</span>
<span class="identifier">Routine</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;routine "</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">"&gt;"</span><span class="plain">; </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">String</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;string ~"</span><span class="plain">, (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">"~&gt;"</span><span class="plain">; </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">nothing</span><span class="plain">: </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"&lt;illegal object number "</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">, </span><span class="string">"&gt;"</span><span class="plain">; </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">LanguagePrintShortName</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">LanguagePrintShortName</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">! LanguagePrintShortName</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indef_mode</span><span class="plain"> &amp;&amp; </span><span class="identifier">obj</span><span class="plain">.&amp;</span><span class="identifier">short_name_indef</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain"> &amp;&amp;</span>
<span class="identifier">PrintOrRun</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">short_name_indef</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">caps_mode</span><span class="plain"> &amp;&amp;</span>
<span class="identifier">obj</span><span class="plain">.&amp;</span><span class="identifier">cap_short_name</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain"> &amp;&amp; </span><span class="identifier">PrintOrRun</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">cap_short_name</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">caps_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain">.&amp;</span><span class="identifier">short_name</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain"> &amp;&amp; </span><span class="identifier">PrintOrRun</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">short_name</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">print</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="plain">];</span>
<span class="plain">[ </span><span class="identifier">STANDARD_PLURAL_NAME_PRINTING_R</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="identifier">obj</span><span class="plain"> = </span><span class="identifier">parameter_value</span><span class="plain">;</span>
<span class="identifier">PrintOrRun</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">plural</span><span class="plain">, </span><span class="reserved">true</span><span class="plain">);</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Object Names II. </b>The second level of the system for printing object names handles the placing
of articles in front of them: the red herring, an elephant,
Some bread. The following routine allows us to choose:
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(a) <code class="display"><span class="extract">obj</span></code>, the object whose name is to be printed;
</li><li>(b) <code class="display"><span class="extract">acode</span></code>, the kind of article needed: capitalised definite (0), lower case
uncapitalised definite (1), or uncapitalised indefinite (2);
</li><li>(c) <code class="display"><span class="extract">pluralise</span></code>, a flag forcing to a plural form (e.g., "some" being the
pluralised form of an indefinite article in English);
</li><li>(d) <code class="display"><span class="extract">capitalise</span></code>, a flag forcing us to capitalise the article &mdash; it's by
setting this that we can achieve the fourth option missing from (b), viz.,
capitalised indefinite. (All of this is a legacy design from a time when
the I6 library did not support capitalised indefinite articles.)
</li></ul>
<p class="inwebparagraph">The routine then looks after issues such as which contraction form to
use: for instance, in English, whether to use "a" or "an" for the
indefinite singular depends on the text of the object's name.
</p>
<pre class="display">
<span class="identifier">Global</span><span class="plain"> </span><span class="identifier">short_name_case</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">PrefaceByArticle</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">acode</span><span class="plain"> </span><span class="identifier">pluralise</span><span class="plain"> </span><span class="identifier">capitalise</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="identifier">artform</span><span class="plain"> </span><span class="identifier">findout</span><span class="plain"> </span><span class="identifier">artval</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">articles</span><span class="plain">) {</span>
<span class="identifier">artval</span><span class="plain">=(</span><span class="identifier">obj</span><span class="plain">.&amp;</span><span class="identifier">articles</span><span class="plain">)--&gt;(</span><span class="identifier">acode</span><span class="plain">+</span><span class="identifier">short_name_case</span><span class="plain">*</span><span class="identifier">LanguageCases</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">capitalise</span><span class="plain">)</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">Cap</span><span class="plain">) </span><span class="identifier">artval</span><span class="plain">, </span><span class="string">" "</span><span class="plain">;</span>
<span class="reserved">else</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="reserved">string</span><span class="plain">) </span><span class="identifier">artval</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">pluralise</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="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">GetGNAOfObject</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">pluralise</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="constant">3</span><span class="plain"> || (</span><span class="identifier">i</span><span class="plain"> &gt;= </span><span class="constant">6</span><span class="plain"> &amp;&amp; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="constant">9</span><span class="plain">)) </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain"> + </span><span class="constant">3</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">LanguageGNAsToArticles</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">artform</span><span class="plain"> = </span><span class="identifier">LanguageArticles</span>
<span class="plain">+ </span><span class="constant">3</span><span class="plain">*</span><span class="identifier">WORDSIZE</span><span class="plain">*</span><span class="identifier">LanguageContractionForms</span><span class="plain">*(</span><span class="identifier">short_name_case</span><span class="plain"> + </span><span class="identifier">i</span><span class="plain">*</span><span class="identifier">LanguageCases</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">LanguageContractionForms</span><span class="plain">) {</span>
<span class="constant">2</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">3</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="constant">4</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain"> ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+3) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+6) ~= </span><span class="identifier">artform</span><span class="plain">--&gt;(</span><span class="identifier">acode</span><span class="plain">+9)) </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">findout</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">standard_interpreter</span><span class="plain"> ~= </span><span class="constant">0</span><span class="plain"> &amp;&amp; </span><span class="identifier">findout</span><span class="plain">) {</span>
<span class="identifier">StorageForShortName</span><span class="plain">--&gt;0 = </span><span class="constant">160</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> </span><span class="constant">3</span><span class="plain"> </span><span class="identifier">StorageForShortName</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pluralise</span><span class="plain">) </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">number</span><span class="plain">) </span><span class="identifier">pluralise</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">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> </span><span class="constant">-3</span><span class="plain">;</span>
<span class="identifier">acode</span><span class="plain"> = </span><span class="identifier">acode</span><span class="plain"> + </span><span class="constant">3</span><span class="plain">*</span><span class="identifier">LanguageContraction</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain"> + </span><span class="constant">2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Ifnot</span><span class="plain">; </span><span class="comment">! TARGET_GLULX</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">findout</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pluralise</span><span class="plain">)</span>
<span class="identifier">Glulx_PrintAnyToArray</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain">, </span><span class="constant">160</span><span class="plain">, </span><span class="identifier">EnglishNumber</span><span class="plain">, </span><span class="identifier">pluralise</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">Glulx_PrintAnyToArray</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain">, </span><span class="constant">160</span><span class="plain">, </span><span class="identifier">PSN__</span><span class="plain">, </span><span class="identifier">obj</span><span class="plain">);</span>
<span class="identifier">acode</span><span class="plain"> = </span><span class="identifier">acode</span><span class="plain"> + </span><span class="constant">3</span><span class="plain">*</span><span class="identifier">LanguageContraction</span><span class="plain">(</span><span class="identifier">StorageForShortName</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">! TARGET_</span>
<span class="identifier">Cap</span><span class="plain"> (</span><span class="identifier">artform</span><span class="plain">--&gt;</span><span class="identifier">acode</span><span class="plain">, ~~</span><span class="identifier">capitalise</span><span class="plain">); </span><span class="comment">! print article</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pluralise</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="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Object Names III. </b>The routines accessible from outside this segment.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">IndefArt</span><span class="plain"> </span><span class="identifier">obj</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">obj</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">LIST_WRITER_INTERNAL_RM</span><span class="plain">(</span><span class="character">'Y'</span><span class="plain">); </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">indef_mode</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">proper</span><span class="plain">) { </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="reserved">return</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">article</span><span class="plain">) &amp;&amp; (</span><span class="identifier">TEXT_TY_Compare</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">article</span><span class="plain">, </span><span class="identifier">EMPTY_TEXT_VALUE</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="identifier">PrintOrRun</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="identifier">article</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="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PrefaceByArticle</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="constant">2</span><span class="plain">); </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">CIndefArt</span><span class="plain"> </span><span class="identifier">obj</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">obj</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">LIST_WRITER_INTERNAL_RM</span><span class="plain">(</span><span class="character">'X'</span><span class="plain">); </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">indef_mode</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">proper</span><span class="plain">) {</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">caps_mode</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">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">caps_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="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">article</span><span class="plain">) &amp;&amp; (</span><span class="identifier">TEXT_TY_Compare</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">article</span><span class="plain">, </span><span class="identifier">EMPTY_TEXT_VALUE</span><span class="plain">) ~= </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="identifier">TEXT_TY_Say_Capitalised</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">.</span><span class="identifier">article</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">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PrefaceByArticle</span><span class="plain">(</span><span class="identifier">obj</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="constant">1</span><span class="plain">); </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">DefArt</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">indef_mode</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="reserved">false</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">has</span><span class="plain"> </span><span class="identifier">proper</span><span class="plain">) {</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PrefaceByArticle</span><span class="plain">(</span><span class="identifier">obj</span><span class="plain">, </span><span class="constant">1</span><span class="plain">); </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">CDefArt</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">indef_mode</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="reserved">false</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">) &amp;&amp; (</span><span class="identifier">obj</span><span class="plain"> </span><span class="reserved">has</span><span class="plain"> </span><span class="identifier">proper</span><span class="plain">)) {</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">caps_mode</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">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">;</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">caps_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="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">has</span><span class="plain"> </span><span class="identifier">proper</span><span class="plain">) {</span>
<span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">PSN__</span><span class="plain">) </span><span class="identifier">obj</span><span class="plain">; </span><span class="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PrefaceByArticle</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="identifier">indef_mode</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">GetGNAOfObject</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">case</span><span class="plain"> </span><span class="identifier">gender</span><span class="plain">;</span>
<span class="comment">! if (obj hasnt animate) case = 6;</span>
<span class="comment">! if (obj has male) gender = male;</span>
<span class="comment">! if (obj has female) gender = female;</span>
<span class="comment">! if (obj has neuter) gender = neuter;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">gender</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">case</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">gender</span><span class="plain"> = </span><span class="identifier">LanguageAnimateGender</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">gender</span><span class="plain"> = </span><span class="identifier">LanguageInanimateGender</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="comment">! if (gender == female) case = case + 1;</span>
<span class="comment">! if (gender == neuter) case = case + 2;</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">pluralname</span><span class="plain">) </span><span class="identifier">case</span><span class="plain"> = </span><span class="identifier">case</span><span class="plain"> + </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">case</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">PNToVP</span><span class="plain"> </span><span class="identifier">gna</span><span class="plain">;</span>
<span class="comment">! if (prior_named_noun == player) return story_viewpoint;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prior_named_noun</span><span class="plain">) </span><span class="identifier">gna</span><span class="plain"> = </span><span class="identifier">GetGNAOfObject</span><span class="plain">(</span><span class="identifier">prior_named_noun</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">gna</span><span class="plain">%6)/3 == </span><span class="constant">1</span><span class="plain">) || (</span><span class="identifier">prior_named_list</span><span class="plain"> &gt;= </span><span class="constant">2</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Sections.)</i></li><li><a href="S-at.html">Continue with 'Activities Template'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>