1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-09 02:24:21 +03:00
inform7/docs/WorldModelKit/S-pt.html
2020-03-19 00:11:25 +00:00

539 lines
70 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>S/ot3</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/pt' 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">WorldModelKit</a></li><li><b>Printing Template</b></li></ul><p class="purpose">To manage the line skips which space paragraphs out, and to handle the printing of names of objects, pieces of text and numbers.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Prompt</a></li><li><a href="#SP2">&#167;2. Boxed Quotations</a></li><li><a href="#SP3">&#167;3. Score Notification</a></li><li><a href="#SP4">&#167;4. Print Rank</a></li><li><a href="#SP5">&#167;5. Status Line</a></li><li><a href="#SP6">&#167;6. Status Line Utilities</a></li><li><a href="#SP7">&#167;7. Banner</a></li><li><a href="#SP8">&#167;8. Short Name Storage</a></li><li><a href="#SP9">&#167;9. Object Names I</a></li><li><a href="#SP10">&#167;10. Standard Name Printing Rule</a></li><li><a href="#SP11">&#167;11. Internal Rule</a></li><li><a href="#SP12">&#167;12. Object Names II</a></li><li><a href="#SP13">&#167;13. Object Names III</a></li><li><a href="#SP14">&#167;14. Standard Response Issuing Rule</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Prompt. </b>This is the text printed just before we wait for the player's command: it
prompts him to type.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">PrintPrompt</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">RunTimeProblemShow</span><span class="plain">();</span>
<span class="identifier">ClearRTP</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="identifier">EnsureBreakBeforePrompt</span><span class="plain">();</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">CommandPromptText</span><span class="plain">());</span>
<span class="identifier">ClearBoxedText</span><span class="plain">();</span>
<span class="identifier">ClearParagraphing</span><span class="plain">(14);</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Boxed Quotations. </b>These appear once only, and happen outside of the paragraphing scheme: they
are normally overlaid as windows on top of the regular text. We can request
one at any time, but it will appear only at prompt time, when the screen is
fairly well guaranteed not to be scrolling. (Only fairly well since it's just
possible that Border Zone-like tricks with real-time play might be
going on, but whatever happens, there is at least a human-appreciable pause
in which the quotation can be read before being taken away again.)
</p>
<pre class="display">
<span class="identifier">Global</span><span class="plain"> </span><span class="identifier">pending_boxed_quotation</span><span class="plain">; </span><span class="comment">! a routine to overlay the quotation on screen</span>
<span class="plain">[ </span><span class="identifier">DisplayBoxedQuotation</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain">;</span>
<span class="identifier">pending_boxed_quotation</span><span class="plain"> = </span><span class="identifier">Q</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">ClearBoxedText</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">pending_boxed_quotation</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0: </span><span class="identifier">Runtime_Quotations_Displayed</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="reserved">if</span><span class="plain"> (</span><span class="identifier">Runtime_Quotations_Displayed</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> == </span><span class="identifier">pending_boxed_quotation</span><span class="plain">) {</span>
<span class="identifier">pending_boxed_quotation</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="plain">}</span>
<span class="identifier">Runtime_Quotations_Displayed</span><span class="plain">--&gt;</span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">pending_boxed_quotation</span><span class="plain">;</span>
<span class="identifier">ClearParagraphing</span><span class="plain">(15);</span>
<span class="identifier">pending_boxed_quotation</span><span class="plain">();</span>
<span class="identifier">ClearParagraphing</span><span class="plain">(16);</span>
<span class="identifier">pending_boxed_quotation</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Score Notification. </b>This doesn't really deserve to be at I6 level at all, but since we want a
fancy text style for Glulx, ...
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">NotifyTheScore</span><span class="plain"> </span><span class="identifier">d</span><span class="plain">;</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">USE_SCORING_TCBIT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">notify_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)) {</span>
<span class="identifier">DivideParagraphPoint</span><span class="plain">();</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">NOTE_VMSTY</span><span class="plain">);</span>
<span class="identifier">d</span><span class="plain"> = </span><span class="identifier">score</span><span class="plain">-</span><span class="identifier">last_score</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">ANNOUNCE_SCORE_RM</span><span class="plain">(</span><span class="character">'D'</span><span class="plain">, </span><span class="identifier">d</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">d</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">ANNOUNCE_SCORE_RM</span><span class="plain">(</span><span class="character">'E'</span><span class="plain">, </span><span class="constant">-</span><span class="identifier">d</span><span class="plain">); }</span>
<span class="reserved">new_line</span><span class="plain">;</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">NORMAL_VMSTY</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Print Rank. </b>The table of scoring ranks is a residue from the ancient times of early IF:
it gets a tiny amount of special treatment here, even though I7 works tend
not to use these now dated conventions.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">PrintRank</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">v</span><span class="plain">;</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">RANKING_TABLE_TCBIT</span><span class="plain">) {</span>
<span class="identifier">ANNOUNCE_SCORE_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">);</span>
<span class="identifier">j</span><span class="plain"> = </span><span class="identifier">TableRows</span><span class="plain">(</span><span class="identifier">RANKING_TABLE</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">j</span><span class="plain">:</span><span class="identifier">i</span><span class="plain">&gt;=1:</span><span class="identifier">i</span><span class="plain">--)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">score</span><span class="plain"> &gt;= </span><span class="identifier">TableLookUpEntry</span><span class="plain">(</span><span class="identifier">RANKING_TABLE</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)) {</span>
<span class="identifier">v</span><span class="plain"> = </span><span class="identifier">TableLookUpEntry</span><span class="plain">(</span><span class="identifier">RANKING_TABLE</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">v</span><span class="plain">);</span>
<span class="string">"."</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="string">"."</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Status Line. </b>Status line printing happens on the upper screen window, and outside of the
paragraph control system.
</p>
<p class="inwebparagraph">Support for version 6 of the Z-machine is best described as grudging. It
requires a heavily rewritten <code class="display"><span class="extract">DrawStatusLine</span></code> equivalent, to be found
in "ZMachine.i6t".
</p>
<pre class="display">
<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><span class="identifier">push</span><span class="plain"> </span><span class="identifier">say__p</span><span class="plain">; @</span><span class="identifier">push</span><span class="plain"> </span><span class="identifier">say__pc</span><span class="plain">;</span>
<span class="identifier">BeginActivity</span><span class="plain">(</span><span class="identifier">CONSTRUCTING_STATUS_LINE_ACT</span><span class="plain">);</span>
<span class="identifier">VM_StatusLineHeight</span><span class="plain">(1); </span><span class="identifier">VM_MoveCursorInStatusLine</span><span class="plain">(1, </span><span class="constant">1</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">statuswin_current</span><span class="plain">) {</span>
<span class="identifier">width</span><span class="plain"> = </span><span class="identifier">VM_ScreenWidth</span><span class="plain">(); </span><span class="identifier">posb</span><span class="plain"> = </span><span class="identifier">width</span><span class="plain">-15;</span>
<span class="reserved">spaces</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">;</span>
<span class="identifier">ClearParagraphing</span><span class="plain">(17);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ForActivity</span><span class="plain">(</span><span class="identifier">CONSTRUCTING_STATUS_LINE_ACT</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">) {</span>
<span class="identifier">VM_MoveCursorInStatusLine</span><span class="plain">(1, </span><span class="constant">2</span><span class="plain">);</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">left_hand_status_line</span><span class="plain">);</span>
<span class="identifier">VM_MoveCursorInStatusLine</span><span class="plain">(1, </span><span class="identifier">posb</span><span class="plain">);</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">right_hand_status_line</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">VM_MoveCursorInStatusLine</span><span class="plain">(1, </span><span class="constant">1</span><span class="plain">); </span><span class="identifier">VM_MainWindow</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="identifier">ClearParagraphing</span><span class="plain">(18);</span>
<span class="identifier">EndActivity</span><span class="plain">(</span><span class="identifier">CONSTRUCTING_STATUS_LINE_ACT</span><span class="plain">);</span>
<span class="plain">@</span><span class="identifier">pull</span><span class="plain"> </span><span class="identifier">say__pc</span><span class="plain">; @</span><span class="identifier">pull</span><span class="plain"> </span><span class="identifier">say__p</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Status Line Utilities. </b>Two convenient routines for the default values of <code class="display"><span class="extract">right_hand_status_line</span></code>
and <code class="display"><span class="extract">left_hand_status_line</span></code> respectively. <code class="display"><span class="extract">SL_Location</span></code> also implements the
text substitution "[player's surroundings]".
</p>
<pre class="display">
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">T_SL_Score_Moves</span><span class="plain"> </span><span class="constant">--</span><span class="plain">&gt; </span><span class="identifier">CONSTANT_PACKED_TEXT_STORAGE</span><span class="plain"> </span><span class="identifier">SL_Score_Moves</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">SL_Score_Moves</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">not_yet_in_play</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">TEMPLATE_CONFIGURATION_BITMAP</span><span class="plain"> &amp; </span><span class="identifier">USE_SCORING_TCBIT</span><span class="plain">)</span>
<span class="reserved">print</span><span class="plain"> </span><span class="identifier">sline1</span><span class="plain">, </span><span class="string">"/"</span><span class="plain">, </span><span class="identifier">sline2</span><span class="plain">;</span>
<span class="plain">];</span>
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">T_SL_Location</span><span class="plain"> </span><span class="constant">--</span><span class="plain">&gt; </span><span class="identifier">CONSTANT_PACKED_TEXT_STORAGE</span><span class="plain"> </span><span class="identifier">SL_Location</span><span class="plain">;</span>
<span class="plain">[ </span><span class="identifier">SL_Location</span><span class="plain"> </span><span class="identifier">even_before</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">not_yet_in_play</span><span class="plain">) &amp;&amp; (</span><span class="identifier">even_before</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="reserved">if</span><span class="plain"> (</span><span class="identifier">location</span><span class="plain"> == </span><span class="identifier">thedark</span><span class="plain">) {</span>
<span class="identifier">BeginActivity</span><span class="plain">(</span><span class="identifier">PRINTING_NAME_OF_DARK_ROOM_ACT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ForActivity</span><span class="plain">(</span><span class="identifier">PRINTING_NAME_OF_DARK_ROOM_ACT</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">)</span>
<span class="identifier">DARKNESS_NAME_INTERNAL_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">);</span>
<span class="identifier">EndActivity</span><span class="plain">(</span><span class="identifier">PRINTING_NAME_OF_DARK_ROOM_ACT</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">FindVisibilityLevels</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">visibility_ceiling</span><span class="plain"> == </span><span class="identifier">location</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">location</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">The</span><span class="plain">) </span><span class="identifier">visibility_ceiling</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">DARKNESS_NAME_INTERNAL_R</span><span class="plain">; ];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Banner. </b>Note that NI always compiles <code class="display"><span class="extract">Story</span></code> and <code class="display"><span class="extract">Headline</span></code> texts, but does not always
compile a <code class="display"><span class="extract">Story_Author</span></code>.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">Banner</span><span class="plain">;</span>
<span class="identifier">BeginActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ForActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">) == </span><span class="reserved">false</span><span class="plain">) {</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">HEADER_VMSTY</span><span class="plain">);</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">Story</span><span class="plain">);</span>
<span class="identifier">VM_Style</span><span class="plain">(</span><span class="identifier">NORMAL_VMSTY</span><span class="plain">);</span>
<span class="reserved">new_line</span><span class="plain">;</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">Headline</span><span class="plain">);</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">STORY_AUTHOR_TCBIT</span><span class="plain">) {</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" by "</span><span class="plain">; </span><span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">Story_Author</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">new_line</span><span class="plain">;</span>
<span class="identifier">VM_Describe_Release</span><span class="plain">();</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">" / Inform 7 build "</span><span class="plain">, (</span><span class="identifier">PrintI6Text</span><span class="plain">) </span><span class="identifier">NI_BUILD_COUNT</span><span class="plain">, </span><span class="string">" "</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"(I6/v"</span><span class="plain">; </span><span class="reserved">inversion</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">STRICT_MODE</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"S"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">! STRICT_MODE</span>
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">DEBUG</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"D"</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">! DEBUG</span>
<span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">EndActivity</span><span class="plain">(</span><span class="identifier">PRINTING_BANNER_TEXT_ACT</span><span class="plain">);</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. 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="SP9"></a><b>&#167;9. 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="SP10"></a><b>&#167;10. 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="reserved">if</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">if</span><span class="plain"> (</span><span class="identifier">indef_mode</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain"> &amp;&amp; </span><span class="identifier">caps_mode</span><span class="plain">) </span><span class="identifier">PRINT_PROTAGONIST_INTERNAL_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PRINT_PROTAGONIST_INTERNAL_RM</span><span class="plain">(</span><span class="character">'B'</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="SP11"></a><b>&#167;11. Internal Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">PRINT_PROTAGONIST_INTERNAL_R</span><span class="plain">; ];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. 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="SP13"></a><b>&#167;13. 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">obj</span><span class="plain"> == </span><span class="identifier">player</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>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. Standard Response Issuing Rule. </b>To print a response, we trigger off the response issuing activity. The following
is the default "for" rule for that activity:
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">STANDARD_RESPONSE_ISSUING_R</span><span class="plain">;</span>
<span class="identifier">RegardingSingleObject</span><span class="plain">();</span>
<span class="identifier">TEXT_TY_Say</span><span class="plain">(</span><span class="identifier">ResponseTexts</span><span class="plain">--&gt;(</span><span class="identifier">parameter_value</span><span class="plain"> </span><span class="constant">-</span><span class="plain"> </span><span class="constant">1</span><span class="plain">));</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="S-ot3.html">Back to 'OutOfWorld Template'</a></li><li><a href="S-wt.html">Continue with 'WorldModel Template'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>