1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 08:34:22 +03:00
inform7/docs/if-module/4-ai.html
2020-03-22 10:50:19 +00:00

418 lines
58 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>4/nap</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"><b>compiler</b></a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul>
<h2>Compiler Webs</h2>
<ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul>
<h2>Inbuild Modules</h2>
<ul>
<li><a href="../inbuild-module/index.html">inbuild</a></li>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../html-module/index.html">html</a></li>
</ul>
<h2>Inform7 Modules</h2>
<ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul>
<h2>Inter Modules</h2>
<ul>
<li><a href="../inter-module/index.html">inter</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of '4/ai' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Actions Index</b></li></ul><p class="purpose">To construct the Actions index page.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>The following modest structure is used for the indexing of command verbs,
and is too deeply boring to comment upon. These are the headwords of commands
which can be typed at run-time, like QUIT or INVENTORY. For indexing purposes,
we divide these headwords into five "natures":
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">NORMAL_COMMAND</span><span class="plain"> 1</span>
<span class="definitionkeyword">define</span> <span class="constant">ALIAS_COMMAND</span><span class="plain"> 2</span>
<span class="definitionkeyword">define</span> <span class="constant">OUT_OF_WORLD_COMMAND</span><span class="plain"> 3</span>
<span class="definitionkeyword">define</span> <span class="constant">TESTING_COMMAND</span><span class="plain"> 4</span>
<span class="definitionkeyword">define</span> <span class="constant">BARE_DIRECTION_COMMAND</span><span class="plain"> 5</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">command_index_entry</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nature</span><span class="plain">; </span> <span class="comment">one of the above values</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command_headword</span><span class="plain">; </span> <span class="comment">text of command headword, such as "REMOVE"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv_indexed</span><span class="plain">; </span> <span class="comment">...leading to...</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">next_alphabetically</span><span class="plain">; </span> <span class="comment">next in linked list</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">command_index_entry</span><span class="plain">;</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">sorted_command_index</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">in alphabetical order of <code class="display"><span class="extract">text</span></code></span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure command_index_entry is private to this section.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::index_meta_verb</span><span class="plain">(</span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">vie</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">command_index_entry</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">, </span><span class="string">"%s"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;nature</span><span class="plain"> = </span><span class="constant">OUT_OF_WORLD_COMMAND</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;gv_indexed</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::test_verb</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">vie</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">command_index_entry</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;nature</span><span class="plain"> = </span><span class="constant">TESTING_COMMAND</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;gv_indexed</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::verb_definition</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">trueverb</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = 1;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[0] == 0) || (</span><span class="identifier">p</span><span class="plain">[1] == 0)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">trueverb</span><span class="plain">) &gt; 0) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">trueverb</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"0"</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">trueverb</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">))</span>
<span class="functiontext">PL::Parsing::Verbs::index_command_aliases</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="functiontext">PL::Parsing::Verbs::find_command</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=1; </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]; </span><span class="identifier">i</span><span class="plain">++) </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="character">' '</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]; </span><span class="identifier">i</span><span class="plain">++) </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != </span><span class="character">' '</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'"'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;quot;"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="functiontext">PL::Actions::Index::vie_new_from</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">headword</span><span class="plain">, </span><span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">nature</span><span class="plain">) {</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">vie</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">command_index_entry</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">, </span><span class="string">"%w"</span><span class="plain">, </span><span class="identifier">headword</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;nature</span><span class="plain"> = </span><span class="identifier">nature</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;gv_indexed</span><span class="plain"> = </span><span class="identifier">gv</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">vie</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::commands</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">command_index_entry</span><span class="plain"> *</span><span class="identifier">vie</span><span class="plain">, *</span><span class="identifier">vie2</span><span class="plain">, *</span><span class="identifier">last_vie2</span><span class="plain">, *</span><span class="identifier">list_start</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">head_letter</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">gv</span><span class="plain">, </span><span class="reserved">grammar_verb</span><span class="plain">)</span>
<span class="functiontext">PL::Parsing::Verbs::make_command_index_entries</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">command_index_entry</span><span class="plain">);</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"0"</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;nature</span><span class="plain"> = </span><span class="constant">BARE_DIRECTION_COMMAND</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;gv_indexed</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">, </span><span class="reserved">command_index_entry</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list_start</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">list_start</span><span class="plain"> = </span><span class="identifier">vie</span><span class="plain">; </span><span class="reserved">continue</span><span class="plain">; }</span>
<span class="identifier">vie2</span><span class="plain"> = </span><span class="identifier">list_start</span><span class="plain">;</span>
<span class="identifier">last_vie2</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">vie2</span><span class="plain"> &amp;&amp; (</span><span class="identifier">Str::cmp</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">, </span><span class="identifier">vie2</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">) &gt; 0)) {</span>
<span class="identifier">last_vie2</span><span class="plain"> = </span><span class="identifier">vie2</span><span class="plain">;</span>
<span class="identifier">vie2</span><span class="plain"> = </span><span class="identifier">vie2</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">last_vie2</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">list_start</span><span class="plain">; </span><span class="identifier">list_start</span><span class="plain"> = </span><span class="identifier">vie</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">last_vie2</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">vie</span><span class="plain">; </span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain"> = </span><span class="identifier">vie2</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">list_start</span><span class="plain">, </span><span class="identifier">head_letter</span><span class="plain"> = 0; </span><span class="identifier">vie</span><span class="plain">; </span><span class="identifier">vie</span><span class="plain"> = </span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;next_alphabetically</span><span class="plain">) {</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">) != </span><span class="identifier">head_letter</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">head_letter</span><span class="plain">) </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="identifier">head_letter</span><span class="plain"> = </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">gv</span><span class="plain"> = </span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;gv_indexed</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;nature</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NORMAL_COMMAND</span><span class="plain">:</span>
<span class="functiontext">PL::Parsing::Verbs::index_normal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">, </span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ALIAS_COMMAND</span><span class="plain">:</span>
<span class="functiontext">PL::Parsing::Verbs::index_alias</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">, </span><span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OUT_OF_WORLD_COMMAND</span><span class="plain">:</span>
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"800000"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;quot;%S&amp;quot;, &lt;i&gt;a command for controlling play&lt;/i&gt;"</span><span class="plain">,</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">);</span>
<span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TESTING_COMMAND</span><span class="plain">:</span>
<span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"800000"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;quot;%S&amp;quot;, &lt;i&gt;a testing command not available "</span>
<span class="string">"in the final game&lt;/i&gt;"</span><span class="plain">,</span>
<span class="identifier">vie</span><span class="plain">-</span><span class="element">&gt;command_headword</span><span class="plain">);</span>
<span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BARE_DIRECTION_COMMAND</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;quot;[direction]&amp;quot; - &lt;i&gt;Going&lt;/i&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::alphabetical</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nr</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain">);</span>
<span class="reserved">action_name</span><span class="plain"> **</span><span class="identifier">sorted</span><span class="plain"> = </span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *), </span><span class="identifier">INDEX_SORTING_MREASON</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sorted</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Sort the action names</span> <span class="cwebmacronumber">3.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Tabulate the action names</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
<span class="identifier">Memory::I7_array_free</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">INDEX_SORTING_MREASON</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *));</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function PL::Actions::Index::index_meta_verb appears nowhere else.</p>
<p class="endnote">The function PL::Actions::Index::test_verb is used in 5/gv (<a href="5-gv.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function PL::Actions::Index::verb_definition is used in 5/gl (<a href="5-gl.html#SP22">&#167;22</a>, <a href="5-gl.html#SP25">&#167;25</a>, <a href="5-gl.html#SP26">&#167;26</a>).</p>
<p class="endnote">The function PL::Actions::Index::vie_new_from is used in 5/gv (<a href="5-gv.html#SP12">&#167;12</a>).</p>
<p class="endnote">The function PL::Actions::Index::commands appears nowhere else.</p>
<p class="endnote">The function PL::Actions::Index::alphabetical appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP3_1"></a><b>&#167;3.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Tabulate the action names</span> <span class="cwebmacronumber">3.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">HTML::begin_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, 0, 0, 0, 0);</span>
<span class="identifier">HTML::first_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;action&lt;/b&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;noun&lt;/b&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;second noun&lt;/b&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">HTML::first_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain"> = </span><span class="identifier">sorted</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">an</span><span class="plain">-</span><span class="element">&gt;out_of_world</span><span class="plain">) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"800000"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;out_of_world</span><span class="plain">) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="identifier">Index::detail_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"A"</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;requires_light</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &lt;i&gt;requires light&lt;/i&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-&gt;</span><span class="identifier">max_parameters</span><span class="plain"> &lt; 1) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;mdash;"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;noun_access</span><span class="plain"> == </span><span class="constant">REQUIRES_ACCESS</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;touchable&lt;/i&gt; "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;noun_access</span><span class="plain"> == </span><span class="constant">REQUIRES_POSSESSION</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;carried&lt;/i&gt; "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;"</span><span class="plain">); </span><span class="identifier">Kinds::Index::index_kind</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;noun_kind</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/b&gt;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-&gt;</span><span class="identifier">max_parameters</span><span class="plain"> &lt; 2) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;mdash;"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;second_access</span><span class="plain"> == </span><span class="constant">REQUIRES_ACCESS</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;touchable&lt;/i&gt; "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;second_access</span><span class="plain"> == </span><span class="constant">REQUIRES_POSSESSION</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;carried&lt;/i&gt; "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;"</span><span class="plain">); </span><span class="identifier">Kinds::Index::index_kind</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;second_kind</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/b&gt;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP3_2"></a><b>&#167;3.2. </b>As usual, we sort with the C library's <code class="display"><span class="extract">qsort</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Sort the action names</span> <span class="cwebmacronumber">3.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = 0;</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">) </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">++] = </span><span class="identifier">an</span><span class="plain">;</span>
<span class="identifier">qsort</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *), </span><span class="functiontext">PL::Actions::Index::compare_action_names</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>The following means the table is sorted in alphabetical order of action name.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::compare_action_names</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an1</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">action_name</span><span class="plain"> **) </span><span class="identifier">ent1</span><span class="plain">);</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an2</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">action_name</span><span class="plain"> **) </span><span class="identifier">ent2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wordings::strcmp</span><span class="plain">(</span><span class="identifier">an1</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">, </span><span class="identifier">an2</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function PL::Actions::Index::compare_action_names is used in <a href="#SP3_2">&#167;3.2</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::page</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">par_count</span><span class="plain"> = 0;</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">;</span>
<span class="identifier">heading</span><span class="plain"> *</span><span class="identifier">current_area</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_par</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">f</span><span class="plain"> = </span><span class="functiontext">PL::Actions::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">, 1, &amp;</span><span class="identifier">ext</span><span class="plain">, &amp;</span><span class="identifier">current_area</span><span class="plain">, </span><span class="identifier">f</span><span class="plain">, &amp;</span><span class="identifier">new_par</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">new_par</span><span class="plain">) </span><span class="identifier">par_count</span><span class="plain">++;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_index_group</span><span class="plain"> = </span><span class="identifier">par_count</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain">) </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::detail_pages</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">;</span>
<span class="identifier">heading</span><span class="plain"> *</span><span class="identifier">current_area</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="identifier">Index::open_file</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"A.html"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&lt;Actions"</span><span class="plain">,</span>
<span class="identifier">an</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Detail view"</span><span class="plain">);</span>
<span class="identifier">f</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_par</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an2</span><span class="plain">;</span>
<span class="identifier">current_area</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">an2</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an2</span><span class="plain">-</span><span class="element">&gt;an_index_group</span><span class="plain"> == </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_index_group</span><span class="plain">)</span>
<span class="identifier">f</span><span class="plain"> = </span><span class="functiontext">PL::Actions::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">an2</span><span class="plain">, 1, &amp;</span><span class="identifier">ext</span><span class="plain">, &amp;</span><span class="identifier">current_area</span><span class="plain">, </span><span class="identifier">f</span><span class="plain">, &amp;</span><span class="identifier">new_par</span><span class="plain">, (</span><span class="identifier">an2</span><span class="plain"> == </span><span class="identifier">an</span><span class="plain">)?</span><span class="identifier">TRUE</span><span class="plain">:</span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain">) </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="functiontext">PL::Actions::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">, 2, &amp;</span><span class="identifier">ext</span><span class="plain">, &amp;</span><span class="identifier">current_area</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, &amp;</span><span class="identifier">new_par</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::tokens</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"In addition to the tokens listed below, any description of an object "</span>
<span class="string">"or value can be used: for example, \</span><span class="plain">"</span><span class="string">[number]\</span><span class="plain">"</span><span class="string"> matches text like 127 or "</span>
<span class="string">" SIX, and \</span><span class="plain">"</span><span class="string">[open door]\</span><span class="plain">"</span><span class="string"> matches the name of any nearby door which is "</span>
<span class="string">"currently open."</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Names of objects are normally understood only when they are within "</span>
<span class="string">"sight, but writing 'any' lifts this restriction. So \</span><span class="plain">"</span><span class="string">[any person]\</span><span class="plain">"</span><span class="string"> allows "</span>
<span class="string">"every name of a person, wherever they happen to be."</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Verbs::index_tokens</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Index::index_for_extension</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">) {</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">acn</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">kc</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">acn</span><span class="plain">, </span><span class="reserved">action_name</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">acn</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">)) == </span><span class="identifier">E</span><span class="plain">-&gt;</span><span class="identifier">read_into_file</span><span class="plain">)</span>
<span class="identifier">kc</span><span class="plain"> = </span><span class="identifier">Extensions::Files::document_headword</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kc</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">, </span><span class="string">"Actions"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"action"</span><span class="plain">,</span>
<span class="identifier">acn</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kc</span><span class="plain"> != 0) </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function PL::Actions::Index::page appears nowhere else.</p>
<p class="endnote">The function PL::Actions::Index::detail_pages appears nowhere else.</p>
<p class="endnote">The function PL::Actions::Index::tokens appears nowhere else.</p>
<p class="endnote">The function PL::Actions::Index::index_for_extension appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="4-nap.html">Back to 'Named Action Patterns'</a></li><li><i>(This section ends Chapter 4: Actions.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>