mirror of
https://github.com/ganelson/inform.git
synced 2024-06-01 07:48:35 +03:00
Presentational improvements
This commit is contained in:
parent
528c68ce07
commit
0b70407916
|
@ -11,41 +11,21 @@
|
|||
<!--Weave of '1/arc' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">codegen</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Architecture</b></li></ul><p class="purpose">To deal with multiple inter architectures.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Architectures</a></li><li><a href="#SP2">§2. Prepare stage</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Current architecture</a></li><li><a href="#SP2">§2. Prepare stage</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Architectures. </b>These are simply enumerated, for now.
|
||||
</p>
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Current architecture. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">NO_ARCHITECTURE</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">A_16_ARCHITECTURE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">A_16D_ARCHITECTURE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">A_32_ARCHITECTURE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">A_32D_ARCHITECTURE</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">current_architecture</span><span class="plain"> = </span><span class="constant">NO_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="identifier">inter_architecture</span><span class="plain"> *</span><span class="identifier">current_architecture</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::set</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">setting</span><span class="plain"> = </span><span class="constant">NO_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"16"</span><span class="plain">)) </span><span class="identifier">setting</span><span class="plain"> = </span><span class="constant">A_16_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"32"</span><span class="plain">)) </span><span class="identifier">setting</span><span class="plain"> = </span><span class="constant">A_32_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"16d"</span><span class="plain">)) </span><span class="identifier">setting</span><span class="plain"> = </span><span class="constant">A_16D_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"32d"</span><span class="plain">)) </span><span class="identifier">setting</span><span class="plain"> = </span><span class="constant">A_32D_ARCHITECTURE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">setting</span><span class="plain"> == </span><span class="constant">NO_ARCHITECTURE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">current_architecture</span><span class="plain"> = </span><span class="identifier">setting</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">current_architecture</span><span class="plain"> = </span><span class="identifier">Architectures::from_codename</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_architecture</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::Architecture::leafname</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">current_architecture</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_16_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"arch-16"</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_16D_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"arch-16d"</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_32_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"arch-32"</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_32D_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"arch-32d"</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">inter_architecture</span><span class="plain"> *</span><span class="functiontext">CodeGen::Architecture::current</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">current_architecture</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -53,7 +33,7 @@
|
|||
|
||||
<p class="endnote">The function CodeGen::Architecture::set appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Architecture::leafname is used in 1/li (<a href="1-li.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function CodeGen::Architecture::current is used in 1/li (<a href="1-li.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Prepare stage. </b></p>
|
||||
|
||||
|
@ -64,14 +44,10 @@
|
|||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">current_architecture</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NO_ARCHITECTURE</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no architecture set"</span><span class="plain">);</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_16_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="identifier">step</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="reserved">case</span><span class="plain"> </span><span class="constant">A_16D_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">A_32_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="identifier">step</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">case</span><span class="plain"> </span><span class="constant">A_32D_ARCHITECTURE</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="identifier">step</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">return</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">current_architecture</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no architecture set"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">,</span>
|
||||
<span class="identifier">Architectures::is_16_bit</span><span class="plain">(</span><span class="identifier">current_architecture</span><span class="plain">),</span>
|
||||
<span class="identifier">Architectures::debug_enabled</span><span class="plain">(</span><span class="identifier">current_architecture</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_stage_inner</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">Z</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">D</span><span class="plain">) {</span>
|
||||
|
|
|
@ -48,11 +48,10 @@
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::LinkInstructions::run_link_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="reserved">link_instruction</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">link_instruction</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>requirements_list</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">, </span><span class="string">"%S.interb"</span><span class="plain">, </span><span class="functiontext">CodeGen::Architecture::leafname</span><span class="plain">());</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">arch_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>location</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_architecture</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="functiontext">CodeGen::Architecture::current</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">Errors::fatal</span><span class="plain">(</span><span class="string">"no -architecture given"</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">arch_file</span><span class="plain"> = </span><span class="identifier">Architectures::canonical_binary</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>location</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TextFiles::exists</span><span class="plain">(</span><span class="identifier">arch_file</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no arch file for requirement"</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">sidecar</span><span class="plain"> = </span><span class="identifier">Inter::Tree::new</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Binary::test_file</span><span class="plain">(</span><span class="identifier">arch_file</span><span class="plain">)) </span><span class="identifier">Inter::Binary::read</span><span class="plain">(</span><span class="identifier">sidecar</span><span class="plain">, </span><span class="identifier">arch_file</span><span class="plain">);</span>
|
||||
|
|
|
@ -27,8 +27,7 @@ have no meaningful contents when the step is not running.
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">target_argument</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">package_argument</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">parsed_filename</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">the_PP</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">the_N</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">the_PP</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">pathname</span></code></span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_debugging_log</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from_memory</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">repository_argument</span><span class="plain">;</span>
|
||||
|
@ -64,7 +63,6 @@ have no meaningful contents when the step is not running.
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>parsed_filename</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>text_out_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain"> = -1;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>to_debugging_log</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>from_memory</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>the_PP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
@ -275,7 +273,7 @@ logging:
|
|||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>memory_repository</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">,</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">PP</span><span class="plain">,</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">requirements_list</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</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">clock_t</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
|
@ -295,7 +293,6 @@ logging:
|
|||
<span class="functiontext">CodeGen::Pipeline::lint</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">);</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>the_PP</span><span class="plain"> = </span><span class="identifier">PP</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>pipeline</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">main_package</span><span class="plain">) </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(&</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_PP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(&</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_PP</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">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IBM</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no inter to link with"</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">template_file</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"none"</span><span class="plain">))</span>
|
||||
|
@ -44,8 +44,11 @@
|
|||
<span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">I6T_kit</span><span class="plain"> </span><span class="identifier">kit</span><span class="plain"> = </span><span class="functiontext">TemplateReader::kit_out</span><span class="plain">(&</span><span class="identifier">link_bookmark</span><span class="plain">, &(</span><span class="functiontext">CodeGen::MergeTemplate::receive_raw</span><span class="plain">), &(</span><span class="functiontext">CodeGen::MergeTemplate::receive_command</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">kit</span><span class="element">.no_i6t_file_areas</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">kit</span><span class="element">.i6t_files</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">PP</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Sections"</span><span class="plain">);</span>
|
||||
<span class="identifier">kit</span><span class="element">.no_i6t_file_areas</span><span class="plain"> = </span><span class="identifier">LinkedLists::len</span><span class="plain">(</span><span class="identifier">PP</span><span class="plain">);</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain">, </span><span class="identifier">PP</span><span class="plain">)</span>
|
||||
<span class="identifier">kit</span><span class="element">.i6t_files</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sections"</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain"> = </span><span class="identifier">EARLY_LINK_STAGE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">template_file</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"none"</span><span class="plain">)) </span><span class="identifier">stage</span><span class="plain"> = </span><span class="identifier">CATCH_ALL_LINK_STAGE</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">inference_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">property_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">property_permission_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">extension_file_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">rulebook_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">booking_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">phrase_option_array_MT</span>
|
||||
|
@ -52,9 +51,6 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">pcalc_prop_deferral_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">literal_pattern_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">generalisation_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">extension_census_datum_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">extension_dictionary_entry_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">known_extension_clash_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">i6_schema_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">list_together_routine_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">past_tense_condition_record_MT</span>
|
||||
|
@ -68,7 +64,6 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">ph_stack_frame_box_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">i6_inclusion_matter_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">literal_list_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">extension_identifier_database_entry_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">control_structure_phrase_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">adjective_meaning_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">adjective_meaning_block_MT</span>
|
||||
|
@ -79,7 +74,6 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">equation_node_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">placement_affecting_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">activity_crossref_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">VM_usage_note_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">invocation_options_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">inv_token_problem_token_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">application_array_MT</span>
|
||||
|
@ -95,7 +89,6 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">rule_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">rulebook_outcome_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">applicability_condition_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">natural_language_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">llist_entry_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">response_message_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">table_contribution_array_MT</span>
|
||||
|
@ -114,9 +107,7 @@
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">value_holster_array_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">adjective_iname_holder_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">label_namespace_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">inform_kit_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">inform_kit_ittt_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">element_activation_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">compile_task_data_MT</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Deep breath, then: the following macros define several hundred functions.
|
||||
</p>
|
||||
|
@ -138,9 +129,6 @@
|
|||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">equation_node</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">equation_symbol</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">equation</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">extension_census_datum</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">extension_dictionary_entry</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">generalisation</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">i6_inclusion_matter</span><span class="plain">)</span>
|
||||
|
@ -152,7 +140,6 @@
|
|||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">internal_test_case</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inv_token_problem_token</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">kind_interaction</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">known_extension_clash</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">list_together_routine</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">literal_list</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">literal_pattern_name</span><span class="plain">)</span>
|
||||
|
@ -162,7 +149,6 @@
|
|||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">measurement_definition</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">named_rulebook_outcome</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">nascent_array</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">nonlocal_variable</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">past_tense_action_record</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">past_tense_condition_record</span><span class="plain">)</span>
|
||||
|
@ -187,13 +173,10 @@
|
|||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">to_phrase_request</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">use_as_event</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">VM_usage_note</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">runtime_kind_structure</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">adjective_iname_holder</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">label_namespace</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inform_kit</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inform_kit_ittt</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">element_activation</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">compile_task_data</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -206,7 +189,6 @@
|
|||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">activity_crossref</span><span class="plain">, 100)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">activity_list</span><span class="plain">, 1000)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">application</span><span class="plain">, 100)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">extension_identifier_database_entry</span><span class="plain">, 100)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">i6_schema</span><span class="plain">, 100)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">instance_usage</span><span class="plain">, 200)</span>
|
||||
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">invocation_options</span><span class="plain">, 100)</span>
|
||||
|
@ -252,14 +234,13 @@ foundation module does that automatically.)
|
|||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">booking</span><span class="plain"> *, </span><span class="functiontext">Rules::Bookings::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">table_column</span><span class="plain"> *, </span><span class="functiontext">Tables::Columns::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">pcalc_prop</span><span class="plain"> *, </span><span class="functiontext">Calculus::Propositions::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">extension_dictionary_entry</span><span class="plain"> *, </span><span class="functiontext">Extensions::Dictionary::log_entry</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="identifier">extension_dictionary_entry</span><span class="plain"> *, </span><span class="identifier">Extensions::Dictionary::log_entry</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *, </span><span class="functiontext">Invocations::log_list</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *, </span><span class="functiontext">Invocations::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *, </span><span class="functiontext">Sentences::Headings::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">ph_type_data</span><span class="plain"> *, </span><span class="functiontext">Phrases::TypeData::Textual::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">inference</span><span class="plain"> *, </span><span class="functiontext">World::Inferences::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">i6_schema</span><span class="plain"> *, </span><span class="functiontext">Calculus::Schemas::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *, </span><span class="functiontext">NaturalLanguages::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *, </span><span class="functiontext">InferenceSubjects::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *, </span><span class="functiontext">Rulebooks::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">local_variable</span><span class="plain"> *, </span><span class="functiontext">LocalVariables::log</span><span class="plain">)</span>
|
||||
|
@ -273,7 +254,6 @@ foundation module does that automatically.)
|
|||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">ph_usage_data</span><span class="plain"> *, </span><span class="functiontext">Phrases::Usage::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *, </span><span class="identifier">Kinds::Textual::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER_I</span><span class="plain">(</span><span class="reserved">int</span><span class="plain">, </span><span class="functiontext">Sentences::VPs::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain"> *, </span><span class="functiontext">Extensions::Files::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *, </span><span class="functiontext">Properties::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="reserved">nonlocal_variable</span><span class="plain"> *, </span><span class="functiontext">NonlocalVariables::log</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILE_WRITER</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *, </span><span class="identifier">Nouns::log</span><span class="plain">)</span>
|
||||
|
@ -290,7 +270,6 @@ foundation module does that automatically.)
|
|||
<<span class="cwebmacro">Register this module's stream writers</span> <span class="cwebmacronumber">6.3</span>><span class="character">;</span>
|
||||
<<span class="cwebmacro">Register this module's debugging log aspects</span> <span class="cwebmacronumber">6.5</span>><span class="character">;</span>
|
||||
<<span class="cwebmacro">Register this module's debugging log writers</span> <span class="cwebmacronumber">6.6</span>><span class="character">;</span>
|
||||
<<span class="cwebmacro">Register this module's command line switches</span> <span class="cwebmacronumber">6.7</span>><span class="character">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -304,7 +283,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EXTENSION_DICTIONARY_MREASON</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">INDEX_SORTING_MREASON</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">INSTANCE_COUNTING_MREASON</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">MAP_INDEX_MREASON</span>
|
||||
|
@ -323,7 +301,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">Memory::reason_name</span><span class="plain">(</span><span class="constant">EXTENSION_DICTIONARY_MREASON</span><span class="plain">, </span><span class="string">"extension dictionary"</span><span class="plain">);</span>
|
||||
<span class="identifier">Memory::reason_name</span><span class="plain">(</span><span class="constant">INDEX_SORTING_MREASON</span><span class="plain">, </span><span class="string">"index sorting"</span><span class="plain">);</span>
|
||||
<span class="identifier">Memory::reason_name</span><span class="plain">(</span><span class="constant">INSTANCE_COUNTING_MREASON</span><span class="plain">, </span><span class="string">"instance-of-kind counting"</span><span class="plain">);</span>
|
||||
<span class="identifier">Memory::reason_name</span><span class="plain">(</span><span class="constant">MAP_INDEX_MREASON</span><span class="plain">, </span><span class="string">"map in the World index"</span><span class="plain">);</span>
|
||||
|
@ -350,7 +327,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<span class="identifier">Writers::register_writer_I</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">, &</span><span class="functiontext">CoreModule::writer</span><span class="plain">);</span>
|
||||
<span class="identifier">Writers::register_writer</span><span class="plain">(</span><span class="character">'I'</span><span class="plain">, &</span><span class="functiontext">Instances::writer</span><span class="plain">);</span>
|
||||
<span class="identifier">Writers::register_writer</span><span class="plain">(</span><span class="character">'L'</span><span class="plain">, &</span><span class="functiontext">LocalVariables::writer</span><span class="plain">);</span>
|
||||
<span class="identifier">Writers::register_writer</span><span class="plain">(</span><span class="character">'X'</span><span class="plain">, &</span><span class="functiontext">Extensions::IDs::writer</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -371,7 +347,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">DEBUGGING_LOG_CONTENTS_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">DESCRIPTION_COMPILATION_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EXPRESSIONS_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EXTENSIONS_CENSUS_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">FIGURE_CREATIONS_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">HEADINGS_DA</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">IMPLICATIONS_DA</span>
|
||||
|
@ -422,7 +397,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<span class="identifier">Log::declare_aspect</span><span class="plain">(</span><span class="constant">DEBUGGING_LOG_CONTENTS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"debugging log contents"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">DESCRIPTION_COMPILATION_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"description compilation"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">EXPRESSIONS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"expressions"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">EXTENSIONS_CENSUS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"extensions census"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">FIGURE_CREATIONS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"figure creations"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">HEADINGS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"headings"</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">Log::declare_aspect</span><span class="plain">(</span><span class="constant">IMPLICATIONS_DA</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"implications"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
|
@ -474,14 +448,13 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'b'</span><span class="plain">, </span><span class="functiontext">Rules::Bookings::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'C'</span><span class="plain">, </span><span class="functiontext">Tables::Columns::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'D'</span><span class="plain">, </span><span class="functiontext">Calculus::Propositions::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'d'</span><span class="plain">, </span><span class="functiontext">Extensions::Dictionary::log_entry</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'d'</span><span class="plain">, </span><span class="identifier">Extensions::Dictionary::log_entry</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'E'</span><span class="plain">, </span><span class="functiontext">Invocations::log_list</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'e'</span><span class="plain">, </span><span class="functiontext">Invocations::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'H'</span><span class="plain">, </span><span class="functiontext">Sentences::Headings::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'h'</span><span class="plain">, </span><span class="functiontext">Phrases::TypeData::Textual::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'I'</span><span class="plain">, </span><span class="functiontext">World::Inferences::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'i'</span><span class="plain">, </span><span class="functiontext">Calculus::Schemas::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'J'</span><span class="plain">, </span><span class="functiontext">NaturalLanguages::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'j'</span><span class="plain">, </span><span class="functiontext">InferenceSubjects::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'K'</span><span class="plain">, </span><span class="functiontext">Rulebooks::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'k'</span><span class="plain">, </span><span class="functiontext">LocalVariables::log</span><span class="plain">);</span>
|
||||
|
@ -495,7 +468,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'U'</span><span class="plain">, </span><span class="functiontext">Phrases::Usage::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'u'</span><span class="plain">, </span><span class="identifier">Kinds::Textual::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER_I</span><span class="plain">(</span><span class="character">'V'</span><span class="plain">, </span><span class="functiontext">Sentences::VPs::log</span><span class="plain">)</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'x'</span><span class="plain">, </span><span class="functiontext">Extensions::Files::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'Y'</span><span class="plain">, </span><span class="functiontext">Properties::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'Z'</span><span class="plain">, </span><span class="functiontext">NonlocalVariables::log</span><span class="plain">);</span>
|
||||
<span class="identifier">REGISTER_WRITER</span><span class="plain">(</span><span class="character">'z'</span><span class="plain">, </span><span class="identifier">Nouns::log</span><span class="plain">);</span>
|
||||
|
@ -505,19 +477,6 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_7"></a><b>§6.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Register this module's command line switches</span> <span class="cwebmacronumber">6.7</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b></p>
|
||||
|
||||
|
||||
|
@ -550,7 +509,7 @@ we need to use the equivalent of traditional <code class="display"><span class="
|
|||
<p class="endnote">The function CoreModule::end appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-mr.html">Back to 'Main Routine'</a></li><li><a href="1-kts.html">Continue with 'Kits'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-mr.html">Back to 'Main Routine'</a></li><li><a href="1-pp.html">Continue with 'Progress Percentages'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
423
docs/core-module/1-htc.html
Normal file
423
docs/core-module/1-htc.html
Normal file
|
@ -0,0 +1,423 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>1/wtc</title>
|
||||
<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>
|
||||
|
||||
<!--Weave of '1/htc' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>How To Compile</b></li></ul><p class="purpose">To configure the many locations used in the host filing system.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>We run through the following stages in sequence:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">STARTED_CSEQ</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">LEXICAL_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">SEMANTIC_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">ASSERTIONS_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">MODEL_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">MODEL_COMPLETE_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">TABLES_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">PHRASES_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">INTER_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">BIBLIOGRAPHIC_CSEQ</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">FINISHED_CSEQ</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_compile_tasks_carried_out</span><span class="plain"> = 0;</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Sequence::carry_out</span><span class="plain">(</span><span class="reserved">compile_task_data</span><span class="plain"> *</span><span class="identifier">ctd</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">STARTED_CSEQ</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_compile_tasks_carried_out</span><span class="plain"> == 0) </span><<span class="cwebmacro">Boot up the compiler</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
<<span class="cwebmacro">Perform lexical analysis</span> <span class="cwebmacronumber">2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform semantic analysis</span> <span class="cwebmacronumber">2.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read the assertions in two passes</span> <span class="cwebmacronumber">2.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Make the model world</span> <span class="cwebmacronumber">2.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Tables and grammar</span> <span class="cwebmacronumber">2.6</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Phrases and rules</span> <span class="cwebmacronumber">2.7</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Generate inter</span> <span class="cwebmacronumber">2.8</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Generate index and bibliographic file</span> <span class="cwebmacronumber">2.9</span>><span class="plain">;</span>
|
||||
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">FINISHED_CSEQ</span><span class="plain">);</span>
|
||||
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">end</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cpu_time_used</span><span class="plain"> = ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">end</span><span class="plain"> - </span><span class="identifier">start</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Compile CPU time: %d centiseconds\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cpu_time_used</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> > 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sequence::carry_out is used in 1/wtc (<a href="1-wtc.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">mark</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
|
||||
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">now</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
<span class="identifier">routine</span><span class="plain">();</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cs</span><span class="plain"> = ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">clock</span><span class="plain">() - </span><span class="identifier">now</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cs</span><span class="plain"> > 0) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">".... "</span><span class="plain"> #</span><span class="identifier">routine</span><span class="plain"> </span><span class="string">"() took %dcs\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cs</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="definitionkeyword">define</span> <span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="reserved">plugin</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">mark</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">problem_count</span><span class="plain"> == 0) && (</span><span class="functiontext">Plugins::Manage::plugged_in</span><span class="plain">(</span><span class="reserved">plugin</span><span class="plain">))) {</span>
|
||||
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">now</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
<span class="identifier">routine</span><span class="plain">();</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cs</span><span class="plain"> = ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">clock</span><span class="plain">() - </span><span class="identifier">now</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cs</span><span class="plain"> > 0) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">".... "</span><span class="plain"> #</span><span class="identifier">routine</span><span class="plain"> </span><span class="string">"() took %dcs\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cs</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Boot up the compiler</span> <span class="cwebmacronumber">2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Emit::begin</span><span class="plain">();</span>
|
||||
<span class="functiontext">Semantics::read_preform</span><span class="plain">();</span>
|
||||
<span class="functiontext">Plugins::Manage::start</span><span class="plain">();</span>
|
||||
<span class="functiontext">InferenceSubjects::begin</span><span class="plain">();</span>
|
||||
<span class="identifier">Index::DocReferences::read_xrefs</span><span class="plain">();</span>
|
||||
<span class="identifier">doc_references_top</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain"> - 1;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform lexical analysis</span> <span class="cwebmacronumber">2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">LEXICAL_CSEQ</span><span class="plain">);</span>
|
||||
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(0, 0);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Lexical analysis"</span><span class="plain">);</span>
|
||||
<span class="functiontext">SourceFiles::read</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()-></span><span class="identifier">as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::RuleSubtrees::create_standard_csps</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::RuleSubtrees::create_standard_csps"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_3"></a><b>§2.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform semantic analysis</span> <span class="cwebmacronumber">2.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">SEMANTIC_CSEQ</span><span class="plain">);</span>
|
||||
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(1, 0);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis Ia"</span><span class="plain">);</span>
|
||||
<span class="identifier">Projects::activate_plugins</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">());</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">ParseTreeUsage::plant_parse_tree</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ParseTreeUsage::plant_parse_tree"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">StructuralSentences::break_source</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StructuralSentences::break_source"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Inclusion::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Inclusion::traverse"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::satisfy_dependencies</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::satisfy_dependencies"</span><span class="plain">)</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Initialise language semantics"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Plugins::Manage::start_plugins</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Plugins::Manage::start_plugins"</span><span class="plain">);</span>
|
||||
<span class="identifier">Projects::load_types</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">());</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">BinaryPredicates::make_built_in</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BinaryPredicates::make_built_in"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">NewVerbs::add_inequalities</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NewVerbs::add_inequalities"</span><span class="plain">)</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis Ib"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::VPs::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::VPs::traverse"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Rearrangement::tidy_up_ofs_and_froms</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Rearrangement::tidy_up_ofs_and_froms"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::RuleSubtrees::register_recently_lexed_phrases</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::RuleSubtrees::register_recently_lexed_phrases"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">StructuralSentences::declare_source_loaded</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StructuralSentences::declare_source_loaded"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">Kinds::Interpreter::include_templates_for_kinds</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::Interpreter::include_templates_for_kinds"</span><span class="plain">)</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis II"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">ParseTreeUsage::verify</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ParseTreeUsage::verify"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Files::check_versions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Files::check_versions"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::make_tree</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::make_tree"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::write_as_xml</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::write_as_xml"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::write_as_xml</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::write_as_xml"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Modules::traverse_to_define</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Modules::traverse_to_define"</span><span class="plain">)</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis III"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Adjectives::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Adjectives::traverse"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::traverse_to_create</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::traverse_to_create"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_create</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_create"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::traverse_for_names</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::traverse_for_names"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_4"></a><b>§2.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read the assertions in two passes</span> <span class="cwebmacronumber">2.4</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">ASSERTIONS_CSEQ</span><span class="plain">);</span>
|
||||
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(2, 0);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"First pass through assertions"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Assertions::Traverse::traverse</span><span class="plain">(1);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_stock"</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Second pass through assertions"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Assertions::Traverse::traverse</span><span class="plain">(2);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::kind_declarations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::kind_declarations"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_5"></a><b>§2.5. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Make the model world</span> <span class="cwebmacronumber">2.5</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">MODEL_CSEQ</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Making the model world"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::emit</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::emit"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Emit::allocate_attributes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Emit::allocate_attributes"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::name_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::name_all"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseNouns::name_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseNouns::name_all"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Instances::place_objects_in_definition_sequence</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Instances::place_objects_in_definition_sequence"</span><span class="plain">)</span>
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">MODEL_COMPLETE_CSEQ</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::complete</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::complete"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_6"></a><b>§2.6. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Tables and grammar</span> <span class="cwebmacronumber">2.6</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">TABLES_CSEQ</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Tables and grammar"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Measurement::validate_definitions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Measurement::validate_definitions"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">BinaryPredicates::make_built_in_further</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BinaryPredicates::make_built_in_further"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Bibliographic::IFID::define_UUID</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Bibliographic::IFID::define_UUID"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Figures::compile_ResourceIDsOfFigures_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Figures::compile_ResourceIDsOfFigures_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Sounds::compile_ResourceIDsOfSounds_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Sounds::compile_ResourceIDsOfSounds_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Player::InitialSituation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Player::InitialSituation"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::check_tables_for_kind_clashes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::check_tables_for_kind_clashes"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::Support::compile_print_table_names</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::Support::compile_print_table_names"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::traverse"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::complete_additions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::complete_additions"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_7"></a><b>§2.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Phrases and rules</span> <span class="cwebmacronumber">2.7</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">PHRASES_CSEQ</span><span class="plain">);</span>
|
||||
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(3, 0);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Phrases and rules"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">LiteralPatterns::define_named_phrases</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"LiteralPatterns::define_named_phrases"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::traverse"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::register_meanings</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::register_meanings"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::parse_rule_parameters</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::parse_rule_parameters"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::add_rules_to_rulebooks</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::add_rules_to_rulebooks"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::parse_rule_placements</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::parse_rule_placements"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::traverse_to_stock"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_stock"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::annotate_attributes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::annotate_attributes"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rulebooks::Outcomes::RulebookOutcomePrintingRule</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rulebooks::Outcomes::RulebookOutcomePrintingRule"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_instance_counts</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_instance_counts"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_8"></a><b>§2.8. </b>This is where we hand over to regular template files — containing code
|
||||
passed through as I6 source, as well as a few further commands — starting
|
||||
with "Output.i6t".
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate inter</span> <span class="cwebmacronumber">2.8</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">INTER_CSEQ</span><span class="plain">);</span>
|
||||
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(4, 0);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Generating inter"</span><span class="plain">);</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::compile_icl_commands</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::compile_icl_commands"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">FundamentalConstants::emit_build_number</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"FundamentalConstants::emit_build_number"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Bibliographic::compile_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Bibliographic::compile_constants"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Files::ShowExtensionVersions_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Files::ShowExtensionVersions_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">Kinds::Constructors::compile_I6_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::Constructors::compile_I6_constants"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">scoring_plugin</span><span class="plain">, </span><span class="identifier">PL::Score::compile_max_score</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Score::compile_max_score"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::TestUseOption_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::TestUseOption_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::compile_activity_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::compile_activity_constants"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_before_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_before_rulebooks_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_for_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_for_rulebooks_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_after_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_after_rulebooks_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_atb_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_atb_rulebooks_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::compile_defined_relation_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::compile_defined_relation_constants"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_data_type_support_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_data_type_support_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::I7_Kind_Name_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::I7_Kind_Name_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::Compile::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::Compile::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">backdrops_plugin</span><span class="plain">, </span><span class="identifier">PL::Backdrops::write_found_in_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Backdrops::write_found_in_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">map_plugin</span><span class="plain">, </span><span class="identifier">PL::Map::write_door_dir_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Map::write_door_dir_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">map_plugin</span><span class="plain">, </span><span class="identifier">PL::Map::write_door_to_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Map::write_door_to_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::General::write_parse_name_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::General::write_parse_name_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">regions_plugin</span><span class="plain">, </span><span class="identifier">PL::Regions::write_regional_found_in_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Regions::write_regional_found_in_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::complete</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::complete"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::Support::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::Support::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="identifier">PL::Actions::Patterns::Named::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::Patterns::Named::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="identifier">PL::Actions::ActionData</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionData"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="identifier">PL::Actions::ActionCoding_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionCoding_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="identifier">PL::Actions::ActionHappened</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionHappened"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="identifier">PL::Actions::compile_action_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::compile_action_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Lines::MistakeActionSub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Lines::MistakeActionSub_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_first_block</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_first_block"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_rulebooks</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_rulebooks"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::rulebooks_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">scenes_plugin</span><span class="plain">, </span><span class="identifier">PL::Scenes::DetectSceneChange_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Scenes::DetectSceneChange_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">scenes_plugin</span><span class="plain">, </span><span class="identifier">PL::Scenes::ShowSceneStatus_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Scenes::ShowSceneStatus_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Files::arrays</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Files::arrays"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rulebooks::rulebook_var_creators</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rulebooks::rulebook_var_creators"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::activity_var_creators</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::activity_var_creators"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::IterateRelations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::IterateRelations"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::RulebookNames_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::RulebookNames_array"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::RulePrintingRule_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::RulePrintingRule_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Verbs::prepare</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::prepare"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Verbs::compile_conditions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::compile_conditions"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Values::number</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::number"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Values::truth_state</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::truth_state"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Values::time</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::time"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Values::compile_type_gprs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::compile_type_gprs"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">NewVerbs::ConjugateVerb</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NewVerbs::ConjugateVerb"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Adjectives::Meanings::agreements</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Adjectives::Meanings::agreements"</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::debug_enabled</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) {</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="functiontext">PL::Parsing::TestScripts::write_text</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::write_text"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="functiontext">PL::Parsing::TestScripts::TestScriptSub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::TestScriptSub_routine"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="functiontext">PL::Parsing::TestScripts::InternalTestCases_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::InternalTestCases_routine"</span><span class="plain">)</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="functiontext">PL::Parsing::TestScripts::TestScriptSub_stub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::TestScriptSub_stub_routine"</span><span class="plain">)</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Projects::Main_defined</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::invoke_to_begin</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::invoke_to_begin"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_as_needed</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_as_needed"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::compile_responses</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::compile_responses"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::compile_defined_relations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::compile_defined_relations"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_as_needed</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_as_needed"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::TextSubstitutions::allow_no_further_text_subs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::TextSubstitutions::allow_no_further_text_subs"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Filters::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Filters::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">actions_plugin</span><span class="plain">, </span><span class="functiontext">Chronology::past_actions_i6_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::past_actions_i6_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">chronology_plugin</span><span class="plain">, </span><span class="functiontext">Chronology::chronology_extents_i6_escape</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::chronology_extents_i6_escape"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">chronology_plugin</span><span class="plain">, </span><span class="functiontext">Chronology::past_tenses_i6_escape</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::past_tenses_i6_escape"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">chronology_plugin</span><span class="plain">, </span><span class="functiontext">Chronology::allow_no_further_past_tenses</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::allow_no_further_past_tenses"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Verbs::compile_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::compile_all"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP_IF</span><span class="plain">(</span><span class="identifier">parsing_plugin</span><span class="plain">, </span><span class="identifier">PL::Parsing::Tokens::Filters::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Filters::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Measurement::compile_MADJ_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Measurement::compile_MADJ_routines"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Calculus::Propositions::Deferred::compile_remaining_deferred</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Calculus::Propositions::Deferred::compile_remaining_deferred"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Calculus::Deferrals::allow_no_further_deferrals</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Calculus::Deferrals::allow_no_further_deferrals"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::TextLiterals::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::TextLiterals::compile"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">JumpLabels::compile_necessary_storage</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"JumpLabels::compile_necessary_storage"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_heap_allocator</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_heap_allocator"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Constants::compile_closures</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Constants::compile_closures"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_structures</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_structures"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rules::check_response_usages</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rules::check_response_usages"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::check_for_unused</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::check_for_unused"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Showme::compile_SHOWME_details</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Showme::compile_SHOWME_details"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::TimedEventsTable</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::TimedEventsTable"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::TimedEventTimesTable</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::TimedEventTimesTable"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Naming::compile_cap_short_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Naming::compile_cap_short_name"</span><span class="plain">)</span>
|
||||
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::configure_template</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::configure_template"</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_9"></a><b>§2.9. </b>Metadata.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate index and bibliographic file</span> <span class="cwebmacronumber">2.9</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="constant">BIBLIOGRAPHIC_CSEQ</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Plugins::Manage::plugged_in</span><span class="plain">(</span><span class="identifier">bibliographic_plugin</span><span class="plain">))</span>
|
||||
<span class="identifier">PL::Bibliographic::Release::write_ifiction_and_blurb</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0)</span>
|
||||
<span class="functiontext">NaturalLanguages::produce_index</span><span class="plain">();</span>
|
||||
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_log_phases</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sequence::go_to_log_phase</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">) {</span>
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">phase_names</span><span class="plain">[] = {</span>
|
||||
<span class="string">"I"</span><span class="plain">, </span><span class="string">"II"</span><span class="plain">, </span><span class="string">"III"</span><span class="plain">, </span><span class="string">"IV"</span><span class="plain">, </span><span class="string">"V"</span><span class="plain">, </span><span class="string">"VI"</span><span class="plain">, </span><span class="string">"VII"</span><span class="plain">, </span><span class="string">"VIII"</span><span class="plain">, </span><span class="string">"IX"</span><span class="plain">, </span><span class="string">"X"</span><span class="plain">,</span>
|
||||
<span class="string">"XI"</span><span class="plain">, </span><span class="string">"XII"</span><span class="plain">, </span><span class="string">"XIII"</span><span class="plain">, </span><span class="string">"XIV"</span><span class="plain">, </span><span class="string">"XV"</span><span class="plain">, </span><span class="string">"XVI"</span><span class="plain">, </span><span class="string">"XVII"</span><span class="plain">, </span><span class="string">"XVIII"</span><span class="plain">, </span><span class="string">"XIX"</span><span class="plain">, </span><span class="string">"XX"</span><span class="plain">, </span><span class="string">"XXI"</span><span class="plain">, </span><span class="string">"XXII"</span><span class="plain"> };</span>
|
||||
<span class="identifier">Log::new_phase</span><span class="plain">(</span><span class="identifier">phase_names</span><span class="plain">[</span><span class="identifier">no_log_phases</span><span class="plain">], </span><span class="identifier">argument</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_log_phases</span><span class="plain"> < 21) </span><span class="identifier">no_log_phases</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sequence::go_to_log_phase is used in <a href="#SP2_2">§2.2</a>, <a href="#SP2_3">§2.3</a>, <a href="#SP2_4">§2.4</a>, <a href="#SP2_5">§2.5</a>, <a href="#SP2_6">§2.6</a>, <a href="#SP2_7">§2.7</a>, <a href="#SP2_8">§2.8</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-wtc.html">Back to 'What To Compile'</a></li><li><i>(This section ends Chapter 1: Configuration and Control.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>1/kts</title>
|
||||
<title>1/cm</title>
|
||||
<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">
|
||||
|
@ -64,7 +64,7 @@ progress bar with a rubric beneath it.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function ProgressBar::update_progress_bar is used in 1/mr (<a href="1-mr.html#SP4_9">§4.9</a>, <a href="1-mr.html#SP4_10">§4.10</a>, <a href="1-mr.html#SP4_11">§4.11</a>, <a href="1-mr.html#SP4_14">§4.14</a>, <a href="1-mr.html#SP4_15">§4.15</a>), 22/cs (<a href="22-cs.html#SP4">§4</a>), 22/ph (<a href="22-ph.html#SP12_1">§12.1</a>).</p>
|
||||
<p class="endnote">The function ProgressBar::update_progress_bar is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_4">§2.4</a>, <a href="1-htc.html#SP2_7">§2.7</a>, <a href="1-htc.html#SP2_8">§2.8</a>), 22/cs (<a href="22-cs.html#SP4">§4</a>), 22/ph (<a href="22-ph.html#SP12_1">§12.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function ProgressBar::final_state_of_progress_bar is used in 2/up (<a href="2-up.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
|
@ -94,7 +94,7 @@ a final status indicator.
|
|||
<p class="endnote">The function ProgressBar::end_outcome is used in 2/up (<a href="2-up.html#SP2_2">§2.2</a>, <a href="2-up.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-kts.html">Back to 'Kits'</a></li><li><a href="1-wel.html">Continue with 'Where Everything Lives'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-cm.html">Back to 'Core Module'</a></li><li><a href="1-wtc.html">Continue with 'What To Compile'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
517
docs/core-module/1-wtc.html
Normal file
517
docs/core-module/1-wtc.html
Normal file
|
@ -0,0 +1,517 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>1/pp</title>
|
||||
<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>
|
||||
|
||||
<!--Weave of '1/wtc' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>What To Compile</b></li></ul><p class="purpose">To receive an instruction to compile something from Inbuild, and then to sort out the many locations then used in the host filing system.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Task data</a></li><li><a href="#SP7">§7. Project-related files and file paths</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Task data. </b>When Inbuild (a copy of which is included in the Inform 7 executable) decides
|
||||
that an Inform source text must be compiled, it calls <code class="display"><span class="extract">Task::carry_out</span></code>. By
|
||||
this point Inbuild will have set up an <code class="display"><span class="extract">inform_project</span></code> structure to
|
||||
represent the program we have to compile; but we will need additional data
|
||||
about that compilation, and it's stored in the following.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">compile_task_data</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">build_step</span><span class="plain"> *</span><span class="identifier">task</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">materials</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">build</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">existing_storyfile</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage_of_compilation</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">next_resource_number</span><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">compile_task_data</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure compile_task_data is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>An early and perhaps arguable design decision for inform7 was that it would
|
||||
compile just one source text in its lifetime as a process: and because of that,
|
||||
<code class="display"><span class="extract">Task::carry_out</span></code> can only in fact be called once, and Inbuild only does so
|
||||
once. But the following routine allows in principle for multiple calls,
|
||||
against the day when we change our minds about all this.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Something we will never do is attempt to make <code class="display"><span class="extract">inform7</span></code> thread-safe in the
|
||||
sense of being able to compile two source texts simultaneously. The global
|
||||
<code class="display"><span class="extract">inform7_task</span></code> is null when nothing is being compiled, or set to the unique
|
||||
thing which is being compiled when it is.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">compile_task_data</span><span class="plain"> *</span><span class="identifier">inform7_task</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::carry_out</span><span class="plain">(</span><span class="identifier">build_step</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
|
||||
<span class="identifier">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">ProjectBundleManager::from_copy</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">ProjectFileManager::from_copy</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"cannot re-enter with new task"</span><span class="plain">);</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">compile_task_data</span><span class="plain">);</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>task</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">-></span><span class="identifier">location_if_path</span><span class="plain">;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain"> = </span><span class="identifier">Projects::build_pathname</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain"> = </span><span class="identifier">Inbuild::materials</span><span class="plain">();</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> = -1;</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>next_resource_number</span><span class="plain"> = 3;</span>
|
||||
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">NaturalLanguages::English</span><span class="plain">();</span>
|
||||
<span class="identifier">Projects::set_language_of_syntax</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Projects::set_language_of_index</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Projects::set_language_of_play</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="functiontext">Sequence::carry_out</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">);</span>
|
||||
<span class="identifier">inform7_task</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">rv</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::carry_out appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>We will keep track of how far along the process has advanced, in very
|
||||
rough terms.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> <= </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not an advance"</span><span class="plain">);</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> = </span><span class="identifier">stage</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_before_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> < </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_during_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> == </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_after_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> > </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::advance_stage_to is used in 1/htc (<a href="1-htc.html#SP2">§2</a>, <a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_4">§2.4</a>, <a href="1-htc.html#SP2_5">§2.5</a>, <a href="1-htc.html#SP2_6">§2.6</a>, <a href="1-htc.html#SP2_7">§2.7</a>, <a href="1-htc.html#SP2_8">§2.8</a>, <a href="1-htc.html#SP2_9">§2.9</a>).</p>
|
||||
|
||||
<p class="endnote">The function Task::is_before_stage appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::is_during_stage is used in 16/in (<a href="16-in.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Task::is_after_stage appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The current project and the virtual machine we want to compile it for:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">inform_project</span><span class="plain"> *</span><span class="functiontext">Task::project</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">target_vm</span><span class="plain"> *</span><span class="functiontext">Task::vm</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>task</span><span class="plain">-></span><span class="identifier">for_vm</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::project is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_8">§2.8</a>), 3/nl (<a href="3-nl.html#SP3">§3</a>), 4/its (<a href="4-its.html#SP7">§7</a>), 4/am (<a href="4-am.html#SP42">§42</a>, <a href="4-am.html#SP43">§43</a>), 5/ins (<a href="5-ins.html#SP14">§14</a>, <a href="5-ins.html#SP25">§25</a>, <a href="5-ins.html#SP26">§26</a>), 5/ipw (<a href="5-ipw.html#SP3_3_1">§3.3.1</a>, <a href="5-ipw.html#SP3_3_1_1">§3.3.1.1</a>), 6/nv (<a href="6-nv.html#SP22">§22</a>), 26/ts (<a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function Task::vm is used in <a href="#SP14">§14</a>, 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>), 5/lp (<a href="5-lp.html#SP12_2">§12.2</a>, <a href="5-lp.html#SP18_3">§18.3</a>), 6/rlt (<a href="6-rlt.html#SP14">§14</a>), 7/hdn (<a href="7-hdn.html#SP12">§12</a>), 8/ie (<a href="8-ie.html#SP9_1">§9.1</a>), 13/rsfk (<a href="13-rsfk.html#SP18_1">§18.1</a>, <a href="13-rsfk.html#SP20">§20</a>, <a href="13-rsfk.html#SP26">§26</a>), 17/ts (<a href="17-ts.html#SP11_1">§11.1</a>), 25/cii (<a href="25-cii.html#SP3_5_8_3">§3.5.8.3</a>), 26/fc (<a href="26-fc.html#SP3">§3</a>), 26/uo (<a href="26-uo.html#SP18">§18</a>), 26/rt (<a href="26-rt.html#SP4">§4</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Resources in a Blorb file have unique ID numbers which are positive integers,
|
||||
but these are not required to start from 1, nor to be contiguous. For Inform,
|
||||
ID number 1 is reserved for the cover image (whether or not any cover image
|
||||
is provided: it is legal for there to be figures but no cover, and vice versa).
|
||||
Other figures, and sound effects, then mix freely as needed from ID number 3
|
||||
on upwards. We skip 2 so that it can be guaranteed that no sound resource
|
||||
has ID 1 or 2: this is to help people trying to play sounds in the Z-machine,
|
||||
where operand 1 or 2 in the <code class="display"><span class="extract">@sound</span></code> opcode signifies not a sound resource
|
||||
number but a long or short beep. If a genuine sound effect had resource ID
|
||||
1 or 2, therefore, it would be unplayable on the Z-machine.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::get_next_free_blorb_resource_ID</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>next_resource_number</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::get_next_free_blorb_resource_ID appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>This seed is ordinarily 0, causing no fix to occur, but can be set to
|
||||
a non-zero value to make testing Inform easier.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::rng_seed</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">-></span><span class="identifier">fix_rng</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::rng_seed is used in 9/ma (<a href="9-ma.html#SP3_3_41_2_2_1">§3.3.41.2.2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Project-related files and file paths. </b>An Inform compilation can touch dozens of different files, and the rest
|
||||
of this section is a tour through the ones which are associated with the
|
||||
project itself. (Common resources, used for all compilations, or optional
|
||||
add-ins such as extensions are the business of Inbuild.)
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">If a project is called, say, Wuthering Heights, and is a "bundle" as created
|
||||
and compiled by the Inform app, then:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<ul class="items"><li>(a) The project path will be <code class="display"><span class="extract">Wuthering Heights.inform</span></code>. This looks opaque
|
||||
on MacOS, as if a file, but on all platforms it is in fact a directory.
|
||||
</li><li>(b) Within it is <code class="display"><span class="extract">Wuthering Heights.inform/Build</span></code>, the "build folder".
|
||||
</li><li>(c) Alongside it is <code class="display"><span class="extract">Wuthering Heights.materials</span></code>. This is also a directory,
|
||||
but is openly accessible even on MacOS.
|
||||
</li></ul>
|
||||
<p class="inwebparagraph">If Inform is working on a single source text file, not a bundle, then the
|
||||
project will be the current working directory, but now the build folder will
|
||||
be the Inbuild transient area, and materials (if present) will again be
|
||||
alongside.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">To begin: what's in the project area? <code class="display"><span class="extract">story.ni</span></code> and <code class="display"><span class="extract">auto.inf</span></code>, neither
|
||||
one very helpfully named, are defined in Inbuild rather than here: these
|
||||
are the I7 source text and its compilation down to I6, respectively.
|
||||
In addition we have:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The UUID file records an ISBN-like identifying number for the project. This
|
||||
is read-only for us.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The iFiction record, manifest and blurb file are all files that we generate
|
||||
to give instructions to the releasing agent Inblorb. This means that they
|
||||
have no purpose unless Inform is in a release run (with <code class="display"><span class="extract">-release</span></code> set on
|
||||
the command line), but they take no time to generate so we make them anyway.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::uuid_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"uuid.txt"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::ifiction_record_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Metadata.iFiction"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::manifest_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"manifest.plist"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::blurb_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release.blurb"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::uuid_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::ifiction_record_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::manifest_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::blurb_file appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>The build folder for a project contains all of the working files created
|
||||
during the compilation process. The debugging log and Inform problems report
|
||||
(its HTML file of error messages) are both written there: see the Main Routine
|
||||
section for details. In addition we have:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::cblorb_report_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StatusCblorb.html"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::parse_tree_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Parse tree.txt"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::cblorb_report_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::parse_tree_file is used in 7/ptu (<a href="7-ptu.html#SP18">§18</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>The name of the unblorbed story file is chosen for us by Inbuild, so
|
||||
we have to extract it from the build graph:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::storyfile_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="identifier">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">-></span><span class="identifier">unblorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">V</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"project graph not ready"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">-></span><span class="identifier">buildable_if_internal_file</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::storyfile_file appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Deeper inside the<code class="display"><span class="extract">Build</span></code> subfolder is an (also ephemeral) <code class="display"><span class="extract">Index</span></code> subfolder,
|
||||
which holds the mini-website of the Index for a project.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The main index files (<code class="display"><span class="extract">Phrasebook.html</span></code> and so on) live at the top level,
|
||||
details on actions live in the subfolder <code class="display"><span class="extract">Details</span></code>: see below.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::index_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Index"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::index_path is used in <a href="#SP11">§11</a>, <a href="#SP12">§12</a>, <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>An oddity in the Index folder is an XML file recording where the headings
|
||||
are in the source text: this is for the benefit of the user interface
|
||||
application, if it wants it, but is not linked to or used by the HTML of
|
||||
the index as seen by the user.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::xml_headings_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Headings.xml"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::xml_headings_file is used in 7/hdn (<a href="7-hdn.html#SP35">§35</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>Within the Index is a deeper level, into the weeds as it were, called
|
||||
<code class="display"><span class="extract">Details</span></code>.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::index_details_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Details"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::index_details_path is used in <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>And the following routine determines the filename for a page in this
|
||||
mini-website. Filenames down in the <code class="display"><span class="extract">Details</span></code> area have the form
|
||||
<code class="display"><span class="extract">N_S</span></code> where <code class="display"><span class="extract">N</span></code> is an integer supplied and <code class="display"><span class="extract">S</span></code> the leafname; for instance,
|
||||
<code class="display"><span class="extract">21_A.html</span></code> provides details page number 21 about actions, derived from the
|
||||
leafname <code class="display"><span class="extract">A.html</span></code>.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::index_file</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sub</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sub</span><span class="plain"> >= 0) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">, </span><span class="string">"%d_%S"</span><span class="plain">, </span><span class="identifier">sub</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_details_path</span><span class="plain">(), </span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</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">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">leafname</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::index_file appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>That's it for the project folder, but other project-related stuff is in
|
||||
the materials folder, which we turn to next.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Inform is occasionally run in a mode where it performs a release on an
|
||||
existing story file (for example a 1980s Infocom one) rather than on one
|
||||
that it has newly generated. This is the filename such a story file would
|
||||
have by default, if so.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">By default the story file will be called something like <code class="display"><span class="extract">story.z8</span></code>, but
|
||||
its leafname is actually declared from the source text of the Inform
|
||||
project created to do this wrapping-up. So we need a way to set as well
|
||||
as read this filename. Whatever the leafname, though, it lives in the top
|
||||
level of materuals.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::wraps_existing_storyfile</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> != </span><span class="identifier">NULL</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="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"story.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_unblorbed_extension</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()));</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::existing_storyfile_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::wraps_existing_storyfile is used in 5/ipw (<a href="5-ipw.html#SP2">§2</a>), 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Task::set_existing_storyfile appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::existing_storyfile_file appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b>Materials is also where cover art lives: it could have either the file
|
||||
extension <code class="display"><span class="extract">.jpg</span></code> or <code class="display"><span class="extract">.png</span></code>, and we generate both sets of filenames, even
|
||||
though at most one will actually work. This is also where we generate the EPS
|
||||
file of the map, if so requested; a bit anomalously, it's the only file in
|
||||
Materials but outside Release which we write to.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">This is also where the originals (not the released copies) of the Figures
|
||||
and Sounds, if any, live: in their own subfolders.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::large_cover_art_file</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">JPEG</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">JPEG</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.jpg"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.png"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::epsmap_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Inform Map.eps"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::figures_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::sounds_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::large_cover_art_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::epsmap_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::figures_path appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::sounds_path appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>On a release run, Inblorb will populate the Release subfolder of Materials;
|
||||
figures and sounds will be copied into the relevant subfolders. The principle
|
||||
is that everything in Release can always be thrown away without loss, because
|
||||
it can all be generated again.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::release_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_figures_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_sounds_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_interpreter_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"interpreter"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Task::release_path appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::released_figures_path appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::released_sounds_path appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Task::released_interpreter_path appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-pp.html">Back to 'Progress Percentages'</a></li><li><a href="1-htc.html">Continue with 'How To Compile'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -49,7 +49,7 @@ a <code class="display"><span class="extract">pcalc_prop</span></code> structure
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure pcalc_prop is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/pr, 11/bas, 11/tc, 11/sc, 11/sm, 11/tcp, 12/ap, 12/ca, 12/dtd, 12/cad, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure pcalc_prop is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/pr, 11/bas, 11/tc, 11/sc, 11/sm, 11/tcp, 12/ap, 12/ca, 12/dtd, 12/cad, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The Universe is filled with atoms, but they come in different kinds, called
|
||||
elements. For us, an "element" is the identifying number, stored in the
|
||||
|
|
|
@ -57,7 +57,7 @@ their existence.
|
|||
|
||||
<p class="endnote">The function Calculus::Propositions::Abstract::to_make_a_const is used in 9/tc (<a href="9-tc.html#SP5_4_2_2">§5.4.2.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Calculus::Propositions::Abstract::to_create_something is used in 3/nl (<a href="3-nl.html#SP14">§14</a>), 9/tc (<a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP5_4_2_1">§5.4.2.1</a>, <a href="9-tc.html#SP5_4_2_2">§5.4.2.2</a>, <a href="9-tc.html#SP5_4_2_3">§5.4.2.3</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/pd (<a href="9-pd.html#SP5_11">§5.11</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Calculus::Propositions::Abstract::to_create_something is used in 3/nl (<a href="3-nl.html#SP6">§6</a>), 9/tc (<a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP5_4_2_1">§5.4.2.1</a>, <a href="9-tc.html#SP5_4_2_2">§5.4.2.2</a>, <a href="9-tc.html#SP5_4_2_3">§5.4.2.3</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/pd (<a href="9-pd.html#SP5_11">§5.11</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>A proposition to assert that an object has a given kind:
|
||||
</p>
|
||||
|
|
|
@ -127,7 +127,7 @@ we don't accidentally break this rule:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Calculus::Propositions::Assert::assert_true is used in 3/nl (<a href="3-nl.html#SP14">§14</a>), 9/tc (<a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP5_4_2_1">§5.4.2.1</a>, <a href="9-tc.html#SP5_4_2_2">§5.4.2.2</a>, <a href="9-tc.html#SP5_4_2_3">§5.4.2.3</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/pk (<a href="9-pk.html#SP2">§2</a>), 9/rk (<a href="9-rk.html#SP3">§3</a>), 9/pd (<a href="9-pd.html#SP5_11">§5.11</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Calculus::Propositions::Assert::assert_true is used in 3/nl (<a href="3-nl.html#SP6">§6</a>), 9/tc (<a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP5_4_2_1">§5.4.2.1</a>, <a href="9-tc.html#SP5_4_2_2">§5.4.2.2</a>, <a href="9-tc.html#SP5_4_2_3">§5.4.2.3</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/pk (<a href="9-pk.html#SP2">§2</a>), 9/rk (<a href="9-rk.html#SP3">§3</a>), 9/pd (<a href="9-pd.html#SP5_11">§5.11</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Calculus::Propositions::Assert::assert_true_about is used in 6/rlt (<a href="6-rlt.html#SP9">§9</a>), 9/ma (<a href="9-ma.html#SP3_3_39_5">§3.3.39.5</a>), 9/pk (<a href="9-pk.html#SP3">§3</a>), 9/rk (<a href="9-rk.html#SP1_2">§1.2</a>), 9/imp (<a href="9-imp.html#SP7_1_3">§7.1.3</a>), 9/pd (<a href="9-pd.html#SP5_9">§5.9</a>, <a href="9-pd.html#SP5_10">§5.10</a>, <a href="9-pd.html#SP6_1">§6.1</a>), 11/tc (<a href="11-tc.html#SP2">§2</a>), 15/ep (<a href="15-ep.html#SP9">§9</a>), 15/vp (<a href="15-vp.html#SP10">§10</a>), 19/tod (<a href="19-tod.html#SP6_4">§6.4</a>).</p>
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ which create routines which... and so on.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Calculus::Propositions::Deferred::compile_remaining_deferred is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Calculus::Propositions::Deferred::compile_remaining_deferred is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Calculus::Propositions::Deferred::compilation_coroutine is used in 22/cs (<a href="22-cs.html#SP14">§14</a>).</p>
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ all deferral requests are redeemed — they would then never be reached.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Calculus::Deferrals::allow_no_further_deferrals is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Calculus::Deferrals::allow_no_further_deferrals is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. Deferral requests. </b>The following fills out the paperwork to request a deferred proposition.
|
||||
</p>
|
||||
|
|
|
@ -303,7 +303,7 @@ absence of rooms would otherwise result in.
|
|||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::lt</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">)) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) { *</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">v2</span><span class="plain"> = 0; </span><span class="reserved">return</span><span class="plain">; } </span> <span class="comment">see above</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Task::wraps_existing_storyfile</span><span class="plain">()) { *</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">v2</span><span class="plain"> = 0; </span><span class="reserved">return</span><span class="plain">; } </span> <span class="comment">see above</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -855,7 +855,7 @@ K, we have also seen its bases.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::compile_structures is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::compile_structures is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP16_1"></a><b>§16.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile the runtime ID structure for this kind</span> <span class="cwebmacronumber">16.1</span>> =
|
||||
|
@ -1057,7 +1057,7 @@ property values, table entries, list items) of pointer-value kinds:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::compile_heap_allocator is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::compile_heap_allocator is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18_1"></a><b>§18.1. </b>By now, we know that we need at least <code class="display"><span class="extract">total_heap_allocation</span></code> bytes on the
|
||||
heap, but the initial heap size has to be a power of 2, so we compute the
|
||||
|
@ -1080,7 +1080,7 @@ has essentially no memory constraints compared with the Z-machine.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">total_heap_allocation</span><span class="plain"> < </span><span class="functiontext">UseOptions::get_dynamic_memory_allocation</span><span class="plain">())</span>
|
||||
<span class="identifier">total_heap_allocation</span><span class="plain"> = </span><span class="functiontext">UseOptions::get_dynamic_memory_allocation</span><span class="plain">();</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">max_heap</span><span class="plain"> < </span><span class="identifier">total_heap_allocation</span><span class="plain">) </span><span class="identifier">max_heap</span><span class="plain"> = </span><span class="identifier">max_heap</span><span class="plain">*2;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">())</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()))</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">MEMORY_HEAP_SIZE_HL</span><span class="plain">), </span><span class="identifier">max_heap</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">MEMORY_HEAP_SIZE_HL</span><span class="plain">), 4*</span><span class="identifier">max_heap</span><span class="plain">);</span>
|
||||
|
@ -1169,12 +1169,12 @@ list of 20 texts. For the cases above, it's always 1.
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::RunTime::emit_block_value_header</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">individual</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">size</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">individual</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 0, </span><span class="identifier">c</span><span class="plain"> = 1, </span><span class="identifier">w</span><span class="plain"> = 4;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">()) </span><span class="identifier">w</span><span class="plain"> = 2;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) </span><span class="identifier">w</span><span class="plain"> = 2;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> < (</span><span class="identifier">size</span><span class="plain"> + 3)*</span><span class="identifier">w</span><span class="plain">) { </span><span class="identifier">n</span><span class="plain">++; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain">*2; }</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">flags</span><span class="plain"> = </span><span class="constant">BLK_FLAG_RESIDENT</span><span class="plain"> + </span><span class="constant">BLK_FLAG_WORD</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_list_of</span><span class="plain">) </span><span class="identifier">flags</span><span class="plain"> += </span><span class="constant">BLK_FLAG_TRUNCMULT</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_relation</span><span class="plain">) </span><span class="identifier">flags</span><span class="plain"> += </span><span class="constant">BLK_FLAG_MULTIPLE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">())</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()))</span>
|
||||
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">((</span><span class="identifier">inter_t</span><span class="plain">) (0</span><span class="identifier">x100</span><span class="plain">*</span><span class="identifier">n</span><span class="plain"> + </span><span class="identifier">flags</span><span class="plain">));</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">((</span><span class="identifier">inter_t</span><span class="plain">) (0</span><span class="identifier">x1000000</span><span class="plain">*</span><span class="identifier">n</span><span class="plain"> + 0</span><span class="identifier">x10000</span><span class="plain">*</span><span class="identifier">flags</span><span class="plain">));</span>
|
||||
|
@ -1490,7 +1490,7 @@ each such kind, and needed at run-time.
|
|||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">CCOUNT_QUOTATIONS_HL</span><span class="plain">), </span><span class="functiontext">Strings::TextLiterals::CCOUNT_QUOTATIONS</span><span class="plain">());</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">MAX_FRAME_SIZE_NEEDED_HL</span><span class="plain">), </span><span class="identifier">max_frame_size_needed</span><span class="plain">);</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RNG_SEED_AT_START_OF_PLAY_HL</span><span class="plain">), </span><span class="identifier">rng_seed_at_start_of_play</span><span class="plain">);</span>
|
||||
<span class="functiontext">Kinds::RunTime::compile_nnci</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RNG_SEED_AT_START_OF_PLAY_HL</span><span class="plain">), </span><span class="functiontext">Task::rng_seed</span><span class="plain">());</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::RunTime::compile_data_type_support_routines</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
|
@ -1528,13 +1528,13 @@ each such kind, and needed at run-time.
|
|||
|
||||
<p class="endnote">The function Kinds::RunTime::emit appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::kind_declarations is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::kind_declarations is used in 1/htc (<a href="1-htc.html#SP2_4">§2.4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::compile_nnci is used in <a href="#SP18_1">§18.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::compile_instance_counts is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::compile_instance_counts is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::compile_data_type_support_routines is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::compile_data_type_support_routines is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24_1"></a><b>§24.1. </b>A slightly bogus case first. If the source text declares a kind but never
|
||||
gives any enumerated values or literal patterns, then such values will never
|
||||
|
@ -2409,7 +2409,7 @@ Z-machine array space.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::I7_Kind_Name_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::I7_Kind_Name_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b></p>
|
||||
|
||||
|
@ -2417,7 +2417,7 @@ Z-machine array space.
|
|||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">VM_non_support_problem_issued</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::RunTime::notify_of_use</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::supports</span><span class="plain">(</span><span class="identifier">K</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="functiontext">Kinds::RunTime::target_VM_supports</span><span class="plain">(</span><span class="identifier">K</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">VM_non_support_problem_issued</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">VM_non_support_problem_issued</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_KindRequiresGlulx</span><span class="plain">));</span>
|
||||
|
@ -2432,12 +2432,22 @@ Z-machine array space.
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Kinds::RunTime::target_VM_supports</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
||||
<span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain"> = </span><span class="functiontext">Task::vm</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VM</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"target VM not set yet"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">TargetVMs::supports_floating_point</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::notify_of_use is used in 14/cfs (<a href="14-cfs.html#SP7">§7</a>, <a href="14-cfs.html#SP8">§8</a>, <a href="14-cfs.html#SP9">§9</a>), 20/eq (<a href="20-eq.html#SP50_3_1">§50.3.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::target_VM_supports is used in 20/eq (<a href="20-eq.html#SP41">§41</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="13-ca.html">Back to 'Compile Arithmetic'</a></li><li><a href="13-ki.html">Continue with 'Kinds Index'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
|
|
|
@ -47,8 +47,6 @@ manage that here.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K2</span><span class="plain">) </span><span class="identifier">nw</span><span class="plain"> += </span><span class="functiontext">World::Compile::get_rough_memory_usage</span><span class="plain">(</span><span class="identifier">K2</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">nw</span><span class="plain"> += 16;</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">KW</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="functiontext">VirtualMachines::note_usage</span><span class="plain">(</span><span class="string">"object"</span><span class="plain">, </span><span class="identifier">KW</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">nw</span><span class="plain">, 0, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">OBJECT_COMPILATION</span><span class="plain">, </span><span class="string">"Rough size estimate: %d words\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">nw</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">OBJECT_COMPILATION</span><span class="plain">, </span><span class="string">"Compilation of $j complete\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">);</span>
|
||||
|
@ -293,7 +291,7 @@ For now, though, we make a parallel decision here.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Properties::Emit::allocate_attributes is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function Properties::Emit::allocate_attributes is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Any either/or property which some value can hold is ineligible</span> <span class="cwebmacronumber">3.1</span>> =
|
||||
|
|
|
@ -183,7 +183,7 @@ definition structure stands incomplete for a while. Filling it in is called
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Properties::Measurement::validate_definitions is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function Properties::Measurement::validate_definitions is used in 1/htc (<a href="1-htc.html#SP2_6">§2.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>Where:
|
||||
</p>
|
||||
|
@ -661,7 +661,7 @@ can't normally be unravelled at compile time.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Properties::Measurement::compile_MADJ_routines is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Properties::Measurement::compile_MADJ_routines is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. Comparative forms. </b>For timing reasons, these are made all at once, and later than when the headword
|
||||
adjectives and superlatives are made.
|
||||
|
|
|
@ -87,7 +87,7 @@ a value with the owner; it isn't that either/or properties are unloved.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure property is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/rv, 14/lv, 14/ds2, 15/ep, 15/vp, 15/cp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure property is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/rv, 14/lv, 14/ds2, 15/ep, 15/vp, 15/cp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The only four properties which have special significance to core Inform
|
||||
(though plugins are interested in many others):
|
||||
|
@ -649,7 +649,7 @@ sake:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Properties::is_shown_in_index is used in 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_9">§3.2.1.7.9</a>), 16/in (<a href="16-in.html#SP16">§16</a>, <a href="16-in.html#SP17">§17</a>).</p>
|
||||
<p class="endnote">The function Properties::is_shown_in_index is used in 8/ef (<a href="8-ef.html#SP12_9">§12.9</a>), 16/in (<a href="16-in.html#SP16">§16</a>, <a href="16-in.html#SP17">§17</a>).</p>
|
||||
|
||||
<p class="endnote">The function Properties::exclude_from_index is used in <a href="#SP5">§5</a>, 6/rlt (<a href="6-rlt.html#SP9_3_8">§9.3.8</a>), 15/ep (<a href="15-ep.html#SP4">§4</a>), 15/vp (<a href="15-vp.html#SP3">§3</a>).</p>
|
||||
|
||||
|
@ -1084,11 +1084,11 @@ we find it, we compile it and return <code class="display"><span class="extract"
|
|||
|
||||
<p class="endnote">The function Properties::emit_single is used in 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Properties::emit is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function Properties::emit is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Properties::emit_default_values appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Properties::annotate_attributes is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Properties::annotate_attributes is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Properties::emit_instance_permissions is used in 5/ins (<a href="5-ins.html#SP34">§34</a>).</p>
|
||||
|
||||
|
|
|
@ -57,21 +57,14 @@ aren't allowed to add I7-accessible properties.)
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">World::complete</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Instances::place_objects_in_definition_sequence</span><span class="plain">();</span>
|
||||
|
||||
<span class="identifier">model_world_under_construction</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
|
||||
<<span class="cwebmacro">Stages II and III of the completion process</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Stage IV of the completion process</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">model_world_under_construction</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">model_world_constructed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function World::complete is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function World::complete is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>The model world is a broth with many cooks. On the one hand, we have the
|
||||
various different INFSs, with their different needs — a various-to-various
|
||||
|
@ -311,7 +304,7 @@ about the Portal, to stand.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function World::complete_additions is used in 1/mr (<a href="1-mr.html#SP4_13">§4.13</a>).</p>
|
||||
<p class="endnote">The function World::complete_additions is used in 1/htc (<a href="1-htc.html#SP2_6">§2.6</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="16-in.html">Back to 'Inferences'</a></li><li><a href="16-cmw2.html">Continue with 'Compile Model World'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -60,7 +60,7 @@ to write anything, then put the same question to the subjects.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function World::Compile::compile is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function World::Compile::compile is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="16-cmw.html">Back to 'Complete Model World'</a></li><li><a href="16-ic.html">Continue with 'Instance Counting'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -101,7 +101,7 @@ organised as linked lists; hence the <code class="display"><span class="extract"
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inference is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure inference is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Creation. </b>The following routine coins a newly minted inference which is not yet attached
|
||||
to any subject: but it will not stay unattached for long. Note that if nothing
|
||||
|
@ -125,7 +125,7 @@ has been said about likelihood, the sentence is assumed to be factually certain.
|
|||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>inferred_property</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>inferred_property_value</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>inferred_from</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
||||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>added_in_construction</span><span class="plain"> = </span><span class="identifier">model_world_under_construction</span><span class="plain">;</span>
|
||||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>added_in_construction</span><span class="plain"> = </span><span class="functiontext">Task::is_during_stage</span><span class="plain">(</span><span class="constant">MODEL_COMPLETE_CSEQ</span><span class="plain">);</span>
|
||||
<span class="identifier">new_i</span><span class="plain">-</span><span class="element">>next</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">new_i</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -473,7 +473,7 @@ knowledge means that the inferences must have a certainty of likely or better.
|
|||
|
||||
<p class="endnote">The function World::Inferences::verify_prop_states is used in 16/is (<a href="16-is.html#SP30">§30</a>).</p>
|
||||
|
||||
<p class="endnote">The function World::Inferences::get_prop_state is used in 3/nl (<a href="3-nl.html#SP15">§15</a>).</p>
|
||||
<p class="endnote">The function World::Inferences::get_prop_state is used in 3/nl (<a href="3-nl.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="endnote">The function World::Inferences::get_prop_state_at appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ following.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function InferenceSubjects::begin is used in 1/mr (<a href="1-mr.html#SP4_7">§4.7</a>).</p>
|
||||
<p class="endnote">The function InferenceSubjects::begin is used in 1/htc (<a href="1-htc.html#SP2_1">§2.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function InferenceSubjects::new_fundamental appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -398,7 +398,7 @@ track of the content of each response.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Strings::compile_responses is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Strings::compile_responses is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b>Note that each rule is allowed to tell us that it already has a better
|
||||
text for the response than the one we first created.
|
||||
|
@ -505,9 +505,9 @@ divided up by the extensions containing the rules which produce them.
|
|||
<pre class="displaydefn">
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RESPONSEDIVISIONS_HL</span><span class="plain">);</span>
|
||||
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">group_ef</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">group_E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Make a ResponseDivisions entry</span> <span class="cwebmacronumber">7.3.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">group_ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">)</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">group_E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Make a ResponseDivisions entry</span> <span class="cwebmacronumber">7.3.1</span>><span class="plain">;</span>
|
||||
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
||||
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
||||
|
@ -532,9 +532,9 @@ divided up by the extensions containing the rules which produce them.
|
|||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">marker</span><span class="plain"> = 0; </span><span class="identifier">marker</span><span class="plain"> < 26; </span><span class="identifier">marker</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rules::rule_defines_response</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">marker</span><span class="plain">)) {</span>
|
||||
<span class="identifier">tally</span><span class="plain">++;</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</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="functiontext">SourceFiles::get_extension_corresponding</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">R</span><span class="plain">-</span><span class="element">>name</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">group_ef</span><span class="plain">) </span><<span class="cwebmacro">Start a possible run of matches</span> <span class="cwebmacronumber">7.3.1.1</span>>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">group_E</span><span class="plain">) </span><<span class="cwebmacro">Start a possible run of matches</span> <span class="cwebmacronumber">7.3.1.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">End a possible run of matches</span> <span class="cwebmacronumber">7.3.1.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<<span class="cwebmacro">End a possible run of matches</span> <span class="cwebmacronumber">7.3.1.2</span>><span class="plain">;</span>
|
||||
|
@ -552,9 +552,9 @@ divided up by the extensions containing the rules which produce them.
|
|||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">contiguous_match</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">contiguous_match</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">no_cms</span><span class="plain">++ == 0) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">no_cms</span><span class="plain">++ == 0) && (</span><span class="identifier">E</span><span class="plain">)) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">QT</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">QT</span><span class="plain">, </span><span class="string">"%<X"</span><span class="plain">, </span><span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">QT</span><span class="plain">, </span><span class="string">"%<X"</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::array_text_entry</span><span class="plain">(</span><span class="identifier">QT</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">QT</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span>
|
||||
|
|
|
@ -437,7 +437,7 @@ number <code class="display"><span class="extract">-1</span></code>).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Strings::TextLiterals::compile is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Strings::TextLiterals::compile is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Strings::TextLiterals::traverse_lts appears nowhere else.</p>
|
||||
|
||||
|
@ -447,7 +447,7 @@ number <code class="display"><span class="extract">-1</span></code>).
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) { </span> <span class="comment">to prevent trouble when no story file is really being made</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Task::wraps_existing_storyfile</span><span class="plain">()) { </span> <span class="comment">to prevent trouble when no story file is really being made</span>
|
||||
<span class="functiontext">Emit::named_string_constant</span><span class="plain">(</span><span class="identifier">lt</span><span class="plain">-</span><span class="element">>lt_iname</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TLT</span><span class="plain">);</span>
|
||||
|
|
|
@ -162,7 +162,7 @@ to do but panic.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Strings::TextSubstitutions::allow_no_further_text_subs is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Strings::TextSubstitutions::allow_no_further_text_subs is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>For some years these were compiled to routines verbosely called
|
||||
<code class="display"><span class="extract">text_routine_1</span></code> and so on, but no longer:
|
||||
|
@ -405,7 +405,7 @@ a request for a new text substitution to be compiled later...
|
|||
<span class="constant">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
|
||||
<span class="identifier">COMPILATION_MODE_EXIT</span><span class="plain">(</span><span class="constant">IMPLY_NEWLINES_IN_SAY_CMODE</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">this_is_a_debug_compile</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::debug_enabled</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) {</span>
|
||||
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">IFDEBUG_BIP</span><span class="plain">);</span>
|
||||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
|
|
|
@ -378,7 +378,7 @@ problem messages out into the open —
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Lists::check is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Lists::check is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>That leaves just the compilation of lists at run-time. This used to be a
|
||||
complex dance with initialisation code interleaved with heap construction,
|
||||
|
@ -439,7 +439,7 @@ so there was once a two-page explanation here, but it is now blessedly simple.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Lists::compile is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Lists::compile is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12_1"></a><b>§12.1. </b>These are I6 word arrays, with the contents:
|
||||
</p>
|
||||
|
|
|
@ -22,13 +22,12 @@
|
|||
<<span class="cwebmacro">Compile the blanks bitmap table</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile the Table of Tables</span> <span class="cwebmacronumber">1.3</span>><span class="plain">;</span>
|
||||
<span class="functiontext">Tables::Columns::compile_run_time_support</span><span class="plain">();</span>
|
||||
<<span class="cwebmacro">Note the usage of run-time memory for tables</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::Support::compile is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Tables::Support::compile is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile the data structures for entry storage</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
|
@ -430,24 +429,6 @@ against the rules. (The Template file "Tables.i6t" defines it.)
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_4"></a><b>§1.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Note the usage of run-time memory for tables</span> <span class="cwebmacronumber">1.4</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">table</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-</span><span class="element">>amendment_of</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="functiontext">VirtualMachines::note_usage</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">,</span>
|
||||
<span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-</span><span class="element">>headline_fragment</span><span class="plain">),</span>
|
||||
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">>approximate_array_space_needed</span><span class="plain">, 0, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The following allows tables to be said: it's a routine which switches on
|
||||
table values and prints the (title-cased) name of the one which matches.
|
||||
</p>
|
||||
|
@ -515,7 +496,7 @@ table values and prints the (title-cased) name of the one which matches.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::Support::compile_print_table_names is used in 1/mr (<a href="1-mr.html#SP4_13">§4.13</a>).</p>
|
||||
<p class="endnote">The function Tables::Support::compile_print_table_names is used in 1/htc (<a href="1-htc.html#SP2_6">§2.6</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="19-tb.html">Back to 'Tables'</a></li><li><a href="19-tod.html">Continue with 'Tables of Definitions'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -71,7 +71,7 @@ column ID numbers used at run-time.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure table_contribution is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure table_contribution is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>These are convenient during parsing.
|
||||
</p>
|
||||
|
@ -121,7 +121,7 @@ established names of tables and columns:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::traverse_to_create is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Tables::traverse_to_create is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Tables::visit_to_create appears nowhere else.</p>
|
||||
|
||||
|
@ -148,7 +148,7 @@ see below.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::traverse_to_stock is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>, <a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Tables::traverse_to_stock is used in 1/htc (<a href="1-htc.html#SP2_4">§2.4</a>, <a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>Last and least: a traverse existing just to issue a problem message in a
|
||||
case which Inform can often cope with, but which the experience of users
|
||||
|
@ -177,7 +177,7 @@ suggests is never a good idea.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::check_tables_for_kind_clashes is used in 1/mr (<a href="1-mr.html#SP4_13">§4.13</a>).</p>
|
||||
<p class="endnote">The function Tables::check_tables_for_kind_clashes is used in 1/htc (<a href="1-htc.html#SP2_6">§2.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Table basics. </b>The following makes a blank structure for a table, but it isn't valid until
|
||||
some of these fields have been properly filled in.
|
||||
|
@ -1590,7 +1590,7 @@ people — it needs to be "yourself" instead, since "player" is a variable.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tables::complete is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Tables::complete is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26_1"></a><b>§26.1. </b>For the actual code, see below.
|
||||
</p>
|
||||
|
@ -2012,8 +2012,8 @@ Rules, which of course are always present. So these are hidden by default.
|
|||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Show tables inside extensions (there are none in the main text)"</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">Index::extra_div_open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 2, 1, </span><span class="string">"e0e0e0"</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">efc</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">) </span><span class="functiontext">Tables::index_tables_in</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">, </span><span class="identifier">efc</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">int</span><span class="plain"> </span><span class="identifier">efc</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">) </span><span class="functiontext">Tables::index_tables_in</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">efc</span><span class="plain">++);</span>
|
||||
<span class="identifier">Index::extra_div_close</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -2028,18 +2028,18 @@ and does nothing at all if that number is 0.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tables::index_tables_in</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">efc</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tables::index_tables_in</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</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">int</span><span class="plain"> </span><span class="identifier">efc</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tc</span><span class="plain"> = 0; </span><span class="reserved">table</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain">) </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">)) </span><span class="identifier">tc</span><span class="plain">++;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain">) </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">)) </span><span class="identifier">tc</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tc</span><span class="plain"> > 0) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</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">"<i>%+W</i>"</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>%S</i>"</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">title</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="identifier">HTML::begin_plain_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">))</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Index this table</span> <span class="cwebmacronumber">30.1</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>
|
||||
<span class="plain">}</span>
|
||||
|
@ -2142,11 +2142,11 @@ given extension:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="reserved">table</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tables::table_within</span><span class="plain">(</span><span class="reserved">table</span><span class="plain"> *</span><span class="identifier">t</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">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-</span><span class="element">>amendment_of</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">at_heading</span><span class="plain"> = </span><span class="functiontext">Sentences::Headings::of_wording</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-</span><span class="element">>table_created_at</span><span class="plain">-</span><span class="element">>source_table</span><span class="plain">));</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">at_ef</span><span class="plain"> = </span><span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">at_heading</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">at_ef</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">at_E</span><span class="plain"> = </span><span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">at_heading</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">at_E</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -46,7 +46,7 @@ predicate associated with each possible table column C.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure table_column is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure table_column is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>When a column appears in a particular table, this is recorded with the
|
||||
following structure. Note that it's possible for a kind to be named explicitly,
|
||||
|
|
|
@ -349,32 +349,20 @@ abstract, rather than with the actual property of some specific object.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">SIGIL_ARGUMENTS</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">SIGIL_ARGUMENTS</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">char</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">) {</span>
|
||||
<span class="identifier">ACT_ON_SIGIL</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_text</span><span class="plain">(2, </span><span class="identifier">message</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_begin</span><span class="plain">(</span><span class="identifier">message</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, %2."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::Issue::extension_problem_S</span><span class="plain">(</span><span class="identifier">SIGIL_ARGUMENTS</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">) {</span>
|
||||
<span class="identifier">ACT_ON_SIGIL</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">message</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_begin</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, %2."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Problems::Issue::extension_problem is used in 7/ss (<a href="7-ss.html#SP9_1">§9.1</a>, <a href="7-ss.html#SP9_2">§9.2</a>, <a href="7-ss.html#SP12">§12</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::Issue::extension_problem_S is used in 8/ef (<a href="8-ef.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Problems::Issue::extension_problem is used in 7/ss (<a href="7-ss.html#SP7_1">§7.1</a>, <a href="7-ss.html#SP7_2">§7.2</a>, <a href="7-ss.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Releasing problems. </b>These occur when the release instructions do not make sense. Sometimes it's
|
||||
possible to pin down an exact place where the difficulty occurs, but
|
||||
|
|
|
@ -37,11 +37,23 @@ wouldn't auto-predeclare them; and there aren't so very many of them.)
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_phrase</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Phrases::write_HTML_representation</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">phrase</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="constant">INDEX_PHRASE_FORMAT</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_extension</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_extension</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Extensions::Files::write_full_title_to_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">extension_file</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::write</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">inform_extension</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_copy</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inbuild_copy</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_copy</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_copy</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Copies::write_copy</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">inbuild_copy</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_work</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_work</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_work</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Works::write</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">inbuild_work</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_object</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_object</span><span class="plain">);</span>
|
||||
|
@ -62,10 +74,18 @@ wouldn't auto-predeclare them; and there aren't so very many of them.)
|
|||
|
||||
<p class="endnote">The function Problems::expand_phrase appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Problems::quote_extension is used in 2/si (<a href="2-si.html#SP11">§11</a>), 8/ef (<a href="8-ef.html#SP18">§18</a>), 8/ie (<a href="8-ie.html#SP9">§9</a>, <a href="8-ie.html#SP9_2">§9.2</a>, <a href="8-ie.html#SP9_1_1">§9.1.1</a>, <a href="8-ie.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Problems::quote_extension is used in 2/si (<a href="2-si.html#SP11">§11</a>), 8/ef (<a href="8-ef.html#SP8">§8</a>), 8/ie (<a href="8-ie.html#SP9">§9</a>, <a href="8-ie.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::expand_extension appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Problems::quote_copy is used in 8/ie (<a href="8-ie.html#SP9_1_1">§9.1.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::expand_copy appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Problems::quote_work is used in 3/rst (<a href="3-rst.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::expand_work appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Problems::quote_object is used in <a href="#SP2">§2</a>, 2/si (<a href="2-si.html#SP2">§2</a>, <a href="2-si.html#SP7">§7</a>), 5/ins (<a href="5-ins.html#SP19_1">§19.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Since numerous instances are created without explicit and distinct
|
||||
|
@ -117,11 +137,11 @@ this as some kind of marginal will-never-happen case.
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_invocation</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Phrases::TypeData::Textual::inv_write_HTML_representation</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">parse_node</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension_id</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">extension_identifier</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension_id</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_extension_id</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_extension_id</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Extensions::IDs::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">extension_identifier</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">Works::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">inbuild_work</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_property</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) { </span><span class="identifier">Problems::quote_wording</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-</span><span class="element">>name</span><span class="plain">); }</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_table</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain"> *</span><span class="identifier">tab</span><span class="plain">) {</span>
|
||||
|
@ -139,7 +159,7 @@ this as some kind of marginal will-never-happen case.
|
|||
|
||||
<p class="endnote">The function Problems::expand_invocation appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Problems::quote_extension_id is used in 7/hdn (<a href="7-hdn.html#SP20_1">§20.1</a>, <a href="7-hdn.html#SP21_1">§21.1</a>, <a href="7-hdn.html#SP20_2">§20.2</a>).</p>
|
||||
<p class="endnote">The function Problems::quote_extension_id is used in 7/hdn (<a href="7-hdn.html#SP21_1">§21.1</a>, <a href="7-hdn.html#SP22_1">§22.1</a>, <a href="7-hdn.html#SP21_2">§21.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::expand_extension_id appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>1/wel</title>
|
||||
<title>1/htc</title>
|
||||
<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">
|
||||
|
@ -15,7 +15,6 @@
|
|||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">REDIRECT_PROBLEM_SOURCE_TO</span><span class="plain"> </span><span class="identifier">pathname_of_project</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PROBLEMS_HTML_EMITTER</span><span class="plain"> </span><span class="identifier">HTMLFiles::char_out</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Inform tops and tails its output of problem messages, and it also prints
|
||||
|
@ -29,9 +28,9 @@ non-problem messages when everything was fine. That all happens here:
|
|||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::Using::start_problems_report</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">problems_file</span><span class="plain">, </span><span class="identifier">filename_of_report</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open problem log"</span><span class="plain">, </span><span class="identifier">filename_of_report</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::Using::start_problems_report</span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">problems_file</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open problem log"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">HTMLFiles::html_header</span><span class="plain">(</span><span class="identifier">problems_file</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Translating the Source"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ instance has its own <code class="display"><span class="extract">equation_symbol
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure equation_symbol is accessed in 1/kts, 2/sq, 2/si, 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 5/nv, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 8/ed2, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/pk, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/pr, 15/ep, 15/vp, 15/cp, 15/spr, 16/is, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/rsft, 19/tod, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure equation_symbol is accessed in 2/sq, 2/si, 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 5/nv, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ef, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/pk, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/pr, 15/ep, 15/vp, 15/cp, 15/spr, 16/is, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/rsft, 19/tod, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>In addition, there are some standing symbols used by all equations: the
|
||||
constant "pi", for example. They're stored in this linked list:
|
||||
|
@ -183,7 +183,7 @@ value <code class="display"><span class="extract">pi</span></code>.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Equations::traverse_to_create is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Equations::traverse_to_create is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Equations::visit_to_create appears nowhere else.</p>
|
||||
|
||||
|
@ -419,7 +419,7 @@ source text:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Equations::traverse_to_stock is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Equations::traverse_to_stock is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>And, as with creation, <code class="display"><span class="extract">Equations::examine</span></code> is called explicitly in the meaning
|
||||
list converter when an equation is found inline. So in all cases, we call the
|
||||
|
@ -1824,7 +1824,7 @@ are obliged to issue a problem message.
|
|||
<span class="identifier">tok</span><span class="plain">-</span><span class="element">>gK_before</span><span class="plain"> =</span>
|
||||
<span class="identifier">Kinds::FloatingPoint::new_gk</span><span class="plain">(</span>
|
||||
<span class="identifier">ParseTree::get_kind_of_value</span><span class="plain">(</span><span class="identifier">tok</span><span class="plain">-</span><span class="element">>leaf_constant</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">tok</span><span class="plain">-</span><span class="element">>enode_promotion</span><span class="plain">) && (</span><span class="functiontext">VirtualMachines::supports</span><span class="plain">(</span><span class="identifier">K_real_number</span><span class="plain">)))</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">tok</span><span class="plain">-</span><span class="element">>enode_promotion</span><span class="plain">) && (</span><span class="functiontext">Kinds::RunTime::target_VM_supports</span><span class="plain">(</span><span class="identifier">K_real_number</span><span class="plain">)))</span>
|
||||
<span class="identifier">tok</span><span class="plain">-</span><span class="element">>gK_before</span><span class="plain"> =</span>
|
||||
<span class="identifier">Kinds::FloatingPoint::to_real</span><span class="plain">(</span><span class="identifier">tok</span><span class="plain">-</span><span class="element">>gK_before</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -2197,7 +2197,7 @@ for equations a value; they are never called.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Equations::compile is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Equations::compile is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP44"></a><b>§44. </b>These identifiers are used to compile equation names as values, so:
|
||||
</p>
|
||||
|
|
|
@ -48,11 +48,11 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure activity is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure activity is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="endnote">The structure activity_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure activity_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="endnote">The structure activity_crossref is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure activity_crossref is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
@ -461,7 +461,7 @@ noun for it; for example, the "announcing activity".
|
|||
|
||||
<p class="endnote">The function Activities::add_variable is used in 9/ma (<a href="9-ma.html#SP3_3_25_1">§3.3.25.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::activity_var_creators is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::activity_var_creators is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Activity indexing. </b></p>
|
||||
|
||||
|
@ -907,15 +907,15 @@ values, of the kind to which the activity applies.
|
|||
|
||||
<p class="endnote">The function Activities::emit_activity_list is used in 22/prcd (<a href="22-prcd.html#SP10_5">§10.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::compile_activity_constants is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::compile_activity_constants is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::Activity_before_rulebooks_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::Activity_before_rulebooks_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::Activity_for_rulebooks_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::Activity_for_rulebooks_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::Activity_after_rulebooks_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::Activity_after_rulebooks_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::Activity_atb_rulebooks_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Activities::Activity_atb_rulebooks_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Activities::annotate_list_for_cross_references is used in 22/prcd (<a href="22-prcd.html#SP10_5">§10.5</a>).</p>
|
||||
|
||||
|
|
|
@ -117,9 +117,9 @@ its outcomes.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure named_rulebook_outcome is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/rv, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure named_rulebook_outcome is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/rv, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="endnote">The structure rulebook_outcome is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure rulebook_outcome is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
||||
|
||||
|
@ -608,7 +608,7 @@ can be used in a void context as a sort of return-from-rule phrase.
|
|||
|
||||
<p class="endnote">The function Rulebooks::Outcomes::index_outcomes is used in 21/rl2 (<a href="21-rl2.html#SP15">§15</a>).</p>
|
||||
|
||||
<p class="endnote">The function Rulebooks::Outcomes::RulebookOutcomePrintingRule is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Rulebooks::Outcomes::RulebookOutcomePrintingRule is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Rulebooks::Outcomes::get_default_value is used in 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>).</p>
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ see below.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure rule is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/prcd, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure rule is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/prcd, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b></p>
|
||||
|
||||
|
@ -1373,7 +1373,7 @@ I wonder how useful this really is, but it was much requested at one time.
|
|||
|
||||
<p class="endnote">The function Rules::rule_defines_response is used in 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP4">§4</a>, <a href="17-rs.html#SP7_1">§7.1</a>, <a href="17-rs.html#SP7_3_1">§7.3.1</a>, <a href="17-rs.html#SP12_1_1">§12.1.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Rules::check_response_usages is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Rules::check_response_usages is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Rules::now_rule_defines_response is used in 17/rs (<a href="17-rs.html#SP12_1_1">§12.1.1</a>), 26/tti (<a href="26-tti.html#SP7">§7</a>).</p>
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ have affected it in this way:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure placement_affecting is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure placement_affecting is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>As rulebooks are declared, the first few are quietly copied into
|
||||
a small array: that way, we can always obtain a pointer to, say, the
|
||||
|
@ -673,7 +673,7 @@ built (for instance, scene endings).
|
|||
|
||||
<p class="endnote">The function Rulebooks::get_stv_creator_iname is used in <a href="#SP14_1">§14.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function Rulebooks::rulebook_var_creators is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Rulebooks::rulebook_var_creators is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14_1"></a><b>§14.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Make slow lookup routine</span> <span class="cwebmacronumber">14.1</span>> =
|
||||
|
@ -1231,10 +1231,10 @@ popular rulebooks, showing their contents in logical order.
|
|||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">) > 0)</span>
|
||||
<<span class="cwebmacro">Index the segment for new rulebooks and activities</span> <span class="cwebmacronumber">23.10</span>><span class="plain">;</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> != </span><span class="identifier">standard_rules_extension</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">) > 0)</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">E</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="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">) > 0)</span>
|
||||
<<span class="cwebmacro">Index the segment for the rulebooks in this extension</span> <span class="cwebmacronumber">23.11</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -1477,7 +1477,7 @@ popular rulebooks, showing their contents in logical order.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<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">"<b>From the source text</b>"</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="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">that is, not in an extension at all</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">that is, not in an extension at all</span>
|
||||
<<span class="cwebmacro">Index rulebooks occurring in this part of the source text</span> <span class="cwebmacronumber">23.10.1</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
|
@ -1492,7 +1492,7 @@ popular rulebooks, showing their contents in logical order.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<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">"<b>From the extension "</span><span class="plain">);</span>
|
||||
<span class="functiontext">Extensions::IDs::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">Works::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</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">"</b>"</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="cwebmacro">Index rulebooks occurring in this part of the source text</span> <span class="cwebmacronumber">23.10.1</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
@ -1512,14 +1512,14 @@ popular rulebooks, showing their contents in logical order.
|
|||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</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">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">))</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">E</span><span class="plain">))</span>
|
||||
<span class="functiontext">Rulebooks::index_rules_box</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">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">,</span><span class="reserved"> activity</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">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">-</span><span class="element">>name</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">))</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">E</span><span class="plain">))</span>
|
||||
<span class="functiontext">Activities::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">av</span><span class="plain">, 1);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -1532,20 +1532,20 @@ popular rulebooks, showing their contents in logical order.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::noteworthy_rulebooks</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">int</span><span class="plain"> </span><span class="identifier">nb</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">activity</span><span class="plain"> *</span><span class="identifier">av</span><span class="plain">;</span>
|
||||
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</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">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">E</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">,</span><span class="reserved"> activity</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">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">-</span><span class="element">>name</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">E</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nb</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -50,13 +50,13 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure stacked_variable is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure stacked_variable is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="endnote">The structure stacked_variable_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure stacked_variable_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="endnote">The structure stacked_variable_owner is private to this section.</p>
|
||||
|
||||
<p class="endnote">The structure stacked_variable_owner_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure stacked_variable_owner_list is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ name of a new constant.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::traverse_for_names is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::traverse_for_names is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::visit_for_names appears nowhere else.</p>
|
||||
|
||||
|
@ -200,7 +200,7 @@ placement later on.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::traverse is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::traverse is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::visit_to_count appears nowhere else.</p>
|
||||
|
||||
|
@ -227,7 +227,7 @@ counting local variables, whose names only exist fleetingly).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::register_meanings is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::register_meanings is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Noon. </b>When the final phrase is registered, the hour chimes. From this point
|
||||
onwards, there's no longer any text which can't be parsed because some
|
||||
|
@ -276,7 +276,7 @@ correctly refer to the most recently mentioned action.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::parse_rule_parameters is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::parse_rule_parameters is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>We can finally make the automatic placements of rules into rulebooks: so
|
||||
our "fire alarm rule" will at last be placed in the "Instead" rulebook. The
|
||||
|
@ -296,7 +296,7 @@ PHRCDs are used to make sure it appears in the right position.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::add_rules_to_rulebooks is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::add_rules_to_rulebooks is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>It might seem as if the rulebooks are now complete, but this is not true,
|
||||
because we still have to take care of manual placements like:
|
||||
|
@ -333,7 +333,7 @@ only conditionally, or substituted by other rules.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::parse_rule_placements is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::parse_rule_placements is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::visit_to_parse_placements appears nowhere else.</p>
|
||||
|
||||
|
@ -363,7 +363,7 @@ adjective definitions.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::compile_first_block is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::compile_first_block is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Count up the scale of the task</span> <span class="cwebmacronumber">10.1</span>> =
|
||||
|
@ -598,11 +598,11 @@ noted down:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::rulebooks_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::rulebooks_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::compile_rulebooks is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::compile_rulebooks is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::RulebookNames_array is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::RulebookNames_array is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>And finally, just as the sun slips below the horizon, we compile the code
|
||||
which prints out values of the kind "rule" at run-time — for example, taking
|
||||
|
@ -620,7 +620,7 @@ printing out "fire alarm rule".
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::RulePrintingRule_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::RulePrintingRule_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. Evening. </b>The twilight gathers, but our work is far from done. Recall that we have
|
||||
accumulated compilation requests for "To..." phrases, but haven't actually
|
||||
|
@ -692,7 +692,7 @@ can be called multiple times in the course of the evening.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Manager::compile_as_needed is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Manager::compile_as_needed is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="22-itp.html">Back to 'Introduction to Phrases'</a></li><li><a href="22-ph.html">Continue with 'Phrases'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -41,7 +41,7 @@ own right, a functional-programming sort of device. For example:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure constant_phrase is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure constant_phrase is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Here we create a new named phrase ("doubling", say):
|
||||
</p>
|
||||
|
@ -188,7 +188,7 @@ an I6 routine name, but no: it compiles to a small array called a "closure".
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Constants::compile_closures is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Constants::compile_closures is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b>The closure array consists of three words: the strong kind ID, the address
|
||||
of the routine, and the text of the name. (The latter enables us to print
|
||||
|
|
|
@ -693,7 +693,7 @@ response to "requests". All other phrases are compiled just once.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::invoke_to_begin is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::invoke_to_begin is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="22-cs.html">Back to 'Construction Sequence'</a></li><li><a href="22-pu.html">Continue with 'Phrase Usage'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -33,8 +33,8 @@ suppress indexing of their definitions.
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Phrases::Index::index_page_Phrasebook</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">=1; </span><span class="identifier">pass</span><span class="plain"><=2; </span><span class="identifier">pass</span><span class="plain">++) {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">last_extension_named</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">division</span><span class="plain"> = 0, </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain">); </span><span class="identifier">division</span><span class="plain"> <= </span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">division</span><span class="plain">++) {</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">last_extension_named</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">division</span><span class="plain"> = 0, </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="identifier">inform_extension</span><span class="plain">); </span><span class="identifier">division</span><span class="plain"> <= </span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">division</span><span class="plain">++) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">last_heading_named</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_subdivision_yet</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">CLW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
|
@ -48,7 +48,7 @@ suppress indexing of their definitions.
|
|||
<span class="functiontext">Sentences::Headings::of_wording</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="functiontext">Phrases::declaration_node</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Sentences::Headings::indexed</span><span class="plain">(</span><span class="identifier">this_heading</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="comment">and only if that heading lies in the piece of source for this division</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">this_extension</span><span class="plain"> =</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">this_extension</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">this_heading</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">division</span><span class="plain"> == </span><span class="identifier">N</span><span class="plain">) { </span> <span class="comment">skip phrase unless it's in the source text</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">this_extension</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
|
@ -89,13 +89,13 @@ the extension's name as a major subheading in our index.
|
|||
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">, </span><span class="string">"class=\</span><span class="plain">"</span><span class="string">in1\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>Defined in the source</b>"</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">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">this_extension</span><span class="plain"> != </span><span class="identifier">standard_rules_extension</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">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">this_extension</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">pass</span><span class="plain"> == 2) </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">, </span><span class="string">"class=\</span><span class="plain">"</span><span class="string">in1\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>From the extension "</span><span class="plain">);</span>
|
||||
<span class="functiontext">Extensions::Files::write_name_to_file</span><span class="plain">(</span><span class="identifier">this_extension</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::write_name_to_file</span><span class="plain">(</span><span class="identifier">this_extension</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" by "</span><span class="plain">);</span>
|
||||
<span class="functiontext">Extensions::Files::write_author_to_file</span><span class="plain">(</span><span class="identifier">this_extension</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::write_author_to_file</span><span class="plain">(</span><span class="identifier">this_extension</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</b>"</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>
|
||||
|
@ -120,7 +120,7 @@ each has a paragraph of its own.
|
|||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">HW</span><span class="plain"> = </span><span class="functiontext">Sentences::Headings::get_text</span><span class="plain">(</span><span class="identifier">this_heading</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">HW</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><<span class="cwebmacro">Strip away bracketed matter in the heading name</span> <span class="cwebmacronumber">1.2.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">this_extension</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">this_extension</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Mark a faked division due to inter-hyphen clue in SR heading</span> <span class="cwebmacronumber">1.2.3</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ valid as values, since a condition is not also a value in Inform 7.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure phrase_option is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure phrase_option is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. Creation. </b>By default, a phrase has no options.
|
||||
</p>
|
||||
|
|
|
@ -41,7 +41,7 @@ defined as "At 9:00 AM: ..." But two values are special:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure use_as_event is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure use_as_event is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>Timed events are stored in two simple arrays, processed by run-time code.
|
||||
</p>
|
||||
|
@ -91,9 +91,9 @@ defined as "At 9:00 AM: ..." But two values are special:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Timed::TimedEventsTable is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>), 22/cs (<a href="22-cs.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Phrases::Timed::TimedEventsTable is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>), 22/cs (<a href="22-cs.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Timed::TimedEventTimesTable is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>), 22/cs (<a href="22-cs.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Phrases::Timed::TimedEventTimesTable is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>), 22/cs (<a href="22-cs.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>That's it, really: everything else is just indexing.
|
||||
</p>
|
||||
|
@ -144,7 +144,7 @@ arguably shouldn't block compilation. Then again...
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Timed::check_for_unused is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Phrases::Timed::check_for_unused is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>And here's the actual index segment.
|
||||
</p>
|
||||
|
|
|
@ -182,7 +182,7 @@ the doubled use of colons is unfortunate.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Phrases::Adjectives::traverse is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Phrases::Adjectives::traverse is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::Adjectives::look_for_headers appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -325,7 +325,7 @@ late to create any further past tense references, so:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Chronology::allow_no_further_past_tenses is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Chronology::allow_no_further_past_tenses is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>The <code class="display"><span class="extract">{-A}</span></code> ("past actions") escape.
|
||||
A series of <code class="display"><span class="extract">if</span></code> statements checking whether each past-tense action is now
|
||||
|
@ -404,7 +404,7 @@ ever tampered with.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Chronology::past_actions_i6_routines is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Chronology::past_actions_i6_routines is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b></p>
|
||||
|
||||
|
@ -454,7 +454,7 @@ ever tampered with.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Chronology::past_tenses_i6_escape is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Chronology::past_tenses_i6_escape is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Unpack the past</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
|
@ -931,7 +931,7 @@ times".
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Chronology::chronology_extents_i6_escape is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Chronology::chronology_extents_i6_escape is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="24-sf.html">Back to 'Stack Frames'</a></li><li><i>(This section ends Chapter 24: Compilation Context.)</i></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -102,7 +102,7 @@ marks it as deallocated.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure local_variable is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure local_variable is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>A local variable needs to be stored somewhere at run-time. The obvious
|
||||
correspondence is to put these into I6 local variables, which are, in effect,
|
||||
|
@ -462,7 +462,7 @@ scratch work-space which can be used in the compiled code.
|
|||
|
||||
<p class="endnote">The function LocalVariables::add_named_call is used in <a href="#SP47">§47</a>, 13/rsfk (<a href="13-rsfk.html#SP24_6_3">§24.6.3</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::add_named_call_as_symbol is used in 4/am (<a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cad (<a href="12-cad.html#SP5">§5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">§2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">§2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 17/rs (<a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 24/ch (<a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>).</p>
|
||||
<p class="endnote">The function LocalVariables::add_named_call_as_symbol is used in 4/am (<a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP9">§9</a>), 12/cad (<a href="12-cad.html#SP5">§5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">§2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">§2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 17/rs (<a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 24/ch (<a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::add_named_call_as_symbol_noting is used in 6/rlt (<a href="6-rlt.html#SP15_2">§15.2</a>).</p>
|
||||
|
||||
|
|
|
@ -586,8 +586,8 @@ no subsequent lines are looked at.
|
|||
<span class="identifier">Produce::inv_call_iname</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">ARGUMENTTYPEFAILED_HL</span><span class="plain">));</span>
|
||||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">sl</span><span class="plain">.</span><span class="identifier">line_number</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sl</span><span class="plain">.</span><span class="identifier">file_of_origin</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain">) </span><span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">ef</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> + 1);</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sl</span><span class="plain">.</span><span class="identifier">file_of_origin</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) </span><span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> + 1);</span>
|
||||
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -2411,7 +2411,7 @@ because neither syntax will compile when I6 is compiling for the other VM.
|
|||
<span class="identifier">Produce::ref_iname</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">UNICODE_TEMP_HL</span><span class="plain">));</span>
|
||||
<span class="functiontext">Specifications::Compiler::emit_to_kind</span><span class="plain">(</span><span class="identifier">to_say</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
||||
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">()) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) {</span>
|
||||
<span class="identifier">Produce::inv_assembly</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"@print_unicode"</span><span class="plain">);</span>
|
||||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="identifier">Produce::val_iname</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">UNICODE_TEMP_HL</span><span class="plain">));</span>
|
||||
|
|
|
@ -84,12 +84,6 @@ should always be supplied for "To..." phrases, but left null for rules.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">definition_area</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Sentences::Headings::of_wording</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>declaration_node</span><span class="plain">));</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">definition_extension</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">definition_area</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">definition_extension</span><span class="plain">)</span>
|
||||
<span class="functiontext">Extensions::Files::write_I6_comment_describing</span><span class="plain">(</span><span class="identifier">definition_extension</span><span class="plain">);</span>
|
||||
<span class="functiontext">Routines::ToPhrases::comment_on_request</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">);</span>
|
||||
<span class="functiontext">Phrases::Usage::write_I6_comment_describing</span><span class="plain">(&(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>usage_data</span><span class="plain">));</span>
|
||||
</pre>
|
||||
|
|
180
docs/core-module/26-fc.html
Normal file
180
docs/core-module/26-fc.html
Normal file
|
@ -0,0 +1,180 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>25/cp</title>
|
||||
<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>
|
||||
|
||||
<!--Weave of '26/fc' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Fundamental Constants</b></li></ul><p class="purpose">Inter constants for, say, extremal number values, which depend on the target we are compiling to, and are generally low-level in nature.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>Fundamental constants are emitted about our choice of virtual machine.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The old I6 library used to confuse Z-vs-G with 16-vs-32-bit, but we try
|
||||
to separate these distinctions here, even though at present the Z-machine
|
||||
is our only 16-bit target and Glulx our only 32-bit one. The <code class="display"><span class="extract">WORDSIZE</span></code>
|
||||
constant is the word size in bytes, so is the multiplier between <code class="display"><span class="extract">-></span></code> and
|
||||
<code class="display"><span class="extract">--></span></code> offsets in I6 pointer syntax.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<ul class="items"><li>(1) <code class="display"><span class="extract">NULL</span></code> is used, as in C, to represent a null value or pointer. In C,
|
||||
this is conventionally 0, but here it is the maximum unsigned value which
|
||||
can be stored, pointing to the topmost byte in the directly addressable
|
||||
memory map; this means it is also -1 when regarded as a signed
|
||||
twos-complement integer, but we write it as an unsigned hexadecimal
|
||||
address for clarity's sake.
|
||||
</li></ul>
|
||||
<ul class="items"><li>(2) <code class="display"><span class="extract">WORD_HIGHBIT</span></code> is the most significant bit in the VM's data word.
|
||||
</li></ul>
|
||||
<ul class="items"><li>(3) <code class="display"><span class="extract">IMPROBABLE_VALUE</span></code> is one which is unlikely but still possible
|
||||
to be a genuine I7 value. The efficiency of some algorithms depends on
|
||||
how well chosen this is: they would ran badly if we chose 1, for instance.
|
||||
</li></ul>
|
||||
<ul class="items"><li>(4) <code class="display"><span class="extract">MAX_POSITIVE_NUMBER</span></code> is the largest representable positive (signed)
|
||||
integer, in twos-complement form.
|
||||
</li></ul>
|
||||
<ul class="items"><li>(5) <code class="display"><span class="extract">REPARSE_CODE</span></code> is a magic value used in the I6 library's parser to
|
||||
signal that some code which ought to have been parsing a command has in
|
||||
fact rewritten it, so that the whole command must be re-parsed afresh.
|
||||
(Returning this value is like throwing an exception in a language like
|
||||
Java, though we don't implement it that way.) A comment in the 6/11 library
|
||||
reads: "The parser rather gunkily adds addresses to <code class="display"><span class="extract">REPARSE_CODE</span></code> for
|
||||
some purposes. And expects the result to be greater than <code class="display"><span class="extract">REPARSE_CODE</span></code>
|
||||
(signed comparison). So Glulx Inform is limited to a single gigabyte of
|
||||
storage, for the moment." Guilty as charged, but the gigabyte story file
|
||||
is a remote prospect for now. Anyway, it's this comparison issue which
|
||||
means we need a different value for each possible word size.
|
||||
</li></ul>
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">FundamentalConstants::emit_signed</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::named_numeric_constant_signed</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::named_numeric_constant_hex</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">FundamentalConstants::emit_unchecked_hex</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::named_unchecked_constant_hex</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">FundamentalConstants::emit</span><span class="plain">(</span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VM</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"target VM not set yet"</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::debug_enabled</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">))</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">DEBUG_HL</span><span class="plain">, 1);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">-></span><span class="identifier">family_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Z-Machine"</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">TARGET_ZCODE_HL</span><span class="plain">, 1);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">DICT_WORD_SIZE_HL</span><span class="plain">, 6);</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">Str::eq</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">-></span><span class="identifier">family_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Glulx"</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">TARGET_GLULX_HL</span><span class="plain">, 1);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">DICT_WORD_SIZE_HL</span><span class="plain">, 9);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">INDIV_PROP_START_HL</span><span class="plain">, 0);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">WORDSIZE_HL</span><span class="plain">, 2);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_unchecked_hex</span><span class="plain">(</span><span class="constant">NULL_HL</span><span class="plain">, 0</span><span class="identifier">xffff</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">WORD_HIGHBIT_HL</span><span class="plain">, 0</span><span class="identifier">x8000</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">WORD_NEXTTOHIGHBIT_HL</span><span class="plain">, 0</span><span class="identifier">x4000</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">IMPROBABLE_VALUE_HL</span><span class="plain">, 0</span><span class="identifier">x7fe3</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">REPARSE_CODE_HL</span><span class="plain">, 10000);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">MAX_POSITIVE_NUMBER_HL</span><span class="plain">, 32767);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_signed</span><span class="plain">(</span><span class="constant">MIN_NEGATIVE_NUMBER_HL</span><span class="plain">, -32768);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">WORDSIZE_HL</span><span class="plain">, 4);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_unchecked_hex</span><span class="plain">(</span><span class="constant">NULL_HL</span><span class="plain">, 0</span><span class="identifier">xffffffff</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">WORD_HIGHBIT_HL</span><span class="plain">, 0</span><span class="identifier">x80000000</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">WORD_NEXTTOHIGHBIT_HL</span><span class="plain">, 0</span><span class="identifier">x40000000</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">IMPROBABLE_VALUE_HL</span><span class="plain">, 0</span><span class="identifier">xdeadce11</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_hex</span><span class="plain">(</span><span class="constant">REPARSE_CODE_HL</span><span class="plain">, 0</span><span class="identifier">x40000000</span><span class="plain">);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_one</span><span class="plain">(</span><span class="constant">MAX_POSITIVE_NUMBER_HL</span><span class="plain">, 2147483647);</span>
|
||||
<span class="functiontext">FundamentalConstants::emit_signed</span><span class="plain">(</span><span class="constant">MIN_NEGATIVE_NUMBER_HL</span><span class="plain">, -2147483648);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit_one appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit_signed appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit_hex appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit_unchecked_hex appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit is used in 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>This version-numbering constant is not really to do with the VM (it is
|
||||
Inform's own version number), but it belongs nowhere else either, so:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">FundamentalConstants::emit_build_number</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">build</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">build</span><span class="plain">, </span><span class="string">"%B"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">NI_BUILD_COUNT_HL</span><span class="plain">);</span>
|
||||
<span class="functiontext">Emit::named_string_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">build</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">build</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::emit_build_number is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>This also doesn't really belong here, but...
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">FundamentalConstants::veto_number</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">X</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">X</span><span class="plain"> > 32767) || (</span><span class="identifier">X</span><span class="plain"> < -32768)) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()))) {</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_LiteralOverflow</span><span class="plain">),</span>
|
||||
<span class="string">"you use a number which is too large"</span><span class="plain">,</span>
|
||||
<span class="string">"at least with the Settings for this project as they currently "</span>
|
||||
<span class="string">"are. (Change to Glulx to be allowed to use much larger numbers.)"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function FundamentalConstants::veto_number appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 26: Compilation Utilities.)</i></li><li><a href="26-i6i.html">Continue with 'Inform 6 Inclusions'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>26/vm</title>
|
||||
<title>26/fc</title>
|
||||
<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">
|
||||
|
@ -350,7 +350,7 @@ requests, which, again, we do by instructing the Template code.
|
|||
<p class="endnote">The function Config::Inclusions::compile_inclusions_for_subject is used in 15/epv (<a href="15-epv.html#SP1_1_2">§1.1.2</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="26-vm.html">Back to 'Virtual Machines'</a></li><li><a href="26-uo.html">Continue with 'Use Options'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="26-fc.html">Back to 'Fundamental Constants'</a></li><li><a href="26-uo.html">Continue with 'Use Options'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -67,9 +67,9 @@ and <code class="display"><span class="extract">+)</span></code> Inform 7 escape
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function I6T::interpret_kindt is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function I6T::interpret_kindt appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function I6T::interpret_indext is used in 1/mr (<a href="1-mr.html#SP4_17">§4.17</a>).</p>
|
||||
<p class="endnote">The function I6T::interpret_indext is used in 3/nl (<a href="3-nl.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function I6T::interpret_i6t is used in 26/i6i (<a href="26-i6i.html#SP7">§7</a>, <a href="26-i6i.html#SP8">§8</a>), 26/uo (<a href="26-uo.html#SP17">§17</a>).</p>
|
||||
|
||||
|
@ -166,7 +166,11 @@ file.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">segment_name</span><span class="plain">) > 0) {</span>
|
||||
<<span class="cwebmacro">Open the I6 template file</span> <span class="cwebmacronumber">2.1.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"inform: Unable to open segment <%S>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">segment_name</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::unlocated_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span> <span class="comment">or anyway not usefully testable</span>
|
||||
<span class="string">"I couldn't open a requested I6T segment: see the console "</span>
|
||||
<span class="string">"output for details."</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">index_template</span><span class="plain">) {</span>
|
||||
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">index_template</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_File</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
|
@ -181,41 +185,6 @@ file.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1_1"></a><b>§2.1.1. </b>We look for the <code class="display"><span class="extract">.i6t</span></code> files first in the materials folder, then in the
|
||||
installed area and lastly (but almost always) in the built-in resources.
|
||||
Within those, we look inside <code class="display"><span class="extract">Inter/kinds</span></code> for <code class="display"><span class="extract">*.kindt</span></code> files,
|
||||
and <code class="display"><span class="extract">Inter/miscellaneous</span></code> for <code class="display"><span class="extract">*.i6t</span></code> files (though at present Inform makes
|
||||
no use of this ability).
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Open the I6 template file</span> <span class="cwebmacronumber">2.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain"><</span><span class="constant">NO_FS_AREAS</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_File</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">pathname_of_inter_resources</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">];</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">int_mode</span><span class="plain"> == </span><span class="constant">KINDT_MODE</span><span class="plain">) </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kinds"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"miscellaneous"</span><span class="plain">);</span>
|
||||
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span>
|
||||
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">segment_name</span><span class="plain">), </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_File</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"inform: Unable to open segment <%S>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">segment_name</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::unlocated_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span> <span class="comment">or anyway not usefully testable</span>
|
||||
<span class="string">"I couldn't open a requested I6T segment: see the console "</span>
|
||||
<span class="string">"output for details."</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2_1">§2.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b>I6 template files are encoded as ISO Latin-1, not as Unicode UTF-8, so
|
||||
ordinary <code class="display"><span class="extract">fgetc</span></code> is used, and no BOM marker is parsed. Lines are assumed
|
||||
to be terminated with either <code class="display"><span class="extract">0x0a</span></code> or <code class="display"><span class="extract">0x0d</span></code>. (Since blank lines are
|
||||
|
|
|
@ -181,7 +181,7 @@ specification <code class="display"><span class="extract">--> 0</span></code>
|
|||
|
||||
<p class="endnote">The function JumpLabels::allocate_counter is used in 25/cii (<a href="25-cii.html#SP3_4_6">§3.4.6</a>).</p>
|
||||
|
||||
<p class="endnote">The function JumpLabels::compile_necessary_storage is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function JumpLabels::compile_necessary_storage is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="26-lt.html">Back to 'List Together'</a></li><li><a href="26-ct.html">Continue with 'Compiled Text'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure plugin_call is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure plugin_call is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '26/pl' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Plugins</b></li></ul><p class="purpose">To manage the interface between core Inform and some of its outlying or domain-specific components.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP4">§4. Names of the great plugins</a></li><li><a href="#SP7">§7. Plugins</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP4">§4. Names of the great plugins</a></li><li><a href="#SP7">§7. Plugins</a></li><li><a href="#SP12">§12. Describing the current VM</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
||||
|
||||
|
@ -238,7 +238,7 @@ present.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::start is used in 1/mr (<a href="1-mr.html#SP4_7">§4.7</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::start is used in 1/htc (<a href="1-htc.html#SP2_1">§2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Although most of Inform's brain remains the same, the outermost part can
|
||||
be put together from whatever skills are required: our modular oblongata,
|
||||
|
@ -332,11 +332,11 @@ with the following.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::parse is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::parse appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::activate is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::activate appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::deactivate is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::deactivate appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue problem for trying to remove the core</span> <span class="cwebmacronumber">10.1</span>> =
|
||||
|
@ -367,7 +367,88 @@ with the following.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">start</span><span class="plain">) (*</span><span class="identifier">start</span><span class="plain">)();</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::start_plugins is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Describing the current VM. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Plugins::Manage::index_innards</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Plugins::Manage::index_VM</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">);</span>
|
||||
<span class="functiontext">UseOptions::index</span><span class="plain">(</span><span class="identifier">OUT</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">Index::extra_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 3);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"See some technicalities for Inform maintainers only"</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">Index::extra_div_open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 3, 2, </span><span class="string">"e0e0e0"</span><span class="plain">);</span>
|
||||
<span class="functiontext">Plugins::Manage::show_configuration</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Add some paste buttons for the debugging log</span> <span class="cwebmacronumber">12.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">Index::extra_div_close</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"e0e0e0"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::index_innards appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12_1"></a><b>§12.1. </b>The index provides some hidden paste icons for these:
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Add some paste buttons for the debugging log</span> <span class="cwebmacronumber">12.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<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">"Debugging log:"</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="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">NO_DEFINED_DA_VALUES</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="identifier">debugging_aspect</span><span class="plain"> *</span><span class="identifier">da</span><span class="plain"> = &(</span><span class="identifier">the_debugging_aspects</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">Str::len</span><span class="plain">(</span><span class="identifier">da</span><span class="plain">-></span><span class="identifier">unhyphenated_name</span><span class="plain">) > 0) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">is</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">is</span><span class="plain">, </span><span class="string">"Include %S in the debugging log."</span><span class="plain">, </span><span class="identifier">da</span><span class="plain">-></span><span class="identifier">unhyphenated_name</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">is</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;%S"</span><span class="plain">, </span><span class="identifier">is</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">is</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="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Plugins::Manage::index_VM</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VM</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"target VM not set yet"</span><span class="plain">);</span>
|
||||
<span class="identifier">Index::anchor</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"STORYFILE"</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">"Story file format: "</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::Census::plot_icon</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">);</span>
|
||||
<span class="identifier">TargetVMs::write</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">VM</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>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::index_VM is used in <a href="#SP12">§12</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Plugins::Manage::show_configuration</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">Index::anchor</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"CONFIG"</span><span class="plain">);</span>
|
||||
|
@ -397,13 +478,11 @@ with the following.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::start_plugins is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::show_configuration is used in <a href="#SP12">§12</a>.</p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::show_configuration is used in 26/vm (<a href="26-vm.html#SP19">§19</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::show appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::show is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Plugins::Manage::plugged_in is used in 1/mr (<a href="1-mr.html#SP4_7">§4.7</a>, <a href="1-mr.html#SP4_17">§4.17</a>), 5/ipw (<a href="5-ipw.html#SP2">§2</a>), 9/rpt (<a href="9-rpt.html#SP9_5">§9.5</a>), 16/ic (<a href="16-ic.html#SP15">§15</a>), 21/rl (<a href="21-rl.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Plugins::Manage::plugged_in is used in 1/htc (<a href="1-htc.html#SP2_1">§2.1</a>, <a href="1-htc.html#SP2_9">§2.9</a>), 5/ipw (<a href="5-ipw.html#SP2">§2</a>), 9/rpt (<a href="9-rpt.html#SP9_5">§9.5</a>), 16/ic (<a href="16-ic.html#SP15">§15</a>), 21/rl (<a href="21-rl.html#SP8">§8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="26-iti.html">Back to 'I6 Template Interpreter'</a></li><li><a href="26-pc.html">Continue with 'Plugin Calls'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -28,7 +28,7 @@ already been set up, or not. Here's not:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Routines::begin is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/ph (<a href="22-ph.html#SP13">§13</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Routines::begin is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP9">§9</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/ph (<a href="22-ph.html#SP13">§13</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>During the time when we're compiling the body of the routine,
|
||||
we need to keep track of:
|
||||
|
@ -113,7 +113,7 @@ did not.
|
|||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">needed</span><span class="plain"> = </span><span class="functiontext">LocalVariables::count</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kernel_name</span><span class="plain">) </span><span class="identifier">needed</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::allow_this_many_locals</span><span class="plain">(</span><span class="identifier">needed</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">TargetVMs::allow_this_many_locals</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">(), </span><span class="identifier">needed</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Issue a problem for too many locals</span> <span class="cwebmacronumber">4.2</span>><span class="plain">;</span>
|
||||
|
||||
<span class="functiontext">LocalVariables::declare</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
|
@ -133,7 +133,7 @@ did not.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Routines::end is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/ph (<a href="22-ph.html#SP13">§13</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 25/cp (<a href="25-cp.html#SP3">§3</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Routines::end is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP9">§9</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/ph (<a href="22-ph.html#SP13">§13</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 25/cp (<a href="25-cp.html#SP3">§3</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_1"></a><b>§4.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile an outer shell routine with the public-facing name</span> <span class="cwebmacronumber">4.1</span>> =
|
||||
|
|
|
@ -43,7 +43,7 @@ attached.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure test_scenario is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 25/cp, 26/uo and here.</p>
|
||||
<p class="endnote">The structure test_scenario is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 25/cp, 26/uo and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b></p>
|
||||
|
||||
|
@ -531,11 +531,11 @@ without notice.
|
|||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::check_test_command is used in <a href="#SP8_1">§8.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::write_text is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::write_text is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::TestScriptSub_stub_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::TestScriptSub_stub_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::TestScriptSub_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::TestScriptSub_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b></p>
|
||||
|
||||
|
@ -628,7 +628,7 @@ without notice.
|
|||
<span class="functiontext">Equations::internal_test</span><span class="plain">(</span><span class="identifier">itc</span><span class="plain">-</span><span class="element">>text_supplying_the_case</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">VERB_INTT</span><span class="plain">:</span>
|
||||
<span class="identifier">Conjugation::test</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">itc</span><span class="plain">-</span><span class="element">>text_supplying_the_case</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">Conjugation::test</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">itc</span><span class="plain">-</span><span class="element">>text_supplying_the_case</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</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">ADJECTIVE_INTT</span><span class="plain">:</span>
|
||||
<span class="identifier">Adjectives::test_adjective</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">itc</span><span class="plain">-</span><span class="element">>text_supplying_the_case</span><span class="plain">);</span>
|
||||
|
@ -685,7 +685,7 @@ without notice.
|
|||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::new_internal is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::InternalTestCases_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::InternalTestCases_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function PL::Parsing::TestScripts::begin_internal_reporting is used in 20/eq (<a href="20-eq.html#SP52">§52</a>).</p>
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ set a use option applying only to itself.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure use_option is accessed in 1/kts, 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/ts and here.</p>
|
||||
<p class="endnote">The structure use_option is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Five of the pragma-like settings are stored here:
|
||||
</p>
|
||||
|
@ -348,11 +348,11 @@ there is no need to translate this to other languages.)
|
|||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain"> = </span><span class="functiontext">UseOptions::parse_uo</span><span class="plain">(</span><span class="identifier">OW</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">) {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</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">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Adjust the minimum setting</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) {</span>
|
||||
<span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</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">OW</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span> <span class="comment">that is, if used in the main source text</span>
|
||||
<span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</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">OW</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span> <span class="comment">that is, if used in the main source text</span>
|
||||
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -376,7 +376,7 @@ there is no need to translate this to other languages.)
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">CW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">inter</span><span class="plain">-</span><span class="identifier">pipeline</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) </span><span class="functiontext">CoreMain::set_inter_pipeline</span><span class="plain">(</span><span class="identifier">CW</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) </span><span class="identifier">Inbuild::set_inter_pipeline</span><span class="plain">(</span><span class="identifier">CW</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
|
@ -450,7 +450,7 @@ there is no need to translate this to other languages.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseOptions::set_immediate_option_flags is used in <a href="#SP11_1">§11.1</a>, 3/rst (<a href="3-rst.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function UseOptions::set_immediate_option_flags is used in <a href="#SP11_1">§11.1</a>, 3/rst (<a href="3-rst.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>Some use options need to acted on immediately — for instance, if they're
|
||||
set in the "Options.txt" file and they affect how Inform parses subsequent
|
||||
|
@ -484,11 +484,11 @@ those which need immediate action.
|
|||
<pre class="displaydefn">
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">[1]) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AUTHORIAL_MODESTY_UO</span><span class="plain">: {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</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="functiontext">SourceFiles::get_extension_corresponding</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">W</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="functiontext">Extensions::Files::set_general_authorial_modesty</span><span class="plain">();</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Extensions::Files::set_authorial_modesty</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">Extensions::set_general_authorial_modesty</span><span class="plain">();</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Extensions::set_authorial_modesty</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DYNAMIC_MEMORY_ALLOCATION_UO</span><span class="plain">:</span>
|
||||
|
@ -560,13 +560,13 @@ pragma is set:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">category</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">category</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="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</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">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>where_used</span><span class="plain">)))):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">efo</span><span class="plain"> = (</span><span class="identifier">sf</span><span class="plain">)?(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</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">efo</span><span class="plain"> = (</span><span class="identifier">sf</span><span class="plain">)?(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">)):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">category</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sf</span><span class="plain">) && (</span><span class="identifier">efo</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">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 2: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</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">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 3: </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sf</span><span class="plain">) && (</span><span class="identifier">efo</span><span class="plain"> == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 3: </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sf</span><span class="plain">) && (</span><span class="identifier">efo</span><span class="plain"> == </span><span class="identifier">E</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -603,7 +603,7 @@ and problem messages must be issued.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseOptions::compile is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function UseOptions::compile is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>I6 memory settings need to be issued as ICL commands at the top of the I6
|
||||
source code: see the DM4 for details.
|
||||
|
@ -616,7 +616,7 @@ source code: see the DM4 for details.
|
|||
<span class="reserved">i6_memory_setting</span><span class="plain"> *</span><span class="identifier">ms</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ms</span><span class="plain">, </span><span class="reserved">i6_memory_setting</span><span class="plain">) {</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">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"MAX_LOCAL_VARIABLES"</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">VirtualMachines::allow_MAX_LOCAL_VARIABLES</span><span class="plain">() == </span><span class="identifier">FALSE</span><span class="plain">))</span>
|
||||
<span class="plain">(</span><span class="identifier">TargetVMs::allow_MAX_LOCAL_VARIABLES</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">))</span>
|
||||
<span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">prag</span><span class="plain">, </span><span class="string">"$%S=%d"</span><span class="plain">, </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>ICL_identifier</span><span class="plain">, </span><span class="identifier">ms</span><span class="plain">-</span><span class="element">>number</span><span class="plain">);</span>
|
||||
|
@ -628,7 +628,7 @@ source code: see the DM4 for details.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseOptions::compile_icl_commands is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function UseOptions::compile_icl_commands is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>Now for indexing, where there's nothing much to see.
|
||||
</p>
|
||||
|
@ -645,8 +645,9 @@ source code: see the DM4 for details.
|
|||
<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">"The following use options are in force:"</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">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">MAIN_TEXT_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">OPTIONS_FILE_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">) </span><span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">EXTENSION_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">ef</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="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">)</span>
|
||||
<span class="functiontext">UseOptions::index_options_in_force_from</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">EXTENSION_UO_ORIGIN</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
||||
|
@ -670,7 +671,7 @@ source code: see the DM4 for details.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseOptions::index is used in 26/vm (<a href="26-vm.html#SP19">§19</a>).</p>
|
||||
<p class="endnote">The function UseOptions::index is used in 26/pl (<a href="26-pl.html#SP12">§12</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19_1"></a><b>§19.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Write in the index line for a use option not taken</span> <span class="cwebmacronumber">19.1</span>> =
|
||||
|
@ -695,13 +696,13 @@ source code: see the DM4 for details.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::index_options_in_force_from</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">category</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::index_options_in_force_from</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">category</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">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">use_option</span><span class="plain"> *</span><span class="identifier">uo</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> < 0) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">))) {</span>
|
||||
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">))) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">++ == 0) </span><<span class="cwebmacro">Write in the use option subheading</span> <span class="cwebmacronumber">20.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write in the index line for a use option taken</span> <span class="cwebmacronumber">20.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -709,7 +710,7 @@ source code: see the DM4 for details.
|
|||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="reserved">use_option</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>source_file_scoped</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>option_used</span><span class="plain">) && (</span><span class="identifier">uo</span><span class="plain">-</span><span class="element">>minimum_setting_value</span><span class="plain"> >= 0)) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">ef</span><span class="plain">))) {</span>
|
||||
<span class="plain">(</span><span class="functiontext">UseOptions::uo_set_from</span><span class="plain">(</span><span class="identifier">uo</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">))) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">++ == 0) </span><<span class="cwebmacro">Write in the use option subheading</span> <span class="cwebmacronumber">20.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write in the index line for a use option taken</span> <span class="cwebmacronumber">20.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -737,9 +738,9 @@ source code: see the DM4 for details.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the Options.txt configuration file"</span><span class="plain">);</span>
|
||||
<span class="identifier">Index::DocReferences::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"OPTIONSFILE"</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">EXTENSION_UO_ORIGIN</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the "</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the "</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"the extension "</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">ef</span><span class="plain">-</span><span class="element">>title_text</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">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">title</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
|
||||
|
@ -793,7 +794,7 @@ one to test them, one to print them.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseOptions::TestUseOption_routine is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function UseOptions::TestUseOption_routine is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21_1"></a><b>§21.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile the TestUseOption routine</span> <span class="cwebmacronumber">21.1</span>> =
|
||||
|
@ -876,6 +877,16 @@ one to test them, one to print them.
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_verb_verb_exists</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">story_author_given</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">ranking_table_given</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">scoring_option_set</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">; </span> <span class="comment">Whether in this case a score is kept at run time</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_deprecated_features</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">forbid syntaxes marked as deprecated?</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseOptions::no_verb_verb</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">no_verb_verb_exists</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -916,7 +927,7 @@ one to test them, one to print them.
|
|||
|
||||
<p class="endnote">The function UseOptions::ranking_table_given appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function UseOptions::configure_template is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function UseOptions::configure_template is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="26-i6i.html">Back to 'Inform 6 Inclusions'</a></li><li><a href="26-lt.html">Continue with 'List Together'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -62,10 +62,9 @@ level-0 headings, which are the nodes from which these blocks of source text han
|
|||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">compilation_module</span><span class="plain"> *</span><span class="functiontext">Modules::new</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">source_location</span><span class="plain"> </span><span class="identifier">sl</span><span class="plain"> = </span><span class="identifier">Wordings::location</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sl</span><span class="plain">.</span><span class="identifier">file_of_origin</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">standard_rules_extension</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">owner</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sl</span><span class="plain">.</span><span class="identifier">file_of_origin</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null foo"</span><span class="plain">);</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</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">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">))));</span>
|
||||
|
||||
<span class="identifier">compilation_module</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">Packaging::new_cm</span><span class="plain">();</span>
|
||||
|
@ -79,15 +78,16 @@ level-0 headings, which are the nodes from which these blocks of source text han
|
|||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Hierarchy::markup</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">inter_presence</span><span class="plain">-></span><span class="identifier">the_package</span><span class="plain">, </span><span class="constant">EXT_AUTHOR_HMD</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-</span><span class="element">>ef_id.raw_author_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::markup</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">inter_presence</span><span class="plain">-></span><span class="identifier">the_package</span><span class="plain">, </span><span class="constant">EXT_TITLE_HMD</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-</span><span class="element">>ef_id.raw_title</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::markup</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">inter_presence</span><span class="plain">-></span><span class="identifier">the_package</span><span class="plain">, </span><span class="constant">EXT_AUTHOR_HMD</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">raw_author_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::markup</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">inter_presence</span><span class="plain">-></span><span class="identifier">the_package</span><span class="plain">, </span><span class="constant">EXT_TITLE_HMD</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">raw_title</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">-</span><span class="element">>version_loaded</span><span class="plain">));</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">owner</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="string">"%v"</span><span class="plain">, &</span><span class="identifier">N</span><span class="plain">);</span>
|
||||
<span class="functiontext">Hierarchy::markup</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">inter_presence</span><span class="plain">-></span><span class="identifier">the_package</span><span class="plain">, </span><span class="constant">EXT_VERSION_HMD</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">) </span><span class="identifier">SR_module</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">)) </span><span class="identifier">SR_module</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">source_text_module</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -95,7 +95,7 @@ level-0 headings, which are the nodes from which these blocks of source text han
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Modules::traverse_to_define is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Modules::traverse_to_define is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Modules::look_for_cu appears nowhere else.</p>
|
||||
|
||||
|
@ -112,10 +112,10 @@ compiled from the compilation module will go into a package of that name.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="string">"standard_rules"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">)) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="string">"standard_rules"</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">owner</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="string">"source_text"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="string">"%X"</span><span class="plain">, </span><span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="string">"%X"</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">pname</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">)</span>
|
||||
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="character">'_'</span><span class="plain">);</span>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -11,320 +11,79 @@
|
|||
<!--Weave of '3/nl' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#3">Chapter 3: Bridge to Words Module</a></li><li><b>Natural Languages</b></li></ul><p class="purpose">To manage definitions of natural languages, such as English or French, which may be used either to write Inform or to read the works it compiles.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP7">§7. The bundle scan</a></li><li><a href="#SP10">§10. Finding by name</a></li><li><a href="#SP11">§11. Logging</a></li><li><a href="#SP12">§12. Naming</a></li><li><a href="#SP13">§13. Parsing</a></li><li><a href="#SP14">§14. The natural language kind</a></li><li><a href="#SP15">§15. The adaptive person</a></li><li><a href="#SP16">§16. Choice of languages</a></li><li><a href="#SP17">§17. Language code</a></li><li><a href="#SP18">§18. Including language extensions</a></li><li><a href="#SP19">§19. Including Preform syntax</a></li><li><a href="#SP20">§20. Preform error handling</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. The bundle scan</a></li><li><a href="#SP2">§2. Language of play</a></li><li><a href="#SP3">§3. Indexing</a></li><li><a href="#SP5">§5. Parsing</a></li><li><a href="#SP6">§6. The natural language kind</a></li><li><a href="#SP7">§7. The adaptive person</a></li><li><a href="#SP8">§8. Including Preform syntax</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Inform can read and write text in multiple natural languages, though it
|
||||
needs help to do so. Each natural language known to Inform comes from a
|
||||
small resource folder called its "bundle", and also has an extension
|
||||
associated with it: this includes English. Bundles for common languages
|
||||
are included as part of the default distribution for Inform, but the
|
||||
extension is only included for English.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Within the bundle folder is a file called <code class="display"><span class="extract">about.txt</span></code>, which sets numbered
|
||||
fields to excerpts of text. The following are the field numbers:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">NAME_IN_ENGLISH_LFIELD</span><span class="plain"> 1 </span> <span class="comment">e.g. "German"</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">NAME_NATIVE_LFIELD</span><span class="plain"> 2 </span> <span class="comment">e.g. "Deutsch"</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">CUE_NATIVE_LFIELD</span><span class="plain"> 3 </span> <span class="comment">e.g. "in deutscher Sprache"</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">ISO_639_CODE_LFIELD</span><span class="plain"> 4 </span> <span class="comment">e.g. "de": an ISO 639-1 code</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">TRANSLATOR_LFIELD</span><span class="plain"> 5 </span> <span class="comment">e.g. "Team GerX"</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">KIT_LFIELD</span><span class="plain"> 6 </span> <span class="comment">e.g. "GermanLanguageKit"</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain"> 7 </span> <span class="comment">one more than the highest number above</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>Each natural language whose bundle can be located generates an instance
|
||||
of the following structure.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Note that each NL automatically defines an instance of the kind "natural
|
||||
language". For timing reasons, we first store the name of this instance —
|
||||
say, "German language" — and only later create the instance.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">natural_language</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">nl_bundle_path</span><span class="plain">; </span> <span class="comment">pathname of the bundle folder</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">instance_name</span><span class="plain">; </span> <span class="comment">instance name, e.g., "German language"</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">nl_instance</span><span class="plain">; </span> <span class="comment">instance, e.g., "German language"</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">language_field</span><span class="plain">[</span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">]; </span> <span class="comment">contents of the <code class="display"><span class="extract">about.txt</span></code> fields</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">kit_required</span><span class="plain">; </span> <span class="comment">do we need to load a kit for this language?</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">adaptive_person</span><span class="plain">; </span> <span class="comment">which person (one of constants below) text subs are written from</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">natural_language</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure natural_language is accessed in 1/mr and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>The following defaults to English in practice:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">language_of_play</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">the language read and typed by the player</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">NATURAL_LANGUAGES_PRESENT</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. The bundle scan. </b>Early in Inform's run we scan for installed language bundle folders. This is
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. The bundle scan. </b>Early in Inform's run we scan for installed language bundle folders. This is
|
||||
done on demand (i.e., when we need to know something about languages). We
|
||||
only want to do it once, and we must prevent it recursing:
|
||||
only want to do it once, and we must prevent it recursing.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">To carry out the scan it's sufficient to ask Inbuild to generate a list of
|
||||
results, because the language bundles will be scanned as they are found. We
|
||||
can simply discard the search results.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bundle_scan_made</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">language_scan_top</span><span class="plain"> = -1;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::scan</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bundle_scan_made</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">bundle_scan_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform the bundle scan</span> <span class="cwebmacronumber">7.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Process the bundles scanned in</span> <span class="cwebmacronumber">7.2</span>><span class="plain">;</span>
|
||||
<span class="identifier">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="identifier">Requirements::anything_of_genre</span><span class="plain">(</span><span class="identifier">language_genre</span><span class="plain">);</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">inbuild_search_result</span><span class="plain">);</span>
|
||||
<span class="identifier">Nests::search_for</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="identifier">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="identifier">language_scan_top</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain"> - 1;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::scan is used in <a href="#SP10">§10</a>, 4/its (<a href="4-its.html#SP7">§7</a>).</p>
|
||||
<p class="endnote">The function NaturalLanguages::scan is used in <a href="#SP2">§2</a>, 4/its (<a href="4-its.html#SP7">§7</a>), 8/ie (<a href="8-ie.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b>The rules for these are exactly the same as for extensions, or website
|
||||
templates, so for example the materials folder takes priority. If we find
|
||||
a bundle with the same name twice (e.g., if we find "German" in two
|
||||
different locations), the first to be found wins out.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform the bundle scan</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain"><</span><span class="constant">NO_FS_AREAS</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span>
|
||||
<span class="functiontext">NaturalLanguages::scan_bundles_from</span><span class="plain">(</span><span class="identifier">pathname_of_languages</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">], </span><span class="identifier">AREA_NAME</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">]);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>The following rather crudely loads a directory listing for the pathname
|
||||
into a scratch string, then cuts it up into individual names.
|
||||
</p>
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Language of play. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::scan_bundles_from</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">) {</span>
|
||||
<span class="identifier">scan_directory</span><span class="plain"> *</span><span class="identifier">sd</span><span class="plain"> = </span><span class="identifier">Directories::open</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sd</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">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">item</span><span class="plain">);</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Directories::next</span><span class="plain">(</span><span class="identifier">sd</span><span class="plain">, </span><span class="identifier">item</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Act on an item in the bundle listing</span> <span class="cwebmacronumber">8.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">item</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">Directories::close</span><span class="plain">(</span><span class="identifier">sd</span><span class="plain">);</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="functiontext">NaturalLanguages::English</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">NaturalLanguages::scan</span><span class="plain">();</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Languages::from_name</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"english"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to find English language bundle"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::scan_bundles_from is used in <a href="#SP7_1">§7.1</a>.</p>
|
||||
<p class="endnote">The function NaturalLanguages::English is used in 1/wtc (<a href="1-wtc.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b>We expect each such folder to contain only names of bundles, each of which
|
||||
should be a single English word, without accents.
|
||||
</p>
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Indexing. </b></p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Act on an item in the bundle listing</span> <span class="cwebmacronumber">8.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">acceptable</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">item</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">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> < 32) || (</span><span class="identifier">c</span><span class="plain"> > 126)) </span><span class="identifier">acceptable</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">contains non-ASCII</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="identifier">FOLDER_SEPARATOR</span><span class="plain">) { </span><span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, 0); </span><span class="reserved">break</span><span class="plain">; }</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">item</span><span class="plain">) == 0) </span><span class="identifier">acceptable</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">i.e., an empty text</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">acceptable</span><span class="plain">) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = </span><span class="functiontext">NaturalLanguages::get_nl</span><span class="plain">(</span><span class="identifier">item</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><<span class="cwebmacro">Create a new natural language structure</span> <span class="cwebmacronumber">8.1.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_bundle_path</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">item</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Found language bundle '%S' (%s)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">item</span><span class="plain">, </span><span class="identifier">origin</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::produce_index</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="functiontext">Task::project</span><span class="plain">();</span>
|
||||
<span class="functiontext">I6T::interpret_indext</span><span class="plain">(</span>
|
||||
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span>
|
||||
<span class="identifier">Languages::path_to_bundle</span><span class="plain">(</span>
|
||||
<span class="identifier">Projects::get_language_of_index</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">)),</span>
|
||||
<span class="identifier">Projects::index_template</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">)));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
||||
<p class="endnote">The function NaturalLanguages::produce_index is used in 1/htc (<a href="1-htc.html#SP2_9">§2.9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_1_1"></a><b>§8.1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Create a new natural language structure</span> <span class="cwebmacronumber">8.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">, </span><span class="string">"%S language"</span><span class="plain">, </span><span class="identifier">item</span><span class="plain">);</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>instance_name</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_instance</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>kit_required</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>adaptive_person</span><span class="plain"> = -1; </span> <span class="comment">i.e., none yet specified</span>
|
||||
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">=0; </span><span class="identifier">n</span><span class="plain"><</span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">++) </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">] = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP8_1">§8.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_2"></a><b>§7.2. </b>At this point, the bundle scan is over. For each bundle we've found, we
|
||||
read in the <code class="display"><span class="extract">about.txt</span></code> file and extract the excerpts.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Process the bundles scanned in</span> <span class="cwebmacronumber">7.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Read the about.txt file for the bundle</span> <span class="cwebmacronumber">7.2.1</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_2_1"></a><b>§7.2.1. </b>If we can't find the file, it doesn't matter except that all of the excerpts
|
||||
remain empty. But we may as well tell the debugging log.
|
||||
</p>
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">MAX_BUNDLE_ABOUT_LINE_LENGTH</span><span class="plain"> 256 </span> <span class="comment">which is far more than necessary, really</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">NATURAL_LANGUAGES_PRESENT</span>
|
||||
</pre>
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Read the about.txt file for the bundle</span> <span class="cwebmacronumber">7.2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">about_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_bundle_path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"about.txt"</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">about_file</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">,</span>
|
||||
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="functiontext">NaturalLanguages::about_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">nl</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Can't find about file: %f\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">about_file</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7_2">§7.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>The format of the file is very simple. Each line is introduced by a number
|
||||
from 1 to <code class="display"><span class="extract">MAX_LANGUAGE_FIELDS</span></code> minus one, and then contains text which
|
||||
extends for the rest of the line.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::about_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">item_name</span><span class="plain">,</span>
|
||||
<span class="identifier">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vnl</span><span class="plain">) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = (</span><span class="reserved">natural_language</span><span class="plain"> *) </span><span class="identifier">vnl</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="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">item_name</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="identifier">vocabulary_entry</span><span class="plain"> *</span><span class="identifier">ve</span><span class="plain"> = </span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</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">field</span><span class="plain"> = -1;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ve</span><span class="plain">) && (</span><span class="identifier">Vocabulary::test_vflags</span><span class="plain">(</span><span class="identifier">ve</span><span class="plain">, </span><span class="identifier">NUMBER_MC</span><span class="plain">)))</span>
|
||||
<span class="identifier">field</span><span class="plain"> = </span><span class="identifier">Vocabulary::get_literal_number_value</span><span class="plain">(</span><span class="identifier">ve</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">field</span><span class="plain"> >= 1) && (</span><span class="identifier">field</span><span class="plain"> < </span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">)) {</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="identifier">field</span><span class="plain">] =</span>
|
||||
<span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)+1, </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Warning: couldn't read about.txt line: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">item_name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::about_helper is used in <a href="#SP7_2_1">§7.2.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the
|
||||
corresponding structure, if it exists. We perform this check case
|
||||
insensitively.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="functiontext">NaturalLanguages::get_nl</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="functiontext">NaturalLanguages::scan</span><span class="plain">();</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">lname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">lname</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>instance_name</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">lname</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">lname</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::get_nl is used in <a href="#SP8_1">§8.1</a>, <a href="#SP16">§16</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Logging. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::log</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"<null-language>"</span><span class="plain">); }</span>
|
||||
<span class="reserved">else</span><span class="plain"> { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="functiontext">NaturalLanguages::get_name</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">)); }</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::log is used in 1/cm (<a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Naming. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::get_name</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">English_language</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>instance_name</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::get_name is used in <a href="#SP11">§11</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. Parsing. </b>The following matches the English-language name of a language: for example,
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Parsing. </b>The following matches the English-language name of a language: for example,
|
||||
"French". It will only make a match if Inform has successfully found a
|
||||
bundle for that language during its initial scan.
|
||||
</p>
|
||||
|
@ -332,10 +91,10 @@ bundle for that language during its initial scan.
|
|||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">Wordings::first_word</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>instance_name</span><span class="plain">))) {</span>
|
||||
<span class="plain">*</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">nl</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">inform_language</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">Wordings::first_word</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">instance_name</span><span class="plain">))) {</span>
|
||||
<span class="plain">*</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -343,7 +102,7 @@ bundle for that language during its initial scan.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. The natural language kind. </b>Inform has a kind built in called "natural language", whose values are
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. The natural language kind. </b>Inform has a kind built in called "natural language", whose values are
|
||||
enumerated names: English language, French language, German language and so on.
|
||||
When the kind is created, the following routine makes these instances. We do
|
||||
this exactly as we would to create any other instance — we write a logical
|
||||
|
@ -356,12 +115,12 @@ in German; but this is how we'll do it, anyway.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::stock_nl_kind</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">) {</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">inform_language</span><span class="plain">) {</span>
|
||||
<span class="reserved">pcalc_prop</span><span class="plain"> *</span><span class="identifier">prop</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Calculus::Propositions::Abstract::to_create_something</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>instance_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">Calculus::Propositions::Abstract::to_create_something</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">instance_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">Calculus::Propositions::Assert::assert_true</span><span class="plain">(</span><span class="identifier">prop</span><span class="plain">, </span><span class="identifier">CERTAIN_CE</span><span class="plain">);</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_instance</span><span class="plain"> = </span><span class="identifier">latest_instance</span><span class="plain">;</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="identifier">nl_instance</span><span class="plain"> = </span><span class="identifier">latest_instance</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -370,7 +129,7 @@ in German; but this is how we'll do it, anyway.
|
|||
|
||||
<p class="endnote">The function NaturalLanguages::stock_nl_kind appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. The adaptive person. </b>The following is only relevant for the language of play, whose extension will
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. The adaptive person. </b>The following is only relevant for the language of play, whose extension will
|
||||
always be read in. That in turn is expected to contain a declaration like
|
||||
this one:
|
||||
</p>
|
||||
|
@ -386,21 +145,21 @@ this because we need access to it very quickly when parsing text substitutions.)
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::adaptive_person</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::adaptive_person</span><span class="plain">(</span><span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>adaptive_person</span><span class="plain"> == -1) && (</span><span class="identifier">P_adaptive_text_viewpoint</span><span class="plain">)) {</span>
|
||||
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_instance</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">adaptive_person</span><span class="plain"> == -1) && (</span><span class="identifier">P_adaptive_text_viewpoint</span><span class="plain">)) {</span>
|
||||
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">nl_instance</span><span class="plain">;</span>
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">spec</span><span class="plain"> = </span><span class="functiontext">World::Inferences::get_prop_state</span><span class="plain">(</span>
|
||||
<span class="functiontext">Instances::as_subject</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">P_adaptive_text_viewpoint</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::is</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">, </span><span class="constant">CONSTANT_NT</span><span class="plain">)) {</span>
|
||||
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">ParseTree::get_constant_instance</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">);</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>adaptive_person</span><span class="plain"> = </span><span class="functiontext">Instances::get_numerical_value</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">)-1;</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="identifier">adaptive_person</span><span class="plain"> = </span><span class="functiontext">Instances::get_numerical_value</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">)-1;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>adaptive_person</span><span class="plain"> == -1) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FIRST_PERSON_PLURAL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>adaptive_person</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">adaptive_person</span><span class="plain"> == -1) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FIRST_PERSON_PLURAL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">adaptive_person</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -408,94 +167,15 @@ this because we need access to it very quickly when parsing text substitutions.)
|
|||
|
||||
<p class="endnote">The function NaturalLanguages::adaptive_person appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. Choice of languages. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="functiontext">NaturalLanguages::English</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = </span><span class="functiontext">NaturalLanguages::get_nl</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"english"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to find English language bundle"</span><span class="plain">);</span>
|
||||
<span class="identifier">nl</span><span class="plain">-</span><span class="element">>kit_required</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">English_language</span><span class="plain"> = </span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::set_language_of_play</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="identifier">language_of_play</span><span class="plain"> = </span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain">) </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>kit_required</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::English is used in 1/mr (<a href="1-mr.html#SP4_17">§4.17</a>), 4/its (<a href="4-its.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::set_language_of_play appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. Language code. </b>This is used when we write the bibliographic data for the work of IF we're
|
||||
making; this enables online databases like IFDB, and smart interpreters, to
|
||||
detect the language of play for a story file without actually running it.
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Including Preform syntax. </b>At present we do this only for English, but some day...
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::write_language_code</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">English_language</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">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="constant">ISO_639_CODE_LFIELD</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">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="constant">ISO_639_CODE_LFIELD</span><span class="plain">]);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"en"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::write_language_code appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. Including language extensions. </b>Most extensions are included with explicit Inform source text:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>Include Locksmith by Emily Short.</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
<p class="inwebparagraph">But the Standard Rules are an exception — they're always included — and so
|
||||
are the languages used in the source text and for play. Note that French
|
||||
games, say, involve loading two language extensions: English Language, because
|
||||
that's the language in which the SR are written, and French Language, because
|
||||
that's the language of play.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::request_required_kits</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>kit_required</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</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">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="constant">KIT_LFIELD</span><span class="plain">]))</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="constant">KIT_LFIELD</span><span class="plain">]);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">"%+WLanguageKit"</span><span class="plain">, </span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>language_field</span><span class="plain">[</span><span class="constant">NAME_IN_ENGLISH_LFIELD</span><span class="plain">]);</span>
|
||||
<span class="functiontext">Kits::request</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NaturalLanguages::request_required_kits is used in 1/kts (<a href="1-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. Including Preform syntax. </b>At present we do this only for English, but some day...
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::load_preform</span><span class="plain">(</span><span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't load preform from null language"</span><span class="plain">);</span>
|
||||
<span class="identifier">language_being_read_by_Preform</span><span class="plain"> = </span><span class="identifier">nl</span><span class="plain">;</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">preform_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">nl</span><span class="plain">-</span><span class="element">>nl_bundle_path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Syntax.preform"</span><span class="plain">);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::load_preform</span><span class="plain">(</span><span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't load preform from null language"</span><span class="plain">);</span>
|
||||
<span class="identifier">language_being_read_by_Preform</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">preform_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Languages::path_to_bundle</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"Syntax.preform"</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Reading language definition from <%f>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">preform_file</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Preform::load_from_file</span><span class="plain">(</span><span class="identifier">preform_file</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -505,7 +185,8 @@ that's the language of play.
|
|||
|
||||
<p class="endnote">The function NaturalLanguages::load_preform is used in 4/its (<a href="4-its.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. Preform error handling. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Preform errors are handled here:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
|
|
@ -24,44 +24,156 @@ inclusion sentences — see Kits.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">primary_source_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">first to be opened</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>There is no real difference between the loading of the primary source text
|
||||
and the loading of an extension's text, except for the descriptions we
|
||||
supply in case of any problem messages which might need to be issued,
|
||||
and for the fact that the mandatory insertion text is loaded before the
|
||||
primary source text.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_extension_source_text</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">EF</span><span class="plain">,</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">synopsis</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">documentation_only</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="functiontext">SourceFiles::read_file</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">, </span><span class="identifier">documentation_only</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="identifier">LEXICAL_OUTPUT_DA</span><span class="plain">)) </span><span class="identifier">Word::log_lexer_output</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::read</span><span class="plain">(</span><span class="identifier">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="identifier">Copies::read_source_text_for</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="functiontext">SourceFiles::issue_problems_arising</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_primary_source_text</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="functiontext">Kits::feed_early_source_text</span><span class="plain">(</span><span class="identifier">early</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">early</span><span class="plain">) > 0) </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="functiontext">SourceFiles::read_further_mandatory_text</span><span class="plain">();</span>
|
||||
<span class="functiontext">SourceFiles::read_file</span><span class="plain">(</span><span class="identifier">filename_of_i7_source</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"your source text"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::issue_problems_arising</span><span class="plain">(</span><span class="identifier">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="identifier">copy_error</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">errors_reading_source_text</span><span class="plain">) {</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">error_category</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_FAILED_CE</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(1, </span><span class="identifier">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">file</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"I can't open the file '%1' of source text. %P"</span>
|
||||
<span class="string">"If you are using the 'Source' subfolder of Materials to "</span>
|
||||
<span class="string">"hold your source text, maybe your 'Contents.txt' has a "</span>
|
||||
<span class="string">"typo in it?"</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</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="identifier">EXT_MISWORDED_CE</span><span class="plain">:</span>
|
||||
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">found_by</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">notes</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMiswordedBeginsHere</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, seems to be "</span>
|
||||
<span class="string">"damaged or incorrect: its identifying opening line is wrong. "</span>
|
||||
<span class="string">"Specifically, %2."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</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="identifier">KIT_MISWORDED_CE</span><span class="plain">:</span>
|
||||
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">found_by</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">notes</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The kit %1, which your source text makes use of, seems to be "</span>
|
||||
<span class="string">"damaged or incorrect: its identifying opening line is wrong. "</span>
|
||||
<span class="string">"Specifically, %2."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</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="identifier">EXT_TITLE_TOO_LONG_CE</span><span class="plain">: {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = </span><span class="identifier">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">overage</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">details_N</span><span class="plain"> - </span><span class="identifier">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">;</span>
|
||||
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">found_by</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_number</span><span class="plain">(2, &</span><span class="identifier">max</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_number</span><span class="plain">(3, &</span><span class="identifier">overage</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtTitleTooLong</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, has a "</span>
|
||||
<span class="string">"title which is too long, exceeding the maximum allowed "</span>
|
||||
<span class="string">"(%2 characters) by %3."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXT_AUTHOR_TOO_LONG_CE</span><span class="plain">: {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = </span><span class="identifier">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">overage</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">details_N</span><span class="plain"> - </span><span class="identifier">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">;</span>
|
||||
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">found_by</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_number</span><span class="plain">(2, &</span><span class="identifier">max</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_number</span><span class="plain">(3, &</span><span class="identifier">overage</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtAuthorTooLong</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, has an "</span>
|
||||
<span class="string">"author name which is too long, exceeding the maximum allowed "</span>
|
||||
<span class="string">"(%2 characters) by %3."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LEXER_CE</span><span class="plain">:</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">error_subcategory</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STRING_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TooMuchQuotedText</span><span class="plain">),</span>
|
||||
<span class="string">"Too much text in quotation marks"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"...\</span><span class="plain">"</span><span class="string"> The maximum length is very high, so this is more "</span>
|
||||
<span class="string">"likely to be because a close quotation mark was "</span>
|
||||
<span class="string">"forgotten."</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="identifier">WORD_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_WordTooLong</span><span class="plain">),</span>
|
||||
<span class="string">"Word too long"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"(Individual words of unquoted text can run up to "</span>
|
||||
<span class="string">"128 letters long, which ought to be plenty. The longest "</span>
|
||||
<span class="string">"recognised place name in the English speaking world is "</span>
|
||||
<span class="string">"a hill in New Zealand called Taumatawhakatang-"</span>
|
||||
<span class="string">"ihangakoauauot-amateaturipukaka-pikimaunga-"</span>
|
||||
<span class="string">"horonuku-pokaiwhenuak-itanatahu. (You say tomato, "</span>
|
||||
<span class="string">"I say taumatawhakatang-...) The longest word found in a "</span>
|
||||
<span class="string">"classic novel is bababadalgharaghtakamminarronnkonnbronntonn"</span>
|
||||
<span class="string">"erronntuonnthunntrovarrhounawnskawntoohoohoordenenthurnuk, "</span>
|
||||
<span class="string">"creation's thunderclap from Finnegan's Wake. And both of those "</span>
|
||||
<span class="string">"words are fine.)"</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="identifier">I6_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">), </span> <span class="comment">well, not at all conveniently</span>
|
||||
<span class="string">"Verbatim Inform 6 extract too long"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-></span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"... -). The maximum length is quite high, so this "</span>
|
||||
<span class="string">"may be because a '-)' was forgotten. Still, if "</span>
|
||||
<span class="string">"you do need to paste a huge I6 program in, try "</span>
|
||||
<span class="string">"using several verbatim inclusions in a row."</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="identifier">STRING_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingQuote</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of quoted text"</span><span class="plain">,</span>
|
||||
<span class="identifier">CE</span><span class="plain">-></span><span class="identifier">details</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a quotation mark is missing "</span>
|
||||
<span class="string">"somewhere. If you are using Inform with syntax colouring, "</span>
|
||||
<span class="string">"look for where the quoted-text colour starts. (Sometimes "</span>
|
||||
<span class="string">"this problem turns up because a piece of quoted text contains "</span>
|
||||
<span class="string">"a text substitution in square brackets which in turn contains "</span>
|
||||
<span class="string">"another piece of quoted text - this is not allowed, and causes "</span>
|
||||
<span class="string">"me to lose track.)"</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="identifier">COMMENT_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingComment</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of a comment"</span><span class="plain">,</span>
|
||||
<span class="identifier">CE</span><span class="plain">-></span><span class="identifier">details</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a ']' is missing somewhere. "</span>
|
||||
<span class="string">"(If you are using Inform with syntax colouring, look for "</span>
|
||||
<span class="string">"where the comment colour starts.) Inform's convention on "</span>
|
||||
<span class="string">"'nested comments' is that each '[' in a comment must be "</span>
|
||||
<span class="string">"matched by a corresponding ']': so for instance '[This "</span>
|
||||
<span class="string">"[even nested like so] acts as a comment]' is a single "</span>
|
||||
<span class="string">"comment - the first ']' character matches the second '[' "</span>
|
||||
<span class="string">"and so doesn't end the comment: only the second ']' ends "</span>
|
||||
<span class="string">"the comment."</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="identifier">I6_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingI6</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of a verbatim passage "</span>
|
||||
<span class="string">"of Inform 6 code"</span><span class="plain">,</span>
|
||||
<span class="identifier">CE</span><span class="plain">-></span><span class="identifier">details</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a '-)' is missing."</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">internal_error</span><span class="plain">(</span><span class="string">"unknown lexer error"</span><span class="plain">);</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">internal_error</span><span class="plain">(</span><span class="string">"an unknown error occurred"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_extension_source_text is used in 8/ie (<a href="8-ie.html#SP5_2">§5.2</a>).</p>
|
||||
<p class="endnote">The function SourceFiles::read is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>), 8/ie (<a href="8-ie.html#SP5_2">§5.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_primary_source_text is used in 1/mr (<a href="1-mr.html#SP4_9">§4.9</a>).</p>
|
||||
<p class="endnote">The function SourceFiles::issue_problems_arising is used in 8/ie (<a href="8-ie.html#SP5_2">§5.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The following reads in the text of the optional file of use options, if
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The following reads in the text of the optional file of use options, if
|
||||
this has been created, producing no problem message if it hasn't.
|
||||
</p>
|
||||
|
||||
|
@ -72,9 +184,9 @@ this has been created, producing no problem message if it hasn't.
|
|||
|
||||
<pre class="display">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING_INIT</span><span class="plain">;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_further_mandatory_text</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_further_mandatory_text</span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
|
||||
<span class="identifier">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</span><span class="plain">();</span>
|
||||
<span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">filename_of_options</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">,</span>
|
||||
<span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">,</span>
|
||||
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="functiontext">SourceFiles::read_further_mandatory_text_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -90,287 +202,25 @@ this has been created, producing no problem message if it hasn't.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::within</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">options_file_wording</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="functiontext">SourceFiles::get_extension_corresponding</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="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</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">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">RETRIEVE_POINTER_inbuild_copy</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</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">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">genre</span><span class="plain"> != </span><span class="identifier">extension_genre</span><span class="plain">) </span><span class="reserved">return</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">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_further_mandatory_text is used in <a href="#SP3">§3</a>.</p>
|
||||
<p class="endnote">The function SourceFiles::read_further_mandatory_text appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_further_mandatory_text_helper appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::increase_sentence_count appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Either way, we use the following code. The <code class="display"><span class="extract">SourceFiles::read_file</span></code> function returns
|
||||
one of the following values to indicate the source of the source: the value
|
||||
only really tells us something we didn't know in the case of extensions,
|
||||
but in that event the Extensions.w routines do indeed want to know this.
|
||||
(Area 51 is reserved for extensions of alien origin, but the relevant
|
||||
source code is classified.)
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">ORIGIN_WAS_PRIMARY_SOURCE</span><span class="plain"> 0</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">ORIGIN_WAS_MATERIALS_EXTENSIONS_AREA</span><span class="plain"> 1 </span> <span class="comment">must match <code class="display"><span class="extract">*_FS_AREA</span></code> numbers plus 1</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">ORIGIN_WAS_USER_EXTENSIONS_AREA</span><span class="plain"> 2</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">ORIGIN_WAS_BUILT_IN_EXTENSIONS_AREA</span><span class="plain"> 3</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_file</span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">synopsis</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">EF</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">documentation_only</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">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain"> = -1;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EF</span><span class="plain">)</span>
|
||||
<span class="identifier">area</span><span class="plain"> = </span><span class="functiontext">SourceFiles::read_file_inner</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_extensions</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain"> + 1, </span><span class="identifier">documentation_only</span><span class="plain">, &</span><span class="identifier">sf</span><span class="plain">,</span>
|
||||
<span class="identifier">STORE_POINTER_extension_file</span><span class="plain">(</span><span class="identifier">EF</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">area</span><span class="plain"> = </span><span class="functiontext">SourceFiles::read_file_inner</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">,</span>
|
||||
<span class="identifier">NULL</span><span class="plain">, 0, </span><span class="identifier">documentation_only</span><span class="plain">, &</span><span class="identifier">sf</span><span class="plain">,</span>
|
||||
<span class="identifier">STORE_POINTER_extension_file</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">area</span><span class="plain"> == -1) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EF</span><span class="plain">) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Author: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">-</span><span class="element">>author_text</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Title: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BogusExtension</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"I can't find the extension '%2', which seems not to be installed, "</span>
|
||||
<span class="string">"but was requested by: %1. %P"</span>
|
||||
<span class="string">"You can get hold of extensions which people have made public at "</span>
|
||||
<span class="string">"the Inform website, www.inform7.com, or by using the Public "</span>
|
||||
<span class="string">"Library in the Extensions panel."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span>
|
||||
<span class="string">"Error: can't open source text file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</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">EF</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">primary_source_file</span><span class="plain"> = </span><span class="identifier">sf</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Extensions::Files::set_corresponding_source_file</span><span class="plain">(</span><span class="identifier">EF</span><span class="plain">, </span><span class="identifier">sf</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">documentation_only</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Tell console output about the file</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_file is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b>This is where messages like
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">I've also read Standard Rules by Graham Nelson, which is 27204 words long.</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">are printed to <code class="display"><span class="extract">stdout</span></code> (not <code class="display"><span class="extract">stderr</span></code>), in something of an affectionate nod
|
||||
to TeX's traditional console output, though occasionally I think silence is
|
||||
golden and that the messages could go. It's a moot point for almost all users,
|
||||
though, because the console output is concealed from them by the Inform
|
||||
application.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Tell console output about the file</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wc</span><span class="plain">;</span>
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EF</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">message</span><span class="plain"> = </span><span class="string">"I've now read %S, which is %d words long.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">message</span><span class="plain"> = </span><span class="string">"I've also read %S, which is %d words long.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">;</span>
|
||||
<span class="identifier">wc</span><span class="plain"> = </span><span class="identifier">TextFromFiles::total_word_count</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="identifier">message</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">wc</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_FLUSH</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="identifier">message</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">wc</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">SourceFiles::read_file_inner</span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">synopsis</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">list</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">list_len</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">documentation_only</span><span class="plain">, </span><span class="identifier">source_file</span><span class="plain"> **</span><span class="identifier">S</span><span class="plain">,</span>
|
||||
<span class="identifier">general_pointer</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">primary</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">EF</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">origin_tried</span><span class="plain"> = 1;</span>
|
||||
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">handle</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">eventual</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Set pathname and filename, and open file</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">handle</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> -1;</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">leaf</span><span class="plain"> = </span><span class="identifier">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">eventual</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">primary</span><span class="plain">) </span><span class="identifier">leaf</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"main source text"</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">TextFromFiles::feed_open_file_into_lexer</span><span class="plain">(</span><span class="identifier">eventual</span><span class="plain">, </span><span class="identifier">handle</span><span class="plain">,</span>
|
||||
<span class="identifier">leaf</span><span class="plain">, </span><span class="identifier">documentation_only</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">);</span>
|
||||
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">handle</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">sf</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">origin_tried</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::read_file_inner is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>The primary source text must be found where we expect it, or a fatal
|
||||
error is issued. An extension, however, can be in one of two places: the
|
||||
user's own repository of installed extensions, or the built-in stock. We
|
||||
must try each possibility — in that order, so that the user can supplant
|
||||
the built-in extensions by installing hacked versions of her own — and in
|
||||
the event of failing, we issue only a standard Inform problem message and
|
||||
continue. While meaningful compilation is unlikely to succeed now, this is
|
||||
not a fatal error, because fatality would cause the user interface
|
||||
application to communicate the problem badly.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Set pathname and filename, and open file</span> <span class="cwebmacronumber">6.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">handle</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">author_name</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">-</span><span class="element">>author_text</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">EF</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">);</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain"><</span><span class="identifier">list_len</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">handle</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">list</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">];</span>
|
||||
<span class="identifier">origin_tried</span><span class="plain"> = </span><span class="identifier">area</span><span class="plain"> + 1;</span>
|
||||
<span class="identifier">eventual</span><span class="plain"> = </span><span class="functiontext">Locations::of_extension</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">author_name</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">handle</span><span class="plain"> = </span><span class="identifier">Filenames::fopen_caseless</span><span class="plain">(</span><span class="identifier">eventual</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">handle</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">eventual</span><span class="plain"> = </span><span class="functiontext">Locations::of_extension</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">author_name</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">handle</span><span class="plain"> = </span><span class="identifier">Filenames::fopen_caseless</span><span class="plain">(</span><span class="identifier">eventual</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">handle</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="functiontext">SourceFiles::get_extension_corresponding</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="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</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">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">RETRIEVE_POINTER_extension_file</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::get_extension_corresponding is used in 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 6/nv (<a href="6-nv.html#SP14_1">§14.1</a>), 7/hdn (<a href="7-hdn.html#SP16">§16</a>, <a href="7-hdn.html#SP33_1_1">§33.1.1</a>), 8/ef (<a href="8-ef.html#SP21">§21</a>), 9/tfa (<a href="9-tfa.html#SP11_1">§11.1</a>), 17/rs (<a href="17-rs.html#SP7_3_1">§7.3.1</a>), 21/rl2 (<a href="21-rl2.html#SP23_10_1">§23.10.1</a>, <a href="21-rl2.html#SP24">§24</a>), 25/ci (<a href="25-ci.html#SP3_2_3_6">§3.2.3.6</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>, <a href="26-uo.html#SP13_1">§13.1</a>, <a href="26-uo.html#SP16">§16</a>), 27/cm (<a href="27-cm.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>And the following converts lexer error conditions into I7 problem messages.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">LEXER_PROBLEM_HANDLER</span><span class="plain"> </span><span class="functiontext">SourceFiles::lexer_problem_handler</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceFiles::lexer_problem_handler</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">err</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">problem_source_description</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">word</span><span class="plain">) {</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">err</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MEMORY_OUT_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"Out of memory: unable to create lexer workspace"</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="identifier">STRING_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TooMuchQuotedText</span><span class="plain">),</span>
|
||||
<span class="string">"Too much text in quotation marks"</span><span class="plain">, </span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"...\</span><span class="plain">"</span><span class="string"> The maximum length is very high, so this is more "</span>
|
||||
<span class="string">"likely to be because a close quotation mark was "</span>
|
||||
<span class="string">"forgotten."</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="identifier">WORD_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_WordTooLong</span><span class="plain">),</span>
|
||||
<span class="string">"Word too long"</span><span class="plain">, </span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"(Individual words of unquoted text can run up to "</span>
|
||||
<span class="string">"128 letters long, which ought to be plenty. The longest "</span>
|
||||
<span class="string">"recognised place name in the English speaking world is "</span>
|
||||
<span class="string">"a hill in New Zealand called Taumatawhakatang-"</span>
|
||||
<span class="string">"ihangakoauauot-amateaturipukaka-pikimaunga-"</span>
|
||||
<span class="string">"horonuku-pokaiwhenuak-itanatahu. (You say tomato, "</span>
|
||||
<span class="string">"I say taumatawhakatang-...) The longest word found in a "</span>
|
||||
<span class="string">"classic novel is bababadalgharaghtakamminarronnkonnbronntonn"</span>
|
||||
<span class="string">"erronntuonnthunntrovarrhounawnskawntoohoohoordenenthurnuk, "</span>
|
||||
<span class="string">"creation's thunderclap from Finnegan's Wake. And both of those "</span>
|
||||
<span class="string">"words are fine.)"</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="identifier">I6_TOO_LONG_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">), </span> <span class="comment">well, not at all conveniently</span>
|
||||
<span class="string">"Verbatim Inform 6 extract too long"</span><span class="plain">, </span><span class="identifier">word</span><span class="plain">,</span>
|
||||
<span class="string">"... -). The maximum length is quite high, so this "</span>
|
||||
<span class="string">"may be because a '-)' was forgotten. Still, if "</span>
|
||||
<span class="string">"you do need to paste a huge I6 program in, try "</span>
|
||||
<span class="string">"using several verbatim inclusions in a row."</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="identifier">STRING_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingQuote</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of quoted text"</span><span class="plain">,</span>
|
||||
<span class="identifier">problem_source_description</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a quotation mark is missing "</span>
|
||||
<span class="string">"somewhere. If you are using Inform with syntax colouring, "</span>
|
||||
<span class="string">"look for where the quoted-text colour starts. (Sometimes "</span>
|
||||
<span class="string">"this problem turns up because a piece of quoted text contains "</span>
|
||||
<span class="string">"a text substitution in square brackets which in turn contains "</span>
|
||||
<span class="string">"another piece of quoted text - this is not allowed, and causes "</span>
|
||||
<span class="string">"me to lose track.)"</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="identifier">COMMENT_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingComment</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of a comment"</span><span class="plain">,</span>
|
||||
<span class="identifier">problem_source_description</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a ']' is missing somewhere. "</span>
|
||||
<span class="string">"(If you are using Inform with syntax colouring, look for "</span>
|
||||
<span class="string">"where the comment colour starts.) Inform's convention on "</span>
|
||||
<span class="string">"'nested comments' is that each '[' in a comment must be "</span>
|
||||
<span class="string">"matched by a corresponding ']': so for instance '[This "</span>
|
||||
<span class="string">"[even nested like so] acts as a comment]' is a single "</span>
|
||||
<span class="string">"comment - the first ']' character matches the second '[' "</span>
|
||||
<span class="string">"and so doesn't end the comment: only the second ']' ends "</span>
|
||||
<span class="string">"the comment."</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="identifier">I6_NEVER_ENDS_LEXERERROR</span><span class="plain">:</span>
|
||||
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingI6</span><span class="plain">),</span>
|
||||
<span class="string">"Some source text ended in the middle of a verbatim passage "</span>
|
||||
<span class="string">"of Inform 6 code"</span><span class="plain">,</span>
|
||||
<span class="identifier">problem_source_description</span><span class="plain">,</span>
|
||||
<span class="string">"This probably means that a '-)' is missing."</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">internal_error</span><span class="plain">(</span><span class="string">"unknown lexer error"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceFiles::lexer_problem_handler appears nowhere else.</p>
|
||||
<p class="endnote">The function SourceFiles::get_extension_corresponding is used in 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 6/nv (<a href="6-nv.html#SP14_1">§14.1</a>), 7/hdn (<a href="7-hdn.html#SP17">§17</a>, <a href="7-hdn.html#SP34_1_1">§34.1.1</a>), 8/ef (<a href="8-ef.html#SP11">§11</a>), 9/tfa (<a href="9-tfa.html#SP11_1">§11.1</a>), 17/rs (<a href="17-rs.html#SP7_3_1">§7.3.1</a>), 21/rl2 (<a href="21-rl2.html#SP23_10_1">§23.10.1</a>, <a href="21-rl2.html#SP24">§24</a>), 25/ci (<a href="25-ci.html#SP3_2_3_6">§3.2.3.6</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>, <a href="26-uo.html#SP13_1">§13.1</a>, <a href="26-uo.html#SP16">§16</a>), 27/cm (<a href="27-cm.html#SP2">§2</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 3: Bridge to Words Module.)</i></li><li><a href="3-nl.html">Continue with 'Natural Languages'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -1065,10 +1065,10 @@ author's source text.)
|
|||
<span class="plain">(</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">am2</span><span class="plain">-</span><span class="element">>defined_at</span><span class="plain">))) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">am1</span><span class="plain">-</span><span class="element">>adjective_form</span><span class="plain"> != </span><span class="constant">ENUMERATIVE_KADJ</span><span class="plain">) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">am2</span><span class="plain">-</span><span class="element">>adjective_form</span><span class="plain"> != </span><span class="constant">ENUMERATIVE_KADJ</span><span class="plain">)) {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef1</span><span class="plain"> =</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">ef1</span><span class="plain"> =</span>
|
||||
<span class="functiontext">SourceFiles::get_extension_corresponding</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">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">am1</span><span class="plain">-</span><span class="element">>defined_at</span><span class="plain">))));</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef2</span><span class="plain"> =</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">ef2</span><span class="plain"> =</span>
|
||||
<span class="functiontext">SourceFiles::get_extension_corresponding</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">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">am2</span><span class="plain">-</span><span class="element">>defined_at</span><span class="plain">))));</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ef1</span><span class="plain"> == </span><span class="identifier">ef2</span><span class="plain">) || ((</span><span class="identifier">ef1</span><span class="plain">) && (</span><span class="identifier">ef2</span><span class="plain">))) {</span>
|
||||
|
@ -1815,10 +1815,10 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">adaptive</span><span class="plain">-</span><span class="identifier">adjective</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">language_of_play</span><span class="plain"> == </span><span class="identifier">English_language</span><span class="plain">) </span><span class="reserved">return</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">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()) == </span><span class="identifier">English_language</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">adjectival_phrase</span><span class="plain"> *</span><span class="identifier">aph</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">, </span><span class="identifier">adjectival_phrase</span><span class="plain">) {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">Clusters::get_name_general</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">adjective_names</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">, 1, -1);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">Clusters::get_name_general</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">adjective_names</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()), 1, -1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="plain">*</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">aph</span><span class="plain">; *</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -1835,10 +1835,10 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Adjectives::Meanings::agreements</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">language_of_play</span><span class="plain"> == </span><span class="identifier">English_language</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">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()) == </span><span class="identifier">English_language</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">adjectival_phrase</span><span class="plain"> *</span><span class="identifier">aph</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">, </span><span class="identifier">adjectival_phrase</span><span class="plain">) {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Clusters::get_name_general</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">adjective_names</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">, 1, -1);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Clusters::get_name_general</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">adjective_names</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()), 1, -1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">PW</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">aph_iname</span><span class="plain">);</span>
|
||||
|
@ -1940,7 +1940,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">gna</span><span class="plain">%3 == 1) </span><span class="identifier">gender_sought</span><span class="plain"> = </span><span class="identifier">FEMININE_GENDER</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">gna</span><span class="plain"> >= 3) </span><span class="identifier">number_sought</span><span class="plain"> = 2;</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">Clusters::get_name_general</span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">-></span><span class="identifier">adjective_names</span><span class="plain">,</span>
|
||||
<span class="identifier">language_of_play</span><span class="plain">, </span><span class="identifier">number_sought</span><span class="plain">, </span><span class="identifier">gender_sought</span><span class="plain">);</span>
|
||||
<span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()), </span><span class="identifier">number_sought</span><span class="plain">, </span><span class="identifier">gender_sought</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">AW</span><span class="plain">)) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">PW</span><span class="plain">);</span>
|
||||
<span class="identifier">Produce::val_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">T</span><span class="plain">);</span>
|
||||
|
@ -1976,7 +1976,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Adjectives::Meanings::agreements is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Adjectives::Meanings::agreements is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Adjectives::Meanings::emit is used in 25/ci (<a href="25-ci.html#SP3_1">§3.1</a>, <a href="25-ci.html#SP3_2_3_3_1">§3.2.3.3.1</a>, <a href="25-ci.html#SP3_2_3_4_1">§3.2.3.4.1</a>).</p>
|
||||
|
||||
|
|
|
@ -236,9 +236,9 @@ whole thing into a <code class="display"><span class="extract">specification</sp
|
|||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_LANGUAGE_TYPE</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">natural_language</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_LANGUAGE_TYPE</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inform_language</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_ADAPTIVE_PERSON</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::adaptive_person</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_LANGUAGE_FROM_NAME</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::get_nl</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_LANGUAGE_FROM_NAME</span><span class="plain"> </span><span class="identifier">Languages::from_name</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_OPTIMISER</span><span class="plain"> </span><span class="functiontext">Semantics::mark_preform_requirements</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_CIRCULARITY_BREAKER</span><span class="plain"> </span><span class="functiontext">Semantics::break_preform_circularities</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">PREFORM_ERROR_HANDLER</span><span class="plain"> </span><span class="functiontext">NaturalLanguages::preform_error</span>
|
||||
|
@ -248,7 +248,7 @@ whole thing into a <code class="display"><span class="extract">specification</sp
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Semantics::read_preform</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<<span class="cwebmacro">Mark certain nonterminals to have their vocabularies numbered and flagged</span> <span class="cwebmacronumber">7.1</span>><span class="plain">;</span>
|
||||
<span class="functiontext">NaturalLanguages::scan</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="functiontext">NaturalLanguages::load_preform</span><span class="plain">(</span><span class="functiontext">NaturalLanguages::English</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="functiontext">NaturalLanguages::load_preform</span><span class="plain">(</span><span class="identifier">Projects::get_language_of_syntax</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()));</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nonterminals_declared</span><span class="plain"> = </span><span class="identifier">Preform::parse_preform</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">language_definition_top</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain"> - 1;</span>
|
||||
|
||||
|
@ -258,7 +258,7 @@ whole thing into a <code class="display"><span class="extract">specification</sp
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Semantics::read_preform is used in 1/mr (<a href="1-mr.html#SP4_7">§4.7</a>).</p>
|
||||
<p class="endnote">The function Semantics::read_preform is used in 1/htc (<a href="1-htc.html#SP2_1">§2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Mark certain nonterminals to have their vocabularies numbered and flagged</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
|
|
|
@ -82,7 +82,7 @@ evidence turns up to suggest otherwise).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure instance_usage is accessed in 3/pd, 5/lp, 5/ut, 5/un, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure instance_usage is accessed in 3/pd, 5/lp, 5/ut, 5/un, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>We record the one most recently made:
|
||||
</p>
|
||||
|
@ -292,7 +292,7 @@ be done later on: see the "Instance Counts" plugin.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Instances::get_creating_sentence is used in 2/sq (<a href="2-sq.html#SP2">§2</a>), 5/ipw (<a href="5-ipw.html#SP3_5">§3.5</a>, <a href="5-ipw.html#SP4">§4</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_2">§3.2.1.7.2</a>).</p>
|
||||
<p class="endnote">The function Instances::get_creating_sentence is used in 2/sq (<a href="2-sq.html#SP2">§2</a>), 5/ipw (<a href="5-ipw.html#SP3_5">§3.5</a>, <a href="5-ipw.html#SP4">§4</a>), 8/ef (<a href="8-ef.html#SP12_2">§12.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b></p>
|
||||
|
||||
|
@ -420,9 +420,9 @@ turns up subsequently, e.g., in response to
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Instances::get_numerical_value is used in 3/nl (<a href="3-nl.html#SP15">§15</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Instances::get_numerical_value is used in 3/nl (<a href="3-nl.html#SP7">§7</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Instances::as_subject is used in <a href="#SP33">§33</a>, 3/nl (<a href="3-nl.html#SP15">§15</a>), 4/am (<a href="4-am.html#SP22">§22</a>), 5/ipw (<a href="5-ipw.html#SP3_7">§3.7</a>, <a href="5-ipw.html#SP3_9">§3.9</a>), 6/rlt (<a href="6-rlt.html#SP26">§26</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">§9.5.1</a>, <a href="9-rpt.html#SP10_1">§10.1</a>), 9/tc (<a href="9-tc.html#SP5_4">§5.4</a>, <a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/ma (<a href="9-ma.html#SP3_3_41_5">§3.3.41.5</a>), 11/tc (<a href="11-tc.html#SP2">§2</a>), 12/ap (<a href="12-ap.html#SP9_5_2">§9.5.2</a>, <a href="12-ap.html#SP12">§12</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_1_5_1_3">§11.9.1.1.5.1.3</a>), 15/pr (<a href="15-pr.html#SP27">§27</a>), 15/pov (<a href="15-pov.html#SP4">§4</a>), 16/is (<a href="16-is.html#SP6">§6</a>, <a href="16-is.html#SP12">§12</a>, <a href="16-is.html#SP17">§17</a>), 16/in (<a href="16-in.html#SP19">§19</a>), 16/ic (<a href="16-ic.html#SP8">§8</a>, <a href="16-ic.html#SP12_1">§12.1</a>, <a href="16-ic.html#SP12_3_1">§12.3.1</a>, <a href="16-ic.html#SP12_3_2">§12.3.2</a>, <a href="16-ic.html#SP12_3_3">§12.3.3</a>).</p>
|
||||
<p class="endnote">The function Instances::as_subject is used in <a href="#SP33">§33</a>, 3/nl (<a href="3-nl.html#SP7">§7</a>), 4/am (<a href="4-am.html#SP22">§22</a>), 5/ipw (<a href="5-ipw.html#SP3_7">§3.7</a>, <a href="5-ipw.html#SP3_9">§3.9</a>), 6/rlt (<a href="6-rlt.html#SP26">§26</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">§9.5.1</a>, <a href="9-rpt.html#SP10_1">§10.1</a>), 9/tc (<a href="9-tc.html#SP5_4">§5.4</a>, <a href="9-tc.html#SP5_4_1_1">§5.4.1.1</a>, <a href="9-tc.html#SP8_4_1">§8.4.1</a>), 9/ma (<a href="9-ma.html#SP3_3_41_5">§3.3.41.5</a>), 11/tc (<a href="11-tc.html#SP2">§2</a>), 12/ap (<a href="12-ap.html#SP9_5_2">§9.5.2</a>, <a href="12-ap.html#SP12">§12</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_1_5_1_3">§11.9.1.1.5.1.3</a>), 15/pr (<a href="15-pr.html#SP27">§27</a>), 15/pov (<a href="15-pov.html#SP4">§4</a>), 16/is (<a href="16-is.html#SP6">§6</a>, <a href="16-is.html#SP12">§12</a>, <a href="16-is.html#SP17">§17</a>), 16/in (<a href="16-in.html#SP19">§19</a>), 16/ic (<a href="16-ic.html#SP8">§8</a>, <a href="16-ic.html#SP12_1">§12.1</a>, <a href="16-ic.html#SP12_3_1">§12.3.1</a>, <a href="16-ic.html#SP12_3_2">§12.3.2</a>, <a href="16-ic.html#SP12_3_3">§12.3.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. As mere names. </b></p>
|
||||
|
||||
|
@ -435,7 +435,7 @@ turns up subsequently, e.g., in response to
|
|||
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="functiontext">Instances::get_name_in_play</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">plural</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">I</span><span class="plain">-</span><span class="element">>tag</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">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">>tag</span><span class="plain">, </span><span class="identifier">plural</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">>tag</span><span class="plain">, </span><span class="identifier">plural</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()));</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Instances::full_name_includes</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">vocabulary_entry</span><span class="plain"> *</span><span class="identifier">wd</span><span class="plain">) {</span>
|
||||
|
@ -466,7 +466,7 @@ turns up subsequently, e.g., in response to
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Instances::get_name is used in <a href="#SP15_1">§15.1</a>, <a href="#SP15_2">§15.2</a>, <a href="#SP27">§27</a>, <a href="#SP37">§37</a>, <a href="#SP38_2">§38.2</a>, 2/sq (<a href="2-sq.html#SP2">§2</a>), 5/ipw (<a href="5-ipw.html#SP2_2_1">§2.2.1</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_2">§3.2.1.7.2</a>, <a href="8-ed2.html#SP3_2_1_7_4">§3.2.1.7.4</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">§9.5.1</a>), 9/tc (<a href="9-tc.html#SP5_4_1">§5.4.1</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Instances::get_name is used in <a href="#SP15_1">§15.1</a>, <a href="#SP15_2">§15.2</a>, <a href="#SP27">§27</a>, <a href="#SP37">§37</a>, <a href="#SP38_2">§38.2</a>, 2/sq (<a href="2-sq.html#SP2">§2</a>), 5/ipw (<a href="5-ipw.html#SP2_2_1">§2.2.1</a>), 8/ef (<a href="8-ef.html#SP12_2">§12.2</a>, <a href="8-ef.html#SP12_4">§12.4</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">§9.5.1</a>), 9/tc (<a href="9-tc.html#SP5_4_1">§5.4.1</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Instances::get_name_in_play is used in <a href="#SP25">§25</a>, 13/rsfk (<a href="13-rsfk.html#SP24_3">§24.3</a>).</p>
|
||||
|
||||
|
@ -643,7 +643,7 @@ specialised than which other ones, and by making a call, we can find out.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Instances::to_kind is used in <a href="#SP12">§12</a>, <a href="#SP15_1">§15.1</a>, <a href="#SP15_2">§15.2</a>, <a href="#SP19">§19</a>, <a href="#SP21">§21</a>, <a href="#SP25">§25</a>, <a href="#SP33">§33</a>, <a href="#SP34">§34</a>, <a href="#SP36">§36</a>, <a href="#SP37">§37</a>, <a href="#SP38_1">§38.1</a>, 2/sq (<a href="2-sq.html#SP2">§2</a>, <a href="2-sq.html#SP4">§4</a>), 4/am (<a href="4-am.html#SP22">§22</a>), 5/ipw (<a href="5-ipw.html#SP3_3_1">§3.3.1</a>, <a href="5-ipw.html#SP3_3_1_1">§3.3.1.1</a>, <a href="5-ipw.html#SP3_4">§3.4</a>, <a href="5-ipw.html#SP3_8">§3.8</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_2">§3.2.1.7.2</a>), 9/ma (<a href="9-ma.html#SP3_3_40_1">§3.3.40.1</a>, <a href="9-ma.html#SP3_3_41_5">§3.3.41.5</a>), 11/pr (<a href="11-pr.html#SP35_1">§35.1</a>), 12/ap (<a href="12-ap.html#SP9_10">§9.10</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>, <a href="14-rv.html#SP23_1">§23.1</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_1_5_1_1">§11.9.1.1.5.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_1_2">§11.9.1.1.5.1.2</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>), 15/epv (<a href="15-epv.html#SP1_1">§1.1</a>, <a href="15-epv.html#SP1_1_1">§1.1.1</a>), 16/is (<a href="16-is.html#SP19">§19</a>), 16/ic (<a href="16-ic.html#SP12_3">§12.3</a>, <a href="16-ic.html#SP12_3_1">§12.3.1</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>).</p>
|
||||
<p class="endnote">The function Instances::to_kind is used in <a href="#SP12">§12</a>, <a href="#SP15_1">§15.1</a>, <a href="#SP15_2">§15.2</a>, <a href="#SP19">§19</a>, <a href="#SP21">§21</a>, <a href="#SP25">§25</a>, <a href="#SP33">§33</a>, <a href="#SP34">§34</a>, <a href="#SP36">§36</a>, <a href="#SP37">§37</a>, <a href="#SP38_1">§38.1</a>, 2/sq (<a href="2-sq.html#SP2">§2</a>, <a href="2-sq.html#SP4">§4</a>), 4/am (<a href="4-am.html#SP22">§22</a>), 5/ipw (<a href="5-ipw.html#SP3_3_1">§3.3.1</a>, <a href="5-ipw.html#SP3_3_1_1">§3.3.1.1</a>, <a href="5-ipw.html#SP3_4">§3.4</a>, <a href="5-ipw.html#SP3_8">§3.8</a>), 8/ef (<a href="8-ef.html#SP12_2">§12.2</a>), 9/ma (<a href="9-ma.html#SP3_3_40_1">§3.3.40.1</a>, <a href="9-ma.html#SP3_3_41_5">§3.3.41.5</a>), 11/pr (<a href="11-pr.html#SP35_1">§35.1</a>), 12/ap (<a href="12-ap.html#SP9_10">§9.10</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>, <a href="14-rv.html#SP23_1">§23.1</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_1_5_1_1">§11.9.1.1.5.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_1_2">§11.9.1.1.5.1.2</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>), 15/epv (<a href="15-epv.html#SP1_1">§1.1</a>, <a href="15-epv.html#SP1_1_1">§1.1.1</a>), 16/is (<a href="16-is.html#SP19">§19</a>), 16/ic (<a href="16-ic.html#SP12_3">§12.3</a>, <a href="16-ic.html#SP12_3_1">§12.3.1</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Instances::of_kind is used in <a href="#SP21">§21</a>, 5/ipw (<a href="5-ipw.html#SP3">§3</a>), 16/ic (<a href="16-ic.html#SP8">§8</a>).</p>
|
||||
|
||||
|
@ -822,7 +822,7 @@ kinds, including "object", the connection is always blank.
|
|||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="functiontext">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</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="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
|
@ -862,7 +862,7 @@ kinds, including "object", the connection is always blank.
|
|||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">IU</span><span class="plain">-</span><span class="element">>where_instance_used</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</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">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">)));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">primary_source_file</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Projects::draws_from_source_file</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">(), </span><span class="identifier">sf</span><span class="plain">)) {</span>
|
||||
<span class="identifier">k</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">k</span><span class="plain"> == 1) {</span>
|
||||
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
||||
|
@ -1012,7 +1012,7 @@ Note that only instances, not kinds, appear.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Instances::place_objects_in_definition_sequence is used in 16/cmw (<a href="16-cmw.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Instances::place_objects_in_definition_sequence is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </b>And we read the order back using these macros:
|
||||
</p>
|
||||
|
|
|
@ -68,7 +68,7 @@ instance) Spatial.
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">suppress_panel_changes</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Data::Objects::page_World</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">in this case there is no model world</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Task::wraps_existing_storyfile</span><span class="plain">()) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">in this case there is no model world</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Plugins::Manage::plugged_in</span><span class="plain">(</span><span class="identifier">map_plugin</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">in this case there is no model world</span>
|
||||
|
||||
<span class="identifier">PL::SpatialMap::establish_benchmark_room</span><span class="plain">();</span>
|
||||
|
@ -348,10 +348,10 @@ table of Kinds.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</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="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()));</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) && (</span><span class="identifier">I</span><span class="plain">)) {</span>
|
||||
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">IK</span><span class="plain"> = </span><span class="functiontext">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">IK</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">IK</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">()));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"nameless"</span><span class="plain">);</span>
|
||||
|
@ -380,13 +380,13 @@ table of Kinds.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) {</span>
|
||||
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">k</span><span class="plain"> = </span><span class="functiontext">Instances::to_kind</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">Kinds::Compare::lt</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">K_object</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="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</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="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</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="identifier">WRITE</span><span class="plain">(</span><span class="string">", a kind of %+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Nouns::get_name_in_play</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</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">PW</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (<i>plural</i> %+W)"</span><span class="plain">, </span><span class="identifier">PW</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ The rightmost element e_{n-1} is the least significant numerically.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure literal_pattern_element is accessed in 1/kts and here.</p>
|
||||
<p class="endnote">The structure literal_pattern_element is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>For the sake of printing, we can specify which notation is to be used in
|
||||
printing a value back. For instance,
|
||||
|
@ -233,7 +233,7 @@ mass might also support "in kilograms" and "in grams", for instance.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure literal_pattern_name is accessed in 3/pd, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure literal_pattern_name is accessed in 3/pd, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Creating patterns, tokens and elements. </b></p>
|
||||
|
||||
|
@ -375,7 +375,7 @@ equivalent to an exact value.
|
|||
|
||||
<span class="identifier">list_head</span><span class="plain"> = </span><span class="functiontext">LiteralPatterns::lp_list_add_inner</span><span class="plain">(</span><span class="identifier">list_head</span><span class="plain">, </span><span class="identifier">new_lp</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">()) && (</span><span class="identifier">PM_ZMachineOverflow2_issued</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">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) && (</span><span class="identifier">PM_ZMachineOverflow2_issued</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">lp</span><span class="plain"> = </span><span class="identifier">list_head</span><span class="plain">; </span><span class="identifier">lp</span><span class="plain">; </span><span class="identifier">lp</span><span class="plain"> = </span><span class="identifier">lp</span><span class="plain">-</span><span class="element">>next_for_this_kind</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Scalings::quantum</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">-</span><span class="element">>scaling</span><span class="plain">) > 32767) {</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ZMachineOverflow2</span><span class="plain">),</span>
|
||||
|
@ -881,7 +881,7 @@ which is annoying. So we have a mechanism to suppress duplicates:
|
|||
<span class="string">"page of the Index.)"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">overflow_16_bit_flag</span><span class="plain">) && (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">())) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">overflow_16_bit_flag</span><span class="plain">) && (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()))) {</span>
|
||||
<span class="constant">ISSUING_LP_PROBLEM</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ZMachineOverflow</span><span class="plain">),</span>
|
||||
<span class="string">"you use a literal specification to make a value which is too large"</span><span class="plain">,</span>
|
||||
|
@ -3924,7 +3924,7 @@ set.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function LiteralPatterns::define_named_phrases is used in 1/mr (<a href="1-mr.html#SP4_14">§4.14</a>).</p>
|
||||
<p class="endnote">The function LiteralPatterns::define_named_phrases is used in 1/htc (<a href="1-htc.html#SP2_7">§2.7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP40_1"></a><b>§40.1. </b>These text substitutions correspond exactly neither to the LPs nor to the
|
||||
names. For instance, "in tonnes" produces a text substitution which takes
|
||||
|
|
|
@ -67,7 +67,7 @@ exist; we can simply record inferences about its value.
|
|||
|
||||
<p class="endnote">The structure nonlocal_variable_emission is private to this section.</p>
|
||||
|
||||
<p class="endnote">The structure nonlocal_variable is accessed in 1/kts, 2/sq, 2/si, 5/ins, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
<p class="endnote">The structure nonlocal_variable is accessed in 2/sq, 2/si, 5/ins, 8/ef, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 25/cii, 26/uo, 26/ts and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>These three special NLVs are used for the "notable" hacky Standard Rules
|
||||
variables mentioned below:
|
||||
|
@ -759,7 +759,7 @@ about it is that it's a variable, and as such, has permission to have the
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NonlocalVariables::is_global is used in <a href="#SP27">§27</a>, 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_3">§3.2.1.7.3</a>), 11/bas (<a href="11-bas.html#SP19">§19</a>).</p>
|
||||
<p class="endnote">The function NonlocalVariables::is_global is used in <a href="#SP27">§27</a>, 8/ef (<a href="8-ef.html#SP12_3">§12.3</a>), 11/bas (<a href="11-bas.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>The kind can in fact be changed after creation, though this never happens
|
||||
to variables declared in source text: it allows us to have a few globals which
|
||||
|
|
|
@ -100,7 +100,7 @@ instance, the Standard Rules want the player-character object to be called
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function UseNouns::name_all is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function UseNouns::name_all is used in 1/htc (<a href="1-htc.html#SP2_5">§2.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::visit_to_name appears nowhere else.</p>
|
||||
|
||||
|
@ -163,7 +163,7 @@ and is a somewhat provisional feature for now.
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::nl_translates</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">pn</span><span class="plain">) {</span>
|
||||
<span class="comment">the object</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">ParseTree::get_defn_language</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">ParseTree::get_defn_language</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">g</span><span class="plain"> = </span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">, </span><span class="identifier">gender_reference_ANNOT</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"No such NL"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">English_language</span><span class="plain">) {</span>
|
||||
|
|
|
@ -1324,7 +1324,7 @@ above. This happens very early in compilation.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function BinaryPredicates::make_built_in is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function BinaryPredicates::make_built_in is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP46"></a><b>§46. Other property-based relations. </b></p>
|
||||
|
||||
|
@ -1349,7 +1349,7 @@ above. This happens very early in compilation.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function BinaryPredicates::make_built_in_further is used in 1/mr (<a href="1-mr.html#SP4_12">§4.12</a>).</p>
|
||||
<p class="endnote">The function BinaryPredicates::make_built_in_further is used in 1/htc (<a href="1-htc.html#SP2_6">§2.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP47"></a><b>§47. </b></p>
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ cleared.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function NewVerbs::add_inequalities is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function NewVerbs::add_inequalities is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function NewVerbs::add_inequalities_inner appears nowhere else.</p>
|
||||
|
||||
|
@ -129,8 +129,8 @@ as the object.
|
|||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">verb</span><span class="plain">-</span><span class="identifier">implies</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
||||
<span class="identifier">in</span><span class="plain"> <</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> <</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]; <<</span><span class="reserved">natural_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>> = (</span><span class="reserved">natural_language</span><span class="plain"> *) (</span><span class="identifier">RP</span><span class="plain">[1]);</span>
|
||||
<span class="plain"><</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="reserved">natural_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>> = </span><span class="identifier">English_language</span><span class="plain">;</span>
|
||||
<span class="identifier">in</span><span class="plain"> <</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> <</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]; <<</span><span class="identifier">inform_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>> = (</span><span class="identifier">inform_language</span><span class="plain"> *) (</span><span class="identifier">RP</span><span class="plain">[1]);</span>
|
||||
<span class="plain"><</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">inform_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>> = </span><span class="identifier">English_language</span><span class="plain">;</span>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">> ::=</span>
|
||||
<span class="identifier">to</span><span class="plain"> <</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">usage</span><span class="plain">> ( ... ) | ==> </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">giving</span><span class="plain">-</span><span class="identifier">parts</span><span class="plain">>> = </span><span class="identifier">TRUE</span>
|
||||
|
@ -390,7 +390,7 @@ now absolutely any non-empty word range is accepted as the property name.
|
|||
<<span class="cwebmacro">Find the underlying relation of the new verb or preposition</span> <span class="cwebmacronumber">14.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">verb</span><span class="plain">-</span><span class="identifier">implies</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">-</span><span class="element">>next</span><span class="plain">))) {</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = <<</span><span class="reserved">natural_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>>;</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = <<</span><span class="identifier">inform_language</span><span class="plain">:</span><span class="identifier">nl</span><span class="plain">>>;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">r</span><span class="plain"> = <<</span><span class="identifier">r</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="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">usage</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">giving</span><span class="plain">-</span><span class="identifier">parts</span><span class="plain">>>) </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">infinitive</span><span class="plain">-</span><span class="identifier">declaration</span><span class="plain">>, 1);</span>
|
||||
|
@ -485,8 +485,8 @@ now absolutely any non-empty word range is accepted as the property name.
|
|||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">MW</span><span class="plain">) != 1) || (</span><span class="identifier">VerbMeanings::is_meaningless</span><span class="plain">(&</span><span class="identifier">vm</span><span class="plain">))) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
||||
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">pos</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">MW</span><span class="plain">));</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">loc</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(</span><span class="identifier">loc</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="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_NoSuchBuiltInMeaning</span><span class="plain">),</span>
|
||||
<span class="string">"that's not one of the built-in meanings I know"</span><span class="plain">,</span>
|
||||
|
@ -1034,7 +1034,7 @@ foreign verbs (4).
|
|||
|
||||
<p class="endnote">The function NewVerbs::ConjugateVerbDefinitions is used in 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function NewVerbs::ConjugateVerb is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function NewVerbs::ConjugateVerb is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18_1"></a><b>§18.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile ConjugateVerb routine</span> <span class="cwebmacronumber">18.1</span>> =
|
||||
|
@ -1504,7 +1504,7 @@ foreign verbs (4).
|
|||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">adjective</span><span class="plain">-</span><span class="reserved">definition</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
||||
<span class="identifier">in</span><span class="plain"> <</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> ... | ==> </span><span class="identifier">TRUE</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1];</span>
|
||||
<span class="plain">... ==> </span><span class="identifier">TRUE</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">language_of_play</span><span class="plain">;</span>
|
||||
<span class="plain">... ==> </span><span class="identifier">TRUE</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="functiontext">Task::project</span><span class="plain">());</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -1558,7 +1558,7 @@ usages to the debugging log.
|
|||
|
||||
<p class="endnote">The function NewVerbs::log is used in 7/ptu (<a href="7-ptu.html#SP17_1">§17.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function NewVerbs::log_all is used in 1/mr (<a href="1-mr.html#SP4_18">§4.18</a>).</p>
|
||||
<p class="endnote">The function NewVerbs::log_all is used in 1/mr (<a href="1-mr.html#SP1_5">§1.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. Index tabulation. </b>The following produces the table of verbs in the Phrasebook Index page.
|
||||
</p>
|
||||
|
|
|
@ -1219,7 +1219,7 @@ logical properties of the two terms of the BP being defined.
|
|||
<span class="identifier">RELS_LOOKUP_ALL_X_iname</span><span class="plain"> = </span><span class="functiontext">Relations::compile_defined_relation_constant</span><span class="plain">(</span><span class="constant">RELS_LOOKUP_ALL_X_HL</span><span class="plain">, 0</span><span class="identifier">x0004</span><span class="plain">);</span>
|
||||
<span class="identifier">RELS_LOOKUP_ALL_Y_iname</span><span class="plain"> = </span><span class="functiontext">Relations::compile_defined_relation_constant</span><span class="plain">(</span><span class="constant">RELS_LOOKUP_ALL_Y_HL</span><span class="plain">, 0</span><span class="identifier">x0002</span><span class="plain">);</span>
|
||||
<span class="identifier">RELS_LIST_iname</span><span class="plain"> = </span><span class="functiontext">Relations::compile_defined_relation_constant</span><span class="plain">(</span><span class="constant">RELS_LIST_HL</span><span class="plain">, 0</span><span class="identifier">x0001</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">()) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">())) {</span>
|
||||
<span class="identifier">REL_BLOCK_HEADER_symbol</span><span class="plain"> = </span><span class="functiontext">Relations::compile_defined_relation_constant</span><span class="plain">(</span><span class="constant">REL_BLOCK_HEADER_HL</span><span class="plain">, 0</span><span class="identifier">x100</span><span class="plain">*5 + 13); </span> <span class="comment">2^5 = 32 bytes block</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">REL_BLOCK_HEADER_symbol</span><span class="plain"> = </span><span class="functiontext">Relations::compile_defined_relation_constant</span><span class="plain">(</span><span class="constant">REL_BLOCK_HEADER_HL</span><span class="plain">, (0</span><span class="identifier">x100</span><span class="plain">*6 + 13)*0</span><span class="identifier">x10000</span><span class="plain">);</span>
|
||||
|
@ -1233,7 +1233,7 @@ logical properties of the two terms of the BP being defined.
|
|||
|
||||
<p class="endnote">The function Relations::compile_defined_relation_constant appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Relations::compile_defined_relation_constants is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Relations::compile_defined_relation_constants is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b></p>
|
||||
|
||||
|
@ -2385,7 +2385,7 @@ logical properties of the two terms of the BP being defined.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Relations::IterateRelations is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Relations::IterateRelations is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. The bitmap for various-to-various relations. </b>It is unavoidable that a general V-to-V relation will take at least LR bits
|
||||
of storage, where L is the size of the left domain and R the size of the
|
||||
|
@ -2460,11 +2460,6 @@ logical properties of the two terms of the BP being defined.
|
|||
|
||||
<span class="functiontext">Emit::array_end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">, </span><span class="string">"%A"</span><span class="plain">, &(</span><span class="identifier">bp</span><span class="plain">-</span><span class="element">>relation_name</span><span class="plain">));</span>
|
||||
<span class="functiontext">VirtualMachines::note_usage</span><span class="plain">(</span><span class="string">"relation"</span><span class="plain">,</span>
|
||||
<span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">bp</span><span class="plain">-</span><span class="element">>bp_created_at</span><span class="plain">), </span><span class="identifier">rname</span><span class="plain">, </span><span class="identifier">words_used</span><span class="plain">, </span><span class="identifier">bytes_used</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">);</span>
|
||||
<span class="functiontext">Relations::free_index_storage</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -3146,7 +3141,7 @@ logical properties of the two terms of the BP being defined.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Relations::compile_defined_relations is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
||||
<p class="endnote">The function Relations::compile_defined_relations is used in 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP29_1"></a><b>§29.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile RProperty routine</span> <span class="cwebmacronumber">29.1</span>> =
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '7/hdn' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Headings</b></li></ul><p class="purpose">To keep track of the hierarchy of headings and subheadings found in the source text.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP9">§9. Declarations</a></li><li><a href="#SP10_2">§10.2. Parsing heading qualifiers</a></li><li><a href="#SP12">§12. The heading tree</a></li><li><a href="#SP14">§14. Verifying the heading tree</a></li><li><a href="#SP15">§15. Miscellaneous heading services</a></li><li><a href="#SP19">§19. Headings with extension dependencies</a></li><li><a href="#SP22">§22. World objects under each heading</a></li><li><a href="#SP24">§24. The noun search list</a></li><li><a href="#SP30">§30. Handling headings during the main traverses</a></li><li><a href="#SP31">§31. Describing the heading structure, 1: to the debugging log</a></li><li><a href="#SP33">§33. Describing the heading structure, 2: to the index</a></li><li><a href="#SP34">§34. Describing the heading structure, 3: to a freestanding XML file</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP9">§9. Declarations</a></li><li><a href="#SP10_2">§10.2. Parsing heading qualifiers</a></li><li><a href="#SP13">§13. The heading tree</a></li><li><a href="#SP15">§15. Verifying the heading tree</a></li><li><a href="#SP16">§16. Miscellaneous heading services</a></li><li><a href="#SP20">§20. Headings with extension dependencies</a></li><li><a href="#SP23">§23. World objects under each heading</a></li><li><a href="#SP25">§25. The noun search list</a></li><li><a href="#SP31">§31. Handling headings during the main traverses</a></li><li><a href="#SP32">§32. Describing the heading structure, 1: to the debugging log</a></li><li><a href="#SP34">§34. Describing the heading structure, 2: to the index</a></li><li><a href="#SP35">§35. Describing the heading structure, 3: to a freestanding XML file</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
||||
|
||||
|
@ -74,7 +74,7 @@ made from the following structures:
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">for_release</span><span class="plain">; </span> <span class="comment">include this material in a release version?</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">omit_material</span><span class="plain">; </span> <span class="comment">if set, simply ignore all of this</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">use_with_or_without</span><span class="plain">; </span> <span class="comment">if TRUE, use with the extension; if FALSE, without</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">extension_identifier</span><span class="plain"> </span><span class="identifier">for_use_with</span><span class="plain">; </span> <span class="comment">e.g. "for use with ... by ..."</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">for_use_with</span><span class="plain">; </span> <span class="comment">e.g. "for use with ... by ..."</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">in_place_of_text</span><span class="plain">; </span> <span class="comment">e.g. "in place of ... in ... by ..."</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">heading_text</span><span class="plain">; </span> <span class="comment">once provisos have been stripped away</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">list_of_contents</span><span class="plain">; </span> <span class="comment">tagged names defined under this</span>
|
||||
|
@ -241,7 +241,7 @@ than assist.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure contents_entry is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure contents_entry is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Declarations. </b>The heading tree is constructed all at once, after most of the sentence-breaking
|
||||
is done, but since a few sentences can in principle be added later, we watch
|
||||
|
@ -269,8 +269,7 @@ and cannot contain information about releasing or about virtual machines.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">last_indentation_above_level</span><span class="plain">[</span><span class="constant">NO_HEADING_LEVELS</span><span class="plain">], </span><span class="identifier">lial_made</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">extension_identifier</span><span class="plain"> *</span><span class="identifier">grammar_eid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">work_identified</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="functiontext">Sentences::Headings::declare</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain">);</span>
|
||||
|
@ -281,6 +280,7 @@ and cannot contain information about releasing or about virtual machines.
|
|||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>index_definitions_made_under_this</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>use_with_or_without</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>in_place_of_text</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">PN</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">))))</span>
|
||||
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"heading at textless node"</span><span class="plain">);</span>
|
||||
|
@ -303,7 +303,7 @@ and cannot contain information about releasing or about virtual machines.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::declare is used in 7/ss (<a href="7-ss.html#SP3">§3</a>, <a href="7-ss.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::declare is used in 7/ss (<a href="7-ss.html#SP3">§3</a>, <a href="7-ss.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b>This implements the indentation algorithm described above.
|
||||
</p>
|
||||
|
@ -350,7 +350,6 @@ and cannot contain information about releasing or about virtual machines.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">grammar_eid</span><span class="plain"> = &(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">PN</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="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">);</span>
|
||||
|
@ -365,12 +364,12 @@ and cannot contain information about releasing or about virtual machines.
|
|||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IN_PLACE_OF_HQ</span><span class="plain">:</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>use_with_or_without</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>in_place_of_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">qualifier</span><span class="plain">>, 1);</span>
|
||||
<span class="functiontext">CoreMain::disable_importation</span><span class="plain">();</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="reserved">heading</span><span class="plain">-</span><span class="identifier">qualifier</span><span class="plain">>, 1);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>heading_text</span><span class="plain"> = </span><span class="identifier">W</span><span class="plain">;</span>
|
||||
<span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain"> = </span><span class="identifier">work_identified</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -416,7 +415,7 @@ allowed; they should probably be withdrawn.
|
|||
<span class="plain"><</span><span class="identifier">platform</span><span class="plain">-</span><span class="identifier">identifier</span><span class="plain">> ::=</span>
|
||||
<span class="plain"><</span><span class="identifier">language</span><span class="plain">-</span><span class="identifier">element</span><span class="plain">> </span><span class="identifier">language</span><span class="plain"> </span><span class="identifier">element</span><span class="plain"> | ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
||||
<span class="plain">...... </span><span class="identifier">language</span><span class="plain"> </span><span class="identifier">element</span><span class="plain"> | ==> </span><<span class="cwebmacro">Issue PM_UnknownLanguageElement problem</span> <span class="cwebmacronumber">11.1</span>>
|
||||
<span class="plain"><</span><span class="identifier">virtual</span><span class="plain">-</span><span class="identifier">machine</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
||||
<span class="plain"><</span><span class="identifier">current</span><span class="plain">-</span><span class="identifier">virtual</span><span class="plain">-</span><span class="identifier">machine</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
||||
<span class="plain">...... ==> </span><<span class="cwebmacro">Issue PM_UnknownVirtualMachine problem</span> <span class="cwebmacronumber">11.2</span>>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">qualifier</span><span class="plain">> ::=</span>
|
||||
|
@ -479,7 +478,8 @@ allowed; they should probably be withdrawn.
|
|||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">identifier</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">exft</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">TW</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">exfa</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
||||
<span class="functiontext">Extensions::IDs::new</span><span class="plain">(</span><span class="identifier">grammar_eid</span><span class="plain">, </span><span class="identifier">exfa</span><span class="plain">, </span><span class="identifier">exft</span><span class="plain">, </span><span class="constant">USEWITH_EIDBC</span><span class="plain">);</span>
|
||||
<span class="identifier">work_identified</span><span class="plain"> = </span><span class="identifier">Works::new</span><span class="plain">(</span><span class="identifier">extension_genre</span><span class="plain">, </span><span class="identifier">exft</span><span class="plain">, </span><span class="identifier">exfa</span><span class="plain">);</span>
|
||||
<span class="identifier">Works::add_to_database</span><span class="plain">(</span><span class="identifier">work_identified</span><span class="plain">, </span><span class="identifier">USEWITH_WDBC</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">exft</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">exfa</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
@ -488,7 +488,24 @@ allowed; they should probably be withdrawn.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP11">§11</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. The heading tree. </b>The headings were constructed above as freestanding nodes (except that the
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">current</span><span class="plain">-</span><span class="identifier">virtual</span><span class="plain">-</span><span class="identifier">machine</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">virtual</span><span class="plain">-</span><span class="identifier">machine</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">Compatibility::with</span><span class="plain">((</span><span class="identifier">compatibility_specification</span><span class="plain"> *) <<</span><span class="identifier">rp</span><span class="plain">>>, </span><span class="functiontext">Task::vm</span><span class="plain">());</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. The heading tree. </b>The headings were constructed above as freestanding nodes (except that the
|
||||
pseudo-heading already existed): here, we assemble them into a tree
|
||||
structure. Because we want to be able to call this more than once, perhaps
|
||||
to make revisions if late news comes in of a new heading (see above), we
|
||||
|
@ -499,11 +516,11 @@ begin by removing any existing relationships between the heading nodes.
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::make_tree</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Reduce the whole heading tree to a pile of twigs</span> <span class="cwebmacronumber">12.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Reduce the whole heading tree to a pile of twigs</span> <span class="cwebmacronumber">13.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">heading</span><span class="plain">) {</span>
|
||||
<<span class="cwebmacro">If h is outside the tree, make it a child of the pseudo-heading</span> <span class="cwebmacronumber">12.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Run through subsequent equal or subordinate headings to move them downward</span> <span class="cwebmacronumber">12.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">If h is outside the tree, make it a child of the pseudo-heading</span> <span class="cwebmacronumber">13.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Run through subsequent equal or subordinate headings to move them downward</span> <span class="cwebmacronumber">13.3</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">heading_tree_made_at_least_once</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
|
@ -513,16 +530,16 @@ begin by removing any existing relationships between the heading nodes.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::make_tree is used in <a href="#SP10">§10</a>, <a href="#SP27_3">§27.3</a>, 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::make_tree is used in <a href="#SP10">§10</a>, <a href="#SP28_3">§28.3</a>, 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12_1"></a><b>§12.1. </b>Note that the loop over headings below loops through all those which were
|
||||
<p class="inwebparagraph"><a id="SP13_1"></a><b>§13.1. </b>Note that the loop over headings below loops through all those which were
|
||||
created by the memory manager: which is to say, all of them except for the
|
||||
pseudo-heading, which was explicitly placed in static memory above.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Reduce the whole heading tree to a pile of twigs</span> <span class="cwebmacronumber">12.1</span>> =
|
||||
<<span class="cwebmacrodefn">Reduce the whole heading tree to a pile of twigs</span> <span class="cwebmacronumber">13.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -537,9 +554,9 @@ pseudo-heading, which was explicitly placed in static memory above.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12_2"></a><b>§12.2. </b>The idea of the heading loop is that when we place a heading, we also place
|
||||
<p class="inwebparagraph"><a id="SP13_2"></a><b>§13.2. </b>The idea of the heading loop is that when we place a heading, we also place
|
||||
subsequent headings of lesser or equal status until we cannot do so any longer.
|
||||
That means that if we reach h and find that it has no parent, it must be
|
||||
subordinate to no earlier heading: thus, it must be attached to the pseudo-heading
|
||||
|
@ -548,7 +565,7 @@ at the top of the tree.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">If h is outside the tree, make it a child of the pseudo-heading</span> <span class="cwebmacronumber">12.2</span>> =
|
||||
<<span class="cwebmacrodefn">If h is outside the tree, make it a child of the pseudo-heading</span> <span class="cwebmacronumber">13.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -559,9 +576,9 @@ at the top of the tree.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12_3"></a><b>§12.3. </b>Note that the following could be summed up as "move subsequent headings as
|
||||
<p class="inwebparagraph"><a id="SP13_3"></a><b>§13.3. </b>Note that the following could be summed up as "move subsequent headings as
|
||||
deep in the tree as we can see they need to be from h's perspective alone".
|
||||
This isn't always the final position. For instance, given the sequence
|
||||
Volume 1, Chapter I, Section A, Chapter II, the tree is adjusted twice:
|
||||
|
@ -587,7 +604,7 @@ most 9, it runs in linear time.)
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Run through subsequent equal or subordinate headings to move them downward</span> <span class="cwebmacronumber">12.3</span>> =
|
||||
<<span class="cwebmacrodefn">Run through subsequent equal or subordinate headings to move them downward</span> <span class="cwebmacronumber">13.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -605,9 +622,9 @@ most 9, it runs in linear time.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>The above routine, then, calls <code class="display"><span class="extract">Sentences::Headings::make_child_heading</span></code> to attach a heading
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>The above routine, then, calls <code class="display"><span class="extract">Sentences::Headings::make_child_heading</span></code> to attach a heading
|
||||
to the tree as a child of a given parent:
|
||||
</p>
|
||||
|
||||
|
@ -616,17 +633,17 @@ to the tree as a child of a given parent:
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::make_child_heading</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">ch</span><span class="plain">, </span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">pa</span><span class="plain">) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">former_pa</span><span class="plain"> = </span><span class="identifier">ch</span><span class="plain">-</span><span class="element">>parent_heading</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">former_pa</span><span class="plain"> == </span><span class="identifier">pa</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Detach ch from the heading tree if it is already there</span> <span class="cwebmacronumber">13.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Detach ch from the heading tree if it is already there</span> <span class="cwebmacronumber">14.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">ch</span><span class="plain">-</span><span class="element">>parent_heading</span><span class="plain"> = </span><span class="identifier">pa</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add ch to the end of the list of children of pa</span> <span class="cwebmacronumber">13.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add ch to the end of the list of children of pa</span> <span class="cwebmacronumber">14.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::make_child_heading is used in <a href="#SP12_2">§12.2</a>, <a href="#SP12_3">§12.3</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::make_child_heading is used in <a href="#SP13_2">§13.2</a>, <a href="#SP13_3">§13.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13_1"></a><b>§13.1. </b>If ch is present in the tree, it must have a parent, unless it is the
|
||||
<p class="inwebparagraph"><a id="SP14_1"></a><b>§14.1. </b>If ch is present in the tree, it must have a parent, unless it is the
|
||||
pseudo-heading: but the latter can never be moved, so it isn't. Therefore
|
||||
we can remove ch by striking it out from the children list of the parent.
|
||||
(Any children which ch has, grandchildren so to speak, come with it.)
|
||||
|
@ -634,7 +651,7 @@ we can remove ch by striking it out from the children list of the parent.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Detach ch from the heading tree if it is already there</span> <span class="cwebmacronumber">13.1</span>> =
|
||||
<<span class="cwebmacrodefn">Detach ch from the heading tree if it is already there</span> <span class="cwebmacronumber">14.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -656,14 +673,14 @@ we can remove ch by striking it out from the children list of the parent.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP14">§14</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13_2"></a><b>§13.2. </b>Two cases: the new parent is initially childless, or it isn't.
|
||||
<p class="inwebparagraph"><a id="SP14_2"></a><b>§14.2. </b>Two cases: the new parent is initially childless, or it isn't.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Add ch to the end of the list of children of pa</span> <span class="cwebmacronumber">13.2</span>> =
|
||||
<<span class="cwebmacrodefn">Add ch to the end of the list of children of pa</span> <span class="cwebmacronumber">14.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -680,9 +697,9 @@ we can remove ch by striking it out from the children list of the parent.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP14">§14</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. Verifying the heading tree. </b>We have now, in effect, computed the indentation value of each heading twice,
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. Verifying the heading tree. </b>We have now, in effect, computed the indentation value of each heading twice,
|
||||
by two entirely different methods: first by the mathematical argument above,
|
||||
then by observing that it is the depth in the heading tree. Seeing if
|
||||
these two methods have given the same answer provides a convenient check on
|
||||
|
@ -710,11 +727,11 @@ our working.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::verify_heading_tree is used in <a href="#SP12">§12</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::verify_heading_tree is used in <a href="#SP13">§13</a>.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::verify_heading_tree_recursively appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. Miscellaneous heading services. </b>The first of these we have already seen in use: the sentence-breaker calls
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. Miscellaneous heading services. </b>The first of these we have already seen in use: the sentence-breaker calls
|
||||
it to ask whether sentences falling under the current heading should be
|
||||
included in the active source text. (For instance, sentences under a
|
||||
heading with the disclaimer "(for Glulx only)" will not be included
|
||||
|
@ -724,8 +741,9 @@ if the target virtual machine on this run of Inform is the Z-machine.)
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::include_material</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_release</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">) && (</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) </span><span class="reserved">return</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">h</span><span class="plain">-</span><span class="element">>for_release</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">)) </span><span class="reserved">return</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">releasing</span><span class="plain"> = </span><span class="identifier">Inbuild::currently_releasing</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_release</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">) && (</span><span class="identifier">releasing</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) </span><span class="reserved">return</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">h</span><span class="plain">-</span><span class="element">>for_release</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">releasing</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">)) </span><span class="reserved">return</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">h</span><span class="plain">-</span><span class="element">>omit_material</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -740,14 +758,14 @@ if the target virtual machine on this run of Inform is the Z-machine.)
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::include_material is used in 7/ss (<a href="7-ss.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::indexed is used in 5/nv (<a href="5-nv.html#SP27_2">§27.2</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_3">§3.2.1.7.3</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::indexed is used in 5/nv (<a href="5-nv.html#SP27_2">§27.2</a>), 8/ef (<a href="8-ef.html#SP12_3">§12.3</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>A utility to do with the file of origin:
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b>A utility to do with the file of origin:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">) {</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">h</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>start_location</span><span class="plain">.</span><span class="identifier">file_of_origin</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">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>start_location</span><span class="plain">.</span><span class="identifier">file_of_origin</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -755,9 +773,9 @@ if the target virtual machine on this run of Inform is the Z-machine.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::get_extension_containing is used in <a href="#SP20">§20</a>, 19/tb (<a href="19-tb.html#SP31">§31</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>), 25/cp (<a href="25-cp.html#SP3_1">§3.1</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::get_extension_containing is used in <a href="#SP21">§21</a>, 19/tb (<a href="19-tb.html#SP31">§31</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b>Although File (0) headings do have text, contrary to the implication of
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>Although File (0) headings do have text, contrary to the implication of
|
||||
the routine here, this text is only what happens to be first in the file:
|
||||
it isn't a heading actually typed by the user, which is all that we are
|
||||
interested in for this purpose. So we send back a null word range.
|
||||
|
@ -775,7 +793,7 @@ interested in for this purpose. So we send back a null word range.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::get_text is used in 5/nv (<a href="5-nv.html#SP27_2">§27.2</a>), 22/pi (<a href="22-pi.html#SP1_2">§1.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>This routine determines the (closest) heading to which a scrap of text
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>This routine determines the (closest) heading to which a scrap of text
|
||||
belongs, and is important since the parsing of noun phrases is affected by
|
||||
that choice of heading (as we shall see): to Inform, headings provide something
|
||||
analogous to the scope of local variables in a conventional programming
|
||||
|
@ -807,11 +825,11 @@ file and a line number of at least 1).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::heading_of is used in <a href="#SP27_1">§27.1</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::heading_of is used in <a href="#SP28_1">§28.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::of_wording is used in <a href="#SP22">§22</a>, 5/nv (<a href="5-nv.html#SP27_2">§27.2</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_3">§3.2.1.7.3</a>), 19/tb (<a href="19-tb.html#SP31">§31</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>), 25/cp (<a href="25-cp.html#SP3_1">§3.1</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::of_wording is used in <a href="#SP23">§23</a>, 5/nv (<a href="5-nv.html#SP27_2">§27.2</a>), 8/ef (<a href="8-ef.html#SP12_3">§12.3</a>), 19/tb (<a href="19-tb.html#SP31">§31</a>), 22/pi (<a href="22-pi.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. Headings with extension dependencies. </b>If the content under a heading depended on the VM not in use, or was marked
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. Headings with extension dependencies. </b>If the content under a heading depended on the VM not in use, or was marked
|
||||
not for release in a release run, we were able to exclude it just by
|
||||
skipping. The same cannot be done when a heading says that it should be
|
||||
used only if a given extension is, or is not, being used, because when
|
||||
|
@ -831,9 +849,9 @@ But when the following is called, we do know that.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::satisfy_dependencies is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::satisfy_dependencies is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b>And now the code to check an individual heading's usage. This whole
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>And now the code to check an individual heading's usage. This whole
|
||||
thing is carefully timed so that we can still afford to cut up and rearrange
|
||||
the parse tree on quite a large scale, and that's just what we do.
|
||||
</p>
|
||||
|
@ -842,9 +860,9 @@ the parse tree on quite a large scale, and that's just what we do.
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::satisfy_individual_heading_dependency</span><span class="plain">(</span><span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>level</span><span class="plain"> < 1) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">extension_identifier</span><span class="plain"> *</span><span class="identifier">eid</span><span class="plain"> = &(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">work</span><span class="plain"> = </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">loaded</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="functiontext">Extensions::IDs::no_times_used_in_context</span><span class="plain">(</span><span class="identifier">eid</span><span class="plain">, </span><span class="constant">LOADED_EIDBC</span><span class="plain">) != 0) </span><span class="identifier">loaded</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">Works::no_times_used_in_context</span><span class="plain">(</span><span class="identifier">work</span><span class="plain">, </span><span class="identifier">LOADED_WDBC</span><span class="plain">) != 0) </span><span class="identifier">loaded</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">HEADINGS</span><span class="plain">, </span><span class="string">"SIHD on $H: loaded %d: annotation %d: %W: %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">h</span><span class="plain">, </span><span class="identifier">loaded</span><span class="plain">,</span>
|
||||
<span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">,</span>
|
||||
<span class="constant">suppress_heading_dependencies_ANNOT</span><span class="plain">),</span>
|
||||
|
@ -859,22 +877,21 @@ the parse tree on quite a large scale, and that's just what we do.
|
|||
<span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Feeds::feed_text</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h2</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</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">loaded</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Can't replace heading in an unincluded extension</span> <span class="cwebmacronumber">20.1</span>>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">loaded</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Can't replace heading in an unincluded extension</span> <span class="cwebmacronumber">21.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">h2</span><span class="plain">, </span><span class="reserved">heading</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">h2</span><span class="plain">-</span><span class="element">>heading_text</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">Wordings::match_perhaps_quoted</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>heading_text</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">Extensions::IDs::match</span><span class="plain">(</span>
|
||||
<span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span>
|
||||
<span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">h2</span><span class="plain">)), </span><span class="identifier">eid</span><span class="plain">))) {</span>
|
||||
<span class="plain">(</span><span class="identifier">Works::match</span><span class="plain">(</span>
|
||||
<span class="functiontext">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">h2</span><span class="plain">)-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">, </span><span class="identifier">work</span><span class="plain">))) {</span>
|
||||
<span class="identifier">found</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">h</span><span class="plain">-</span><span class="element">>level</span><span class="plain"> != </span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>level</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Can't replace heading unless level matches</span> <span class="cwebmacronumber">20.3</span>><span class="character">;</span>
|
||||
<<span class="cwebmacro">Can't replace heading unless level matches</span> <span class="cwebmacronumber">21.3</span>><span class="character">;</span>
|
||||
<span class="functiontext">Sentences::Headings::excise_material_under</span><span class="plain">(</span><span class="identifier">h2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="functiontext">Sentences::Headings::excise_material_under</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">, </span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Can't find heading in the given extension</span> <span class="cwebmacronumber">20.2</span>><span class="character">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Can't find heading in the given extension</span> <span class="cwebmacronumber">21.2</span>><span class="character">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span>
|
||||
|
@ -884,17 +901,17 @@ the parse tree on quite a large scale, and that's just what we do.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::satisfy_individual_heading_dependency is used in <a href="#SP19">§19</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::satisfy_individual_heading_dependency is used in <a href="#SP20">§20</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20_1"></a><b>§20.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading in an unincluded extension</span> <span class="cwebmacronumber">20.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP21_1"></a><b>§21.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading in an unincluded extension</span> <span class="cwebmacronumber">21.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, &(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">));</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfUnincluded</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
|
||||
|
@ -906,9 +923,9 @@ the parse tree on quite a large scale, and that's just what we do.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>To excise, we simply prune the heading's contents from the parse tree,
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b>To excise, we simply prune the heading's contents from the parse tree,
|
||||
though optionally grafting them to another node rather than discarding them
|
||||
altogether.
|
||||
</p>
|
||||
|
@ -929,7 +946,7 @@ elsewhere).
|
|||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>in_place_of_text</span><span class="plain">)) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h2</span><span class="plain"> = </span><span class="functiontext">Sentences::Headings::find_dependent_heading</span><span class="plain">(</span><span class="identifier">hpn</span><span class="plain">-</span><span class="element">>down</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">h2</span><span class="plain">) </span><<span class="cwebmacro">Can't replace heading subordinate to another replaced heading</span> <span class="cwebmacronumber">21.1</span>><span class="character">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">h2</span><span class="plain">) </span><<span class="cwebmacro">Can't replace heading subordinate to another replaced heading</span> <span class="cwebmacronumber">22.1</span>><span class="character">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="functiontext">Sentences::Headings::suppress_dependencies</span><span class="plain">(</span><span class="identifier">hpn</span><span class="plain">);</span>
|
||||
|
@ -959,23 +976,23 @@ elsewhere).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::excise_material_under is used in <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::excise_material_under is used in <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::find_dependent_heading appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::suppress_dependencies appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21_1"></a><b>§21.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading subordinate to another replaced heading</span> <span class="cwebmacronumber">21.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_1"></a><b>§22.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading subordinate to another replaced heading</span> <span class="cwebmacronumber">22.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, &(</span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">));</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">h2</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(3, </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(4, &(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">));</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(4, </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfSubordinate</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
|
||||
|
@ -987,25 +1004,27 @@ elsewhere).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20_2"></a><b>§20.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't find heading in the given extension</span> <span class="cwebmacronumber">20.2</span>> =
|
||||
<p class="inwebparagraph"><a id="SP21_2"></a><b>§21.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't find heading in the given extension</span> <span class="cwebmacronumber">21.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">vt</span><span class="plain">);</span>
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>sentence_declaring</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, &(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">));</span>
|
||||
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(3, </span><span class="identifier">h</span><span class="plain">-</span><span class="element">>in_place_of_text</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_text</span><span class="plain">(4,</span>
|
||||
<span class="string">"unspecified, that is, the extension didn't have a version number"</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Extensions::IDs::match</span><span class="plain">(&(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">), </span><span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">)))</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(4,</span>
|
||||
<span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="functiontext">Extensions::Files::get_version_wn</span><span class="plain">(</span><span class="identifier">ef</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="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Works::match</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">-</span><span class="element">>for_use_with</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">)) {</span>
|
||||
<span class="identifier">VersionNumbers::to_text</span><span class="plain">(</span><span class="identifier">vt</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">version</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(4, </span><span class="identifier">vt</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfUnknown</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
|
||||
|
@ -1013,14 +1032,15 @@ elsewhere).
|
|||
<span class="string">"not seem to have any heading called '%3'. (The version I loaded "</span>
|
||||
<span class="string">"was %4.)"</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">vt</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20_3"></a><b>§20.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading unless level matches</span> <span class="cwebmacronumber">20.3</span>> =
|
||||
<p class="inwebparagraph"><a id="SP21_3"></a><b>§21.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Can't replace heading unless level matches</span> <span class="cwebmacronumber">21.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1035,9 +1055,9 @@ elsewhere).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. World objects under each heading. </b>Every heading must carry with it a linked list of the nametags created in
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. World objects under each heading. </b>Every heading must carry with it a linked list of the nametags created in
|
||||
sentences which belong to it. So when any noun is created, the following
|
||||
is called to let the current sentence's heading know that it has a new
|
||||
friend.
|
||||
|
@ -1072,11 +1092,11 @@ friend.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::name_resolution_data is used in <a href="#SP23">§23</a>, <a href="#SP25">§25</a>, <a href="#SP28_1">§28.1</a>, <a href="#SP29">§29</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::name_resolution_data is used in <a href="#SP24">§24</a>, <a href="#SP26">§26</a>, <a href="#SP29_1">§29.1</a>, <a href="#SP30">§30</a>.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::attach_noun appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b>The following verification checks that every noun is listed
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b>The following verification checks that every noun is listed
|
||||
in the list for exactly one heading. The point of the check is not so much
|
||||
to make sure the tag lists are properly formed, as the code making those
|
||||
is pretty elementary: it's really a test that the source text is well-formed
|
||||
|
@ -1113,7 +1133,7 @@ through a crack.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::verify_divisions appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. The noun search list. </b>Identifying noun phrases is tricky. Many plausible phrases could refer in
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. The noun search list. </b>Identifying noun phrases is tricky. Many plausible phrases could refer in
|
||||
principle to several different instances: "east", for instance, might
|
||||
mean the direction or, say, "east garden". And what if the source
|
||||
mentions many chairs, and now refers simply to "the chair"? This problem
|
||||
|
@ -1176,7 +1196,7 @@ in order that "door" will retain its generic meaning even if, say,
|
|||
"an oak door" is created.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b>This means that, under every heading, the search sequence is different.
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b>This means that, under every heading, the search sequence is different.
|
||||
So for the sake of efficiency we construct a linked list of world
|
||||
objects in priority order the first time we search under a new heading,
|
||||
then simply use that thereafter: we also keep track of the tail of this
|
||||
|
@ -1196,7 +1216,7 @@ use the following definition to iterate through it.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b>The search sequence is, in effect, a cache storing a former computation,
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>The search sequence is, in effect, a cache storing a former computation,
|
||||
and like all caches it can fall out of date if the circumstances change so
|
||||
that the same computation would now produce a different outcome. That can
|
||||
only happen here if a new noun is to be created: the assertion-maker
|
||||
|
@ -1216,7 +1236,7 @@ calls the following routine to let us know.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::disturb appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>Leaving aside the cache, then, we build a list as initially empty, then
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </b>Leaving aside the cache, then, we build a list as initially empty, then
|
||||
all nametags of priority 1 as found by recursively searching headings, then all
|
||||
nametags of priority 2, and so on.
|
||||
</p>
|
||||
|
@ -1226,19 +1246,19 @@ nametags of priority 2, and so on.
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::construct_noun_search_list</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<<span class="cwebmacro">Work out the heading from which we wish to search</span> <span class="cwebmacronumber">27.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Work out the heading from which we wish to search</span> <span class="cwebmacronumber">28.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">h</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">h</span><span class="plain"> == </span><span class="identifier">noun_search_list_valid_for_this_heading</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">rely on the cache</span>
|
||||
|
||||
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">HEADINGS</span><span class="plain">, </span><span class="string">"Rebuilding noun search list from: $H\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">h</span><span class="plain">);</span>
|
||||
|
||||
<<span class="cwebmacro">Start the search list empty</span> <span class="cwebmacronumber">27.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Start the search list empty</span> <span class="cwebmacronumber">28.2</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">=1; </span><span class="identifier">i</span><span class="plain"><=</span><span class="identifier">MAX_NOUN_PRIORITY</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++)</span>
|
||||
<span class="functiontext">Sentences::Headings::build_search_list_from</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
|
||||
<<span class="cwebmacro">Verify that the search list indeed contains every noun just once</span> <span class="cwebmacronumber">27.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Verify that the search list indeed contains every noun just once</span> <span class="cwebmacronumber">28.3</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">noun_search_list_valid_for_this_heading</span><span class="plain"> = </span><span class="identifier">h</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -1248,13 +1268,13 @@ nametags of priority 2, and so on.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::construct_noun_search_list appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27_1"></a><b>§27.1. </b>Basically, we calculate the search list from the point of view of the
|
||||
<p class="inwebparagraph"><a id="SP28_1"></a><b>§28.1. </b>Basically, we calculate the search list from the point of view of the
|
||||
current sentence:
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Work out the heading from which we wish to search</span> <span class="cwebmacronumber">27.1</span>> =
|
||||
<<span class="cwebmacrodefn">Work out the heading from which we wish to search</span> <span class="cwebmacronumber">28.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1267,16 +1287,16 @@ current sentence:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP27">§27</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP28">§28</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27_2"></a><b>§27.2. </b>The pseudo-heading has no list of contents because all objects are created in
|
||||
<p class="inwebparagraph"><a id="SP28_2"></a><b>§28.2. </b>The pseudo-heading has no list of contents because all objects are created in
|
||||
source files, each certainly underneath a File (0) heading, so nothing should
|
||||
ever get that far.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Start the search list empty</span> <span class="cwebmacronumber">27.2</span>> =
|
||||
<<span class="cwebmacrodefn">Start the search list empty</span> <span class="cwebmacronumber">28.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1288,16 +1308,16 @@ ever get that far.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP27">§27</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP28">§28</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27_3"></a><b>§27.3. </b>The potential for disaster if this algorithm should be incorrect is high,
|
||||
<p class="inwebparagraph"><a id="SP28_3"></a><b>§28.3. </b>The potential for disaster if this algorithm should be incorrect is high,
|
||||
so we perform a quick count to see if everything made it onto the list
|
||||
and produce an internal error if not.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Verify that the search list indeed contains every noun just once</span> <span class="cwebmacronumber">27.3</span>> =
|
||||
<<span class="cwebmacrodefn">Verify that the search list indeed contains every noun just once</span> <span class="cwebmacronumber">28.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1317,9 +1337,9 @@ and produce an internal error if not.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP27">§27</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP28">§28</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </b>The following adds all nametags under heading H to the search list, using
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. </b>The following adds all nametags under heading H to the search list, using
|
||||
its own list of contents, and then recurses to add all objects under
|
||||
subheadings of H other than the one which has just recursed up to H. With
|
||||
that done, we recurse up to the superheading of H.
|
||||
|
@ -1360,7 +1380,7 @@ number of nametags in the source text.
|
|||
|
||||
<span class="identifier">LOOP_OVER_NOUNS_UNDER</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Nouns::priority</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">) == </span><span class="identifier">p</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Add tag to the end of the search list</span> <span class="cwebmacronumber">28.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add tag to the end of the search list</span> <span class="cwebmacronumber">29.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="comment">recurse downwards through subordinate headings, other than the way we came up</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">subhead</span><span class="plain"> = </span><span class="identifier">within</span><span class="plain">-</span><span class="element">>child_heading</span><span class="plain">; </span><span class="identifier">subhead</span><span class="plain">; </span><span class="identifier">subhead</span><span class="plain"> = </span><span class="identifier">subhead</span><span class="plain">-</span><span class="element">>next_heading</span><span class="plain">)</span>
|
||||
|
@ -1375,10 +1395,10 @@ number of nametags in the source text.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::build_search_list_from is used in <a href="#SP27">§27</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::build_search_list_from is used in <a href="#SP28">§28</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP28_1"></a><b>§28.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add tag to the end of the search list</span> <span class="cwebmacronumber">28.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP29_1"></a><b>§29.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add tag to the end of the search list</span> <span class="cwebmacronumber">29.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1396,9 +1416,9 @@ number of nametags in the source text.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP28">§28</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP29">§29</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. </b>The search list is used for finding best matches in a particular order, the
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. </b>The search list is used for finding best matches in a particular order, the
|
||||
order being used to break tie-breaks. Note that we return <code class="display"><span class="extract">NULL</span></code> if no noun
|
||||
in the search list has a positive score.
|
||||
</p>
|
||||
|
@ -1426,7 +1446,7 @@ in the search list has a positive score.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::highest_scoring_noun_searched appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. Handling headings during the main traverses. </b>Here's what we do when we run into a heading, as we look through the
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. Handling headings during the main traverses. </b>Here's what we do when we run into a heading, as we look through the
|
||||
assertions in the source text: nothing, except to wipe out any meanings of
|
||||
words like "it" left over from previous sentences. Headings are for
|
||||
organisation, and are not directly functional in themselves.
|
||||
|
@ -1446,7 +1466,7 @@ organisation, and are not directly functional in themselves.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::handle_heading appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. Describing the heading structure, 1: to the debugging log. </b>Finally, three ways to describe the run of headings: to the debugging log,
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. Describing the heading structure, 1: to the debugging log. </b>Finally, three ways to describe the run of headings: to the debugging log,
|
||||
to the index of the project, and to a freestanding XML file.
|
||||
</p>
|
||||
|
||||
|
@ -1469,7 +1489,7 @@ to the index of the project, and to a freestanding XML file.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::log is used in 1/cm (<a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </b>And here we log the whole heading tree by recursing through it, and
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. </b>And here we log the whole heading tree by recursing through it, and
|
||||
surreptitiously check that it is correctly formed at the same time.
|
||||
</p>
|
||||
|
||||
|
@ -1495,11 +1515,11 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::log_all_headings is used in <a href="#SP27_3">§27.3</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::log_all_headings is used in <a href="#SP28_3">§28.3</a>.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::log_headings_recursively appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. Describing the heading structure, 2: to the index. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP34"></a><b>§34. Describing the heading structure, 2: to the index. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
@ -1521,7 +1541,7 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="plain">(</span><span class="identifier">ce</span><span class="plain">-</span><span class="element">>heading_entered</span><span class="plain">-</span><span class="element">>level</span><span class="plain"> < </span><span class="identifier">min_positive_level</span><span class="plain">))</span>
|
||||
<span class="identifier">min_positive_level</span><span class="plain"> = </span><span class="identifier">ce</span><span class="plain">-</span><span class="element">>heading_entered</span><span class="plain">-</span><span class="element">>level</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ce</span><span class="plain">, </span><span class="reserved">contents_entry</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Index this entry in the contents</span> <span class="cwebmacronumber">33.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Index this entry in the contents</span> <span class="cwebmacronumber">34.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">contents_entry</span><span class="plain">) == 1) {</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">"(This would look more like a contents page if the source text "</span>
|
||||
|
@ -1538,8 +1558,8 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
|
||||
<p class="endnote">The function Sentences::Headings::index appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP33_1"></a><b>§33.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Index this entry in the contents</span> <span class="cwebmacronumber">33.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP34_1"></a><b>§34.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Index this entry in the contents</span> <span class="cwebmacronumber">34.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1582,14 +1602,14 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"li"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"ul"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">List all the objects and kinds created under the given heading, one tap stop deeper</span> <span class="cwebmacronumber">33.1.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">List all the objects and kinds created under the given heading, one tap stop deeper</span> <span class="cwebmacronumber">34.1.2</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP33">§33</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP34">§34</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP33_1_1"></a><b>§33.1.1. </b>We index only headings of level 1 and up — so, not the pseudo-heading or the
|
||||
<p class="inwebparagraph"><a id="SP34_1_1"></a><b>§34.1.1. </b>We index only headings of level 1 and up — so, not the pseudo-heading or the
|
||||
File (0) ones — and which are not within any extensions — so, are in the
|
||||
primary source text written by the user.
|
||||
</p>
|
||||
|
@ -1627,16 +1647,16 @@ primary source text written by the user.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::index_heading_recursively is used in <a href="#SP33">§33</a>.</p>
|
||||
<p class="endnote">The function Sentences::Headings::index_heading_recursively is used in <a href="#SP34">§34</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP33_1_2"></a><b>§33.1.2. </b>We skip any objects or kinds without names (i.e., whose <code class="display"><span class="extract">creator</span></code> is null).
|
||||
<p class="inwebparagraph"><a id="SP34_1_2"></a><b>§34.1.2. </b>We skip any objects or kinds without names (i.e., whose <code class="display"><span class="extract">creator</span></code> is null).
|
||||
The rest appear in italic type, and without links to source text since this
|
||||
in practice strews distractingly many orange berries across the page.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">List all the objects and kinds created under the given heading, one tap stop deeper</span> <span class="cwebmacronumber">33.1.2</span>> =
|
||||
<<span class="cwebmacrodefn">List all the objects and kinds created under the given heading, one tap stop deeper</span> <span class="cwebmacronumber">34.1.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1658,9 +1678,9 @@ in practice strews distractingly many orange berries across the page.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP33_1">§33.1</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP34_1">§34.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP34"></a><b>§34. Describing the heading structure, 3: to a freestanding XML file. </b>This is provided as a convenience to the application using Inform, which may want
|
||||
<p class="inwebparagraph"><a id="SP35"></a><b>§35. Describing the heading structure, 3: to a freestanding XML file. </b>This is provided as a convenience to the application using Inform, which may want
|
||||
to have a pull-down menu or similar gadget allowing the user to jump to a given
|
||||
heading. This tells the interface where every heading is, thus saving it from
|
||||
having to parse the source.
|
||||
|
@ -1676,22 +1696,23 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::write_as_xml</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">filename_of_headings</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open headings file"</span><span class="plain">, </span><span class="identifier">filename_of_headings</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext">Task::xml_headings_file</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open headings file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Sentences::Headings::write_headings_as_xml_inner</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::Headings::write_headings_as_xml_inner</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
||||
<span class="reserved">heading</span><span class="plain"> *</span><span class="identifier">h</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write DTD indication for XML headings file</span> <span class="cwebmacronumber">34.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write DTD indication for XML headings file</span> <span class="cwebmacronumber">35.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<plist version=\</span><span class="plain">"</span><span class="string">1.0\</span><span class="plain">"</span><span class="string">><dict>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<key>Application Version</key><string>%B (build %B)</string>\</span><span class="plain">n</span><span class="string">"</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="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">heading</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<key>%d</key><dict>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">h</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
||||
<span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the dictionary of properties for a single heading</span> <span class="cwebmacronumber">34.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the dictionary of properties for a single heading</span> <span class="cwebmacronumber">35.2</span>><span class="plain">;</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</dict>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -1702,16 +1723,16 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::write_as_xml is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Sentences::Headings::write_as_xml is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Headings::write_headings_as_xml_inner appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP34_1"></a><b>§34.1. </b>We use a convenient Apple DTD:
|
||||
<p class="inwebparagraph"><a id="SP35_1"></a><b>§35.1. </b>We use a convenient Apple DTD:
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Write DTD indication for XML headings file</span> <span class="cwebmacronumber">34.1</span>> =
|
||||
<<span class="cwebmacrodefn">Write DTD indication for XML headings file</span> <span class="cwebmacronumber">35.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1723,9 +1744,9 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP34">§34</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP35">§35</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP34_2"></a><b>§34.2. </b>Note that a level of 0, and a title of <code class="display"><span class="extract">--</span></code>, signifies a File (0) level
|
||||
<p class="inwebparagraph"><a id="SP35_2"></a><b>§35.2. </b>Note that a level of 0, and a title of <code class="display"><span class="extract">--</span></code>, signifies a File (0) level
|
||||
heading: external tools can probably ignore such records. Similarly, it is
|
||||
unlikely that they will ever see a record without a "Filename" key —
|
||||
this would mean a heading arising from text created internally within Inform,
|
||||
|
@ -1735,7 +1756,7 @@ but should this arise then the best recourse is to ignore the heading.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Write the dictionary of properties for a single heading</span> <span class="cwebmacronumber">34.2</span>> =
|
||||
<<span class="cwebmacrodefn">Write the dictionary of properties for a single heading</span> <span class="cwebmacronumber">35.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1754,7 +1775,7 @@ but should this arise then the best recourse is to ignore the heading.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP34">§34</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP35">§35</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="7-ss.html">Back to 'Structural Sentences'</a></li><li><a href="7-ns.html">Continue with 'Nonstructural Sentences'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -152,7 +152,7 @@ in quick succession, the second run-through does nothing.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::VPs::traverse is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Sentences::VPs::traverse is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Sentences::VPs::visit appears nowhere else.</p>
|
||||
|
||||
|
@ -678,7 +678,7 @@ new action.
|
|||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ACCEPT_SMFT</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">translation</span><span class="plain">-</span><span class="identifier">target</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">>(</span><span class="identifier">O2W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="constant">verb_id_ANNOT</span><span class="plain">, </span><span class="constant">SPECIAL_MEANING_VB</span><span class="plain">);</span>
|
||||
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = (</span><span class="reserved">natural_language</span><span class="plain"> *) (<<</span><span class="identifier">rp</span><span class="plain">>>);</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = (</span><span class="identifier">inform_language</span><span class="plain"> *) (<<</span><span class="identifier">rp</span><span class="plain">>>);</span>
|
||||
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">definite</span><span class="plain">>(</span><span class="identifier">SW</span><span class="plain">);</span>
|
||||
<span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
||||
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">articled</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">);</span>
|
||||
|
|
|
@ -90,7 +90,7 @@ not be treated as a possessive, and expunge them.
|
|||
|
||||
<p class="endnote">The function Sentences::Rearrangement::further_material appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::Rearrangement::tidy_up_ofs_and_froms is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Sentences::Rearrangement::tidy_up_ofs_and_froms is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The following array is used only by Traversals 1 to 3, and is how we
|
||||
remember direction names.
|
||||
|
|
|
@ -41,7 +41,7 @@ constructs them:
|
|||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_verb_form</span><span class="plain">, </span><span class="identifier">verb_form</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">control_structure_used</span><span class="plain">, </span><span class="reserved">control_structure_phrase</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">creation_proposition</span><span class="plain">, </span><span class="reserved">pcalc_prop</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">defn_language</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">defn_language</span><span class="plain">, </span><span class="identifier">inform_language</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">embodying_heading</span><span class="plain">, </span><span class="reserved">heading</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">end_control_structure_used</span><span class="plain">, </span><span class="reserved">control_structure_phrase</span><span class="plain">)</span>
|
||||
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">evaluation</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain">)</span>
|
||||
|
@ -103,7 +103,7 @@ to provide their get and set functions:
|
|||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">constant_verb_form</span><span class="plain">, </span><span class="identifier">verb_form</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">control_structure_used</span><span class="plain">, </span><span class="reserved">control_structure_phrase</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">creation_proposition</span><span class="plain">, </span><span class="reserved">pcalc_prop</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">defn_language</span><span class="plain">, </span><span class="reserved">natural_language</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">defn_language</span><span class="plain">, </span><span class="identifier">inform_language</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">embodying_heading</span><span class="plain">, </span><span class="reserved">heading</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">end_control_structure_used</span><span class="plain">, </span><span class="reserved">control_structure_phrase</span><span class="plain">)</span>
|
||||
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">evaluation</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain">)</span>
|
||||
|
@ -290,7 +290,7 @@ goes. The annotations used are identified by nonzero ID numbers, as follows:
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">converted_SN_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: marking descriptions</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">creation_proposition_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">pcalc_prop</span></code>: proposition which newly created value satisfies</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">creation_site_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: whether an instance was created from this node</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">defn_language_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">natural_language</span></code>: what language this definition is in</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">defn_language_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">inform_language</span></code>: what language this definition is in</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">embodying_heading_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">heading</span></code>: for parse nodes of headings</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">end_control_structure_used_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">control_structure_phrase</span></code>: for CODE BLOCK nodes only</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">epistemological_status_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: a bitmap of results from checking an ambiguous reading</span>
|
||||
|
@ -862,7 +862,7 @@ be such that their head nodes each pass this test:
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::write_to_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">ParseTree::write_to_file</span><span class="plain">(</span><span class="identifier">filename_of_parse_tree</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::write_to_file</span><span class="plain">(</span><span class="functiontext">Task::parse_tree_file</span><span class="plain">());</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::plant_parse_tree</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">ParseTree::plant_parse_tree</span><span class="plain">();</span>
|
||||
|
@ -879,11 +879,11 @@ be such that their head nodes each pass this test:
|
|||
|
||||
<p class="endnote">The function ParseTreeUsage::write_to_file appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function ParseTreeUsage::plant_parse_tree is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function ParseTreeUsage::plant_parse_tree is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function ParseTreeUsage::verify is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function ParseTreeUsage::verify is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function ParseTreeUsage::write_main_source_to_log is used in 1/mr (<a href="1-mr.html#SP4_18">§4.18</a>).</p>
|
||||
<p class="endnote">The function ParseTreeUsage::write_main_source_to_log is used in 1/mr (<a href="1-mr.html#SP1_5">§1.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b></p>
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ on childless nodes, it cannot ever act on the same node twice.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::register_recently_lexed_phrases is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>), 5/lp (<a href="5-lp.html#SP40">§40</a>, <a href="5-lp.html#SP41">§41</a>), 7/oaf (<a href="7-oaf.html#SP3">§3</a>), 15/ma (<a href="15-ma.html#SP11_4">§11.4</a>).</p>
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::register_recently_lexed_phrases is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>), 5/lp (<a href="5-lp.html#SP40">§40</a>, <a href="5-lp.html#SP41">§41</a>), 7/oaf (<a href="7-oaf.html#SP3">§3</a>), 15/ma (<a href="15-ma.html#SP11_4">§11.4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Command nodes are demoted to be children of routine nodes:
|
||||
</p>
|
||||
|
@ -2181,7 +2181,7 @@ are added, they can fairly simply be put here.
|
|||
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::csp_new appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::create_standard_csps is used in 1/mr (<a href="1-mr.html#SP4_9">§4.9</a>).</p>
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::create_standard_csps is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Sentences::RuleSubtrees::log_control_structure is used in 7/ptu (<a href="7-ptu.html#SP17_2">§17.2</a>).</p>
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '7/ss' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Structural Sentences</b></li></ul><p class="purpose">To parse structurally important sentences.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP7">§7. Sentence division</a></li><li><a href="#SP8">§8. Sentence breaking</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP2">§2. Sentence division</a></li><li><a href="#SP6">§6. Sentence breaking</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b></p>
|
||||
|
||||
|
@ -20,7 +20,13 @@
|
|||
<span class="definitionkeyword">define</span> <span class="constant">list_node_type</span><span class="plain"> </span><span class="constant">ROUTINE_NT</span>
|
||||
<span class="definitionkeyword">define</span> <span class="constant">list_entry_node_type</span><span class="plain"> </span><span class="constant">INVOCATION_LIST_NT</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Sentence division. </b>Sentence division can happen either early in Inform's run, when the vast bulk
|
||||
of the source text is read, or at intermittent periods later when fresh text
|
||||
is generated internally. New sentences need to be treated slightly differently
|
||||
in these cases, so this seems as good a point as any to define the routine
|
||||
which the <code class="display"><span class="extract">.i6t</span></code> interpreter calls when it wants to signal that the source
|
||||
text has now officially been read.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
|
@ -28,6 +34,11 @@
|
|||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">text_loaded_from_source</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">StructuralSentences::declare_source_loaded</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_loaded_from_source</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">StructuralSentences::annotate_new_sentence</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">new</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">text_loaded_from_source</span><span class="plain">) {</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">new</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
|
@ -38,6 +49,8 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function StructuralSentences::declare_source_loaded is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function StructuralSentences::annotate_new_sentence appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b></p>
|
||||
|
@ -67,7 +80,7 @@
|
|||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">StructuralSentences::new_beginend</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">new</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">StructuralSentences::new_beginend</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">new</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">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">new</span><span class="plain">) == </span><span class="identifier">BEGINHERE_NT</span><span class="plain">)</span>
|
||||
<span class="functiontext">Extensions::Inclusion::check_begins_here</span><span class="plain">(</span><span class="identifier">new</span><span class="plain">, </span><span class="identifier">sfsm_extension</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">new</span><span class="plain">) == </span><span class="identifier">ENDHERE_NT</span><span class="plain">)</span>
|
||||
|
@ -98,32 +111,7 @@
|
|||
|
||||
<p class="endnote">The function StructuralSentences::new_language appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">EXTENSION_FILE_TYPE</span><span class="plain"> </span><span class="reserved">extension_file</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Sentence division. </b>Sentence division can happen either early in Inform's run, when the vast bulk
|
||||
of the source text is read, or at intermittent periods later when fresh text
|
||||
is generated internally. New sentences need to be treated slightly differently
|
||||
in these cases, so this seems as good a point as any to define the routine
|
||||
which the <code class="display"><span class="extract">.i6t</span></code> interpreter calls when it wants to signal that the source
|
||||
text has now officially been read.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">StructuralSentences::declare_source_loaded</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_loaded_from_source</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function StructuralSentences::declare_source_loaded is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Sentence breaking. </b>The <code class="display"><span class="extract">Sentences::break</span></code> routine is used for long stretches of text,
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Sentence breaking. </b>The <code class="display"><span class="extract">Sentences::break</span></code> routine is used for long stretches of text,
|
||||
normally entire files. The following provides a way for the <code class="display"><span class="extract">.i6t</span></code>
|
||||
interpreter to apply it to the whole text as lexed, which provides the
|
||||
original basis for parsing. (This won't be the entire source text,
|
||||
|
@ -137,6 +125,7 @@ though: extensions, including the Standard Rules, have yet to be read.)
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">language_definition_top</span><span class="plain"> >= </span><span class="identifier">n</span><span class="plain">) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">language_definition_top</span><span class="plain">+1;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">doc_references_top</span><span class="plain"> >= </span><span class="identifier">n</span><span class="plain">) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">doc_references_top</span><span class="plain">+1;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">language_scan_top</span><span class="plain"> >= </span><span class="identifier">n</span><span class="plain">) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">language_scan_top</span><span class="plain">+1;</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">lexer_wordcount</span><span class="plain">-1), </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">);</span>
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">implicit_heading</span><span class="plain"> = </span><span class="identifier">ParseTree::new</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">);</span>
|
||||
|
@ -150,9 +139,9 @@ though: extensions, including the Standard Rules, have yet to be read.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function StructuralSentences::break_source is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function StructuralSentences::break_source is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Sentences in the source text are of five categories: dividing sentences,
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>Sentences in the source text are of five categories: dividing sentences,
|
||||
which divide up the source into segments; structural sentences, which split
|
||||
the source into different forms (standard text, tables, equations, I6 matter,
|
||||
and so on); nonstructural sentences, which make grammatical definitions and
|
||||
|
@ -206,14 +195,14 @@ source text.
|
|||
<span class="identifier">section</span><span class="plain"> ... ==> 5</span>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">end</span><span class="plain">-</span><span class="identifier">marker</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">> ::=</span>
|
||||
<span class="plain">... </span><span class="identifier">begin</span><span class="plain">/</span><span class="identifier">begins</span><span class="plain"> </span><span class="identifier">here</span><span class="plain"> | ==> -1; </span><<span class="cwebmacro">Check we can begin an extension here</span> <span class="cwebmacronumber">9.1</span>><span class="plain">;</span>
|
||||
<span class="plain">... </span><span class="identifier">end</span><span class="plain">/</span><span class="identifier">ends</span><span class="plain"> </span><span class="identifier">here</span><span class="plain"> ==> -2; </span><<span class="cwebmacro">Check we can end an extension here</span> <span class="cwebmacronumber">9.2</span>><span class="plain">;</span>
|
||||
<span class="plain">... </span><span class="identifier">begin</span><span class="plain">/</span><span class="identifier">begins</span><span class="plain"> </span><span class="identifier">here</span><span class="plain"> | ==> -1; </span><<span class="cwebmacro">Check we can begin an extension here</span> <span class="cwebmacronumber">7.1</span>><span class="plain">;</span>
|
||||
<span class="plain">... </span><span class="identifier">end</span><span class="plain">/</span><span class="identifier">ends</span><span class="plain"> </span><span class="identifier">here</span><span class="plain"> ==> -2; </span><<span class="cwebmacro">Check we can end an extension here</span> <span class="cwebmacronumber">7.2</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1"></a><b>§9.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Check we can begin an extension here</span> <span class="cwebmacronumber">9.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Check we can begin an extension here</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -229,16 +218,16 @@ source text.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_2"></a><b>§9.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Check we can end an extension here</span> <span class="cwebmacronumber">9.2</span>> =
|
||||
<p class="inwebparagraph"><a id="SP7_2"></a><b>§7.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Check we can end an extension here</span> <span class="cwebmacronumber">7.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">sfsm_extension_position</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtEndsWithoutBegins</span><span class="plain">),</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">),</span>
|
||||
<span class="identifier">sfsm_extension</span><span class="plain">, </span><span class="string">"has an 'ends here' with nothing having begun"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 2: </span><span class="identifier">sfsm_extension_position</span><span class="plain">++; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 3: </span><span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMultipleEndsHere</span><span class="plain">),</span>
|
||||
|
@ -248,7 +237,7 @@ source text.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP_1"></a><b>§.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Detect a dividing sentence</span> <span class="cwebmacronumber">.1</span>> =
|
||||
|
@ -274,7 +263,7 @@ source text.
|
|||
|
||||
<p class="endnote">This code is never used.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Structural sentences are defined as follows. (The asterisk notation isn't
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>Structural sentences are defined as follows. (The asterisk notation isn't
|
||||
known to most Inform users: it increases output to the debugging log.)
|
||||
</p>
|
||||
|
||||
|
@ -294,7 +283,7 @@ known to most Inform users: it increases output to the debugging log.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>Properly speaking, despite the definition above, language modifying sentences
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Properly speaking, despite the definition above, language modifying sentences
|
||||
are nonstructural. So what are they doing here? The answer is that we need to
|
||||
read them early on, because they affect the way that they parse all other
|
||||
sentences. Whereas other nonstructural sentences can wait, these can't.
|
||||
|
@ -309,7 +298,7 @@ sentences. Whereas other nonstructural sentences can wait, these can't.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
|
@ -371,22 +360,22 @@ sentences. Whereas other nonstructural sentences can wait, these can't.
|
|||
<span class="identifier">Problems::issue_problem_end</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="identifier">ExtNoBeginsHere_SYNERROR</span><span class="plain">: {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = (</span><span class="reserved">extension_file</span><span class="plain"> *) </span><span class="identifier">ref</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="identifier">inform_extension</span><span class="plain"> *) </span><span class="identifier">ref</span><span class="plain">;</span>
|
||||
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtNoBeginsHere</span><span class="plain">),</span>
|
||||
<span class="identifier">ef</span><span class="plain">, </span><span class="string">"has no 'begins here' sentence"</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">, </span><span class="string">"has no 'begins here' sentence"</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtNoEndsHere_SYNERROR</span><span class="plain">: {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = (</span><span class="reserved">extension_file</span><span class="plain"> *) </span><span class="identifier">ref</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="identifier">inform_extension</span><span class="plain"> *) </span><span class="identifier">ref</span><span class="plain">;</span>
|
||||
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtNoEndsHere</span><span class="plain">),</span>
|
||||
<span class="identifier">ef</span><span class="plain">, </span><span class="string">"has no 'ends here' sentence"</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">, </span><span class="string">"has no 'ends here' sentence"</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtSpuriouslyContinues_SYNERROR</span><span class="plain">: {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = (</span><span class="reserved">extension_file</span><span class="plain"> *) </span><span class="identifier">ref</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="identifier">inform_extension</span><span class="plain"> *) </span><span class="identifier">ref</span><span class="plain">;</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Spurious text: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtSpuriouslyContinues</span><span class="plain">),</span>
|
||||
<span class="identifier">ef</span><span class="plain">, </span><span class="string">"continues after the 'ends here' sentence"</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">, </span><span class="string">"continues after the 'ends here' sentence"</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingOverLine_SYNERROR</span><span class="plain">:</span>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '8/ie' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#8">Chapter 8: Extensions</a></li><li><b>Including Extensions</b></li></ul><p class="purpose">To fulfill requests to include extensions, adding their material to the parse tree as needed, and removing INCLUDE nodes.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP5">§5. Extension loading</a></li><li><a href="#SP6">§6. Parsing extension version numbers</a></li><li><a href="#SP7">§7. Checking the begins here and ends here sentences</a></li><li><a href="#SP11">§11. Sentence handlers for begins here and ends here</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP5">§5. Extension loading</a></li><li><a href="#SP7">§7. Checking the begins here and ends here sentences</a></li><li><a href="#SP11">§11. Sentence handlers for begins here and ends here</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>At this point in the narrative of a typical run of Inform, we have read in the
|
||||
source text supplied by the user. The lexer automatically prefaced this with
|
||||
|
@ -58,7 +58,7 @@ guaranteed to be no INCLUDE nodes remaining in the parse tree.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Inclusion::traverse is used in 1/mr (<a href="1-mr.html#SP4_10">§4.10</a>).</p>
|
||||
<p class="endnote">The function Extensions::Inclusion::traverse is used in 1/htc (<a href="1-htc.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::Inclusion::visit appears nowhere else.</p>
|
||||
|
||||
|
@ -200,12 +200,26 @@ parse tree.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">version_word</span><span class="plain"> >= 0)</span>
|
||||
<span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="identifier">version_word</span><span class="plain">); </span> <span class="comment">this checks the formatting of the version number</span>
|
||||
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">requested_extension</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Extensions::Inclusion::load</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">version_word</span><span class="plain">, </span><span class="identifier">RW</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">exft</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">exfa</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">exft</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">exfa</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_work</span><span class="plain"> *</span><span class="identifier">work</span><span class="plain"> = </span><span class="identifier">Works::new</span><span class="plain">(</span><span class="identifier">extension_genre</span><span class="plain">, </span><span class="identifier">exft</span><span class="plain">, </span><span class="identifier">exfa</span><span class="plain">);</span>
|
||||
<span class="identifier">Works::add_to_database</span><span class="plain">(</span><span class="identifier">work</span><span class="plain">, </span><span class="identifier">LOADED_WDBC</span><span class="plain">);</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">min</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">version_word</span><span class="plain"> >= 0) </span><span class="identifier">min</span><span class="plain"> = </span><span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="identifier">version_word</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="identifier">Requirements::new</span><span class="plain">(</span><span class="identifier">work</span><span class="plain">, </span><span class="identifier">min</span><span class="plain">, </span><span class="identifier">VersionNumbers::null</span><span class="plain">());</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">exft</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">exfa</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">requested_extension</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain">) {</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">requested_extension</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain">, </span><span class="identifier">requested_extension</span><span class="plain">);</span>
|
||||
<span class="identifier">requested_extension</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</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="functiontext">Extensions::Inclusion::load</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) {</span>
|
||||
<span class="identifier">Extensions::set_inclusion_sentence</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::set_VM_text</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">RW</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">E</span><span class="plain">) && (</span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">body_text_unbroken</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">body_text</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-></span><span class="identifier">body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -218,23 +232,19 @@ parse tree.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="functiontext">Extensions::Inclusion::load</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">T</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">version_word</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">VMW</span><span class="plain">) {</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>author_text</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">)) && (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">)))</span>
|
||||
<<span class="cwebmacro">This is an extension already loaded, so note any version number hike and return</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="functiontext">Extensions::Inclusion::load</span><span class="plain">(</span><span class="identifier">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">) {</span>
|
||||
<span class="functiontext">NaturalLanguages::scan</span><span class="plain">(); </span> <span class="comment">to avoid wording from those interleaving with extension wording</span>
|
||||
<<span class="cwebmacro">Do not load the same extension work twice</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">Extensions::Files::new</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">VMW</span><span class="plain">, </span><span class="identifier">version_word</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0)</span>
|
||||
<<span class="cwebmacro">Read the extension file into the lexer, and break it into body and documentation</span> <span class="cwebmacronumber">5.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ef</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="identifier">NULL</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read the extension file into the lexer, and break it into body and documentation</span> <span class="cwebmacronumber">5.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Inclusion::load is used in <a href="#SP4_1">§4.1</a>, 8/ed2 (<a href="8-ed2.html#SP3_1">§3.1</a>).</p>
|
||||
<p class="endnote">The function Extensions::Inclusion::load is used in <a href="#SP4_1">§4.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b>Note that we ignore a request for an extension which has already been
|
||||
loaded, except if the new request ups the ante in terms of the minimum
|
||||
|
@ -255,17 +265,17 @@ can't know at load time what we will ultimately require.)
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">This is an extension already loaded, so note any version number hike and return</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
<<span class="cwebmacrodefn">Do not load the same extension work twice</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>min_version_needed</span><span class="plain">) <</span>
|
||||
<span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="identifier">version_word</span><span class="plain">)) {</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>min_version_needed</span><span class="plain"> = </span><span class="identifier">version_word</span><span class="plain">;</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>inclusion_sentence</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ef</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="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">inform_extension</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Requirements::meets</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Extensions::must_satisfy</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -283,187 +293,113 @@ trap-door into Read Source Text, to seek and open the file.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">5.2.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</span><span class="plain">();</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="functiontext">SourceFiles::read_extension_source_text</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">census_mode</span><span class="plain">)) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ORIGIN_WAS_MATERIALS_EXTENSIONS_AREA</span><span class="plain">:</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ORIGIN_WAS_USER_EXTENSIONS_AREA</span><span class="plain">:</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">FALSE</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">ORIGIN_WAS_BUILT_IN_EXTENSIONS_AREA</span><span class="plain">:</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">TRUE</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="comment">which can happen if the extension file cannot be found</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found_to_be_malformed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">req</span><span class="plain">-></span><span class="identifier">allow_malformed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">inbuild_search_result</span><span class="plain">);</span>
|
||||
<span class="identifier">Nests::search_for</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="identifier">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_search_result</span><span class="plain"> *</span><span class="identifier">search_result</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">, </span><span class="identifier">inbuild_search_result</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="identifier">E</span><span class="plain"> = </span><span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">origin</span><span class="plain"> = </span><span class="identifier">Nests::get_tag</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">-></span><span class="identifier">nest</span><span class="plain">);</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">origin</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MATERIALS_NEST_TAG</span><span class="plain">:</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXTERNAL_NEST_TAG</span><span class="plain">:</span>
|
||||
<span class="identifier">E</span><span class="plain">-></span><span class="identifier">loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">FALSE</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="identifier">INTERNAL_NEST_TAG</span><span class="plain">:</span>
|
||||
<span class="identifier">E</span><span class="plain">-></span><span class="identifier">loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">LinkedLists::len</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">errors_reading_source_text</span><span class="plain">) > 0) {</span>
|
||||
<span class="functiontext">SourceFiles::issue_problems_arising</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">found_to_be_malformed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found_to_be_malformed</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">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><<span class="cwebmacro">Issue a cannot-find problem</span> <span class="cwebmacronumber">5.2.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="functiontext">SourceFiles::read</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">EXW</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</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">EXW</span><span class="plain">)) </span><<span class="cwebmacro">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">5.2.3</span>><span class="character">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_2_1"></a><b>§5.2.1. </b>We concoct a textual synopsis in the form
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">"Pantomime Sausages by Mr Punch"</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">to be used by <code class="display"><span class="extract">SourceFiles::read_extension_source_text</span></code> for printing to <code class="display"><span class="extract">stdout</span></code>. Since
|
||||
we dare not assume <code class="display"><span class="extract">stdout</span></code> can manage characters outside the basic ASCII
|
||||
range, we flatten them from general ISO to plain ASCII.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">5.2.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP5_2_1"></a><b>§5.2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue a cannot-find problem</span> <span class="cwebmacronumber">5.2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">, </span><span class="string">"%+W by %+W"</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">)</span>
|
||||
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">,</span>
|
||||
<span class="identifier">Characters::make_filename_safe</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">)));</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5_2">§5.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_2_2"></a><b>§5.2.2. </b>If an extension file contains the special text (outside literal mode) of
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">---- Documentation ----</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">then this is taken as the end of the Inform source, and the beginning of a
|
||||
snippet of documentation about the extension; text from that point on is
|
||||
saved until later, but not broken into sentences for the parse tree, and it
|
||||
is therefore invisible to the rest of Inform. If this division line is not
|
||||
present then the extension contains only body source and no documentation.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">> ::=</span>
|
||||
<span class="plain">*** ---- </span><span class="identifier">documentation</span><span class="plain"> ---- ... | ==> </span><span class="identifier">TRUE</span>
|
||||
<span class="plain">... ==> </span><span class="identifier">FALSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_2_3"></a><b>§5.2.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">5.2.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>(</span><span class="identifier">EXW</span><span class="plain">);</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>documentation_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span> <span class="comment">mark this to be sentence-broken</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5_2">§5.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Parsing extension version numbers. </b>Extensions can have versions in the form N/DDDDDD, a format which was chosen
|
||||
for sentimental reasons: IF enthusiasts know it well from the banner text of
|
||||
the Infocom titles of the 1980s. This story file, for instance, was compiled
|
||||
at the time of the Reykjavik summit between Presidents Gorbachev and Reagan:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">Moonmist</span>
|
||||
<span class="plain">Infocom interactive fiction - a mystery story</span>
|
||||
<span class="plain">Copyright (c) 1986 by Infocom, Inc. All rights reserved.</span>
|
||||
<span class="plain">Moonmist is a trademark of Infocom, Inc.</span>
|
||||
<span class="plain">Release number 9 / Serial number 861022</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">Story file collectors customarily abbreviate this in catalogues to <code class="display"><span class="extract">9/861022</span></code>.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">In our scheme, DDDDDD can be omitted (in which case so must the slash be).
|
||||
Spacing is not allowed around the slash (if present), so the version number
|
||||
always occupies a single lexical word.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The following routine parses the version number at word <code class="display"><span class="extract">vwn</span></code> to give an
|
||||
non-negative integer — in fact it really just construes the whole thing,
|
||||
with the slash removed, as a 7-digit number — in such a way that an earlier
|
||||
version always has a lower integer than a later one. It is legal for <code class="display"><span class="extract">vwn</span></code>
|
||||
to be -1, which means "no version number quoted", and evaluates as
|
||||
0 — corresponding to <code class="display"><span class="extract">0/000000</span></code>, lower than the lowest version number it is
|
||||
legal to quote explicitly, which is <code class="display"><span class="extract">1</span></code>. (It follows that requiring no
|
||||
version in particular is equivalent to requiring <code class="display"><span class="extract">0/000000</span></code> or better, since
|
||||
every extension passes that test.)
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">In order that the numerical form of a version number should be a signed
|
||||
32-bit integer which does not overflow, we require that the release number
|
||||
<code class="display"><span class="extract">N</span></code> be at most 999. It could in fact rise to 2146 without incident, but
|
||||
it seems cleaner to constrain the number of digits than the value.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">define</span> <span class="constant">MAX_VERSION_NUMBER_LENGTH</span><span class="plain"> 10 </span> <span class="comment">for <code class="display"><span class="extract">999/991231</span></code></span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">vwn</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="identifier">rv</span><span class="plain">, </span><span class="identifier">slashes</span><span class="plain"> = 0, </span><span class="identifier">digits</span><span class="plain"> = 0, </span><span class="identifier">slash_at</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, *</span><span class="identifier">q</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">vwn</span><span class="plain"> == -1) </span><span class="reserved">return</span><span class="plain"> 0; </span> <span class="comment">an unspecified version equates to <code class="display"><span class="extract">0/000000</span></code></span>
|
||||
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">vwn</span><span class="plain">); </span><span class="identifier">q</span><span class="plain"> = </span><span class="identifier">p</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">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != 0; </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="identifier">slashes</span><span class="plain">++; </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> == 0) || (</span><span class="identifier">slashes</span><span class="plain"> > 1)) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">Malformed</span><span class="plain">;</span>
|
||||
<span class="identifier">slash_at</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">q</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="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (!(</span><span class="identifier">Characters::isdigit</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">goto</span><span class="plain"> </span><span class="identifier">Malformed</span><span class="plain">;</span>
|
||||
<span class="identifier">digits</span><span class="plain">++;</span>
|
||||
<span class="identifier">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req2</span><span class="plain"> = </span><span class="identifier">Requirements::any_version_of</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">inbuild_search_result</span><span class="plain">);</span>
|
||||
<span class="identifier">Nests::search_for</span><span class="plain">(</span><span class="identifier">req2</span><span class="plain">, </span><span class="identifier">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">LinkedLists::len</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">) == 0) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Author: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Title: %W\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">title</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BogusExtension</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"I can't find the extension requested by: %1. %P"</span>
|
||||
<span class="string">"You can get hold of extensions which people have made public at "</span>
|
||||
<span class="string">"the Inform website, www.inform7.com, or by using the Public "</span>
|
||||
<span class="string">"Library in the Extensions panel."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">versions</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_search_result</span><span class="plain"> *</span><span class="identifier">search_result</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">search_result</span><span class="plain">, </span><span class="identifier">inbuild_search_result</span><span class="plain">, </span><span class="identifier">L</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">versions</span><span class="plain">) > 0) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">versions</span><span class="plain">, </span><span class="string">" or "</span><span class="plain">);</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">search_result</span><span class="plain">-></span><span class="identifier">copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VersionNumbers::is_null</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">)) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">versions</span><span class="plain">, </span><span class="string">"an unnumbered version"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">versions</span><span class="plain">, </span><span class="string">"version %v"</span><span class="plain">, &</span><span class="identifier">V</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'0'</span><span class="plain">) || (</span><span class="identifier">digits</span><span class="plain"> == 0)) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">Malformed</span><span class="plain">;</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">versions</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtVersionTooLow</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"I can't find the right version of the extension requested by %1 - "</span>
|
||||
<span class="string">"I can only find %2. %P"</span>
|
||||
<span class="string">"You can get hold of extensions which people have made public at "</span>
|
||||
<span class="string">"the Inform website, www.inform7.com, or by using the Public "</span>
|
||||
<span class="string">"Library in the Extensions panel."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">versions</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">slashes</span><span class="plain"> == 0) && (</span><span class="identifier">digits</span><span class="plain"> <= 3)) </span> <span class="comment">so that <code class="display"><span class="extract">p</span></code> points to 1 to 3 digits, not starting with <code class="display"><span class="extract">0</span></code></span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wide::atoi</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)*1000000;</span>
|
||||
<span class="identifier">p</span><span class="plain">[</span><span class="identifier">slash_at</span><span class="plain">] = 0; </span> <span class="comment">temporarily replace the slash with a null, making <code class="display"><span class="extract">p</span></code> and <code class="display"><span class="extract">q</span></code> distinct C strings</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) > 3) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">Malformed</span><span class="plain">; </span> <span class="comment">now <code class="display"><span class="extract">p</span></code> points to 1 to 3 digits, not starting with <code class="display"><span class="extract">0</span></code></span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">) != 6) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">Malformed</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (*</span><span class="identifier">q</span><span class="plain"> == </span><span class="character">'0'</span><span class="plain">) </span><span class="identifier">q</span><span class="plain">++; </span> <span class="comment">now <code class="display"><span class="extract">q</span></code> points to 0 to 6 digits, not starting with <code class="display"><span class="extract">0</span></code></span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q</span><span class="plain">[0] == 0) </span><span class="identifier">q</span><span class="plain">--; </span> <span class="comment">if it was 0 digits, backspace to make it a single digit <code class="display"><span class="extract">0</span></code></span>
|
||||
<span class="identifier">rv</span><span class="plain"> = (</span><span class="identifier">Wide::atoi</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)*1000000) + </span><span class="identifier">Wide::atoi</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">);</span>
|
||||
<span class="identifier">p</span><span class="plain">[</span><span class="identifier">slash_at</span><span class="plain">] = </span><span class="character">'/'</span><span class="plain">; </span> <span class="comment">put the slash back over the null byte temporarily dividing the string</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<span class="identifier">Malformed</span><span class="plain">: </span><<span class="cwebmacro">Issue a problem message for a malformed version number</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
||||
<p class="endnote">This code is used in <a href="#SP5_2">§5.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">last_PM_ExtVersionMalformed_at</span><span class="plain"> = -1;</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">vwn</span><span class="plain">) {</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</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="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">vwn</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">version</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">semantic_version_number_holder</span><span class="plain"> *</span><span class="identifier">H</span><span class="plain"> = (</span><span class="identifier">semantic_version_number_holder</span><span class="plain"> *) <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
||||
<span class="identifier">V</span><span class="plain"> = </span><span class="identifier">H</span><span class="plain">-></span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<<span class="cwebmacro">Issue a problem message for a malformed version number</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Inclusion::parse_version is used in <a href="#SP4_1">§4.1</a>, <a href="#SP5_1">§5.1</a>, <a href="#SP9">§9</a>, 8/ef (<a href="8-ef.html#SP18">§18</a>).</p>
|
||||
<p class="endnote">The function Extensions::Inclusion::parse_version is used in <a href="#SP4_1">§4.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>Because we tend to call <code class="display"><span class="extract">Extensions::Inclusion::parse_version</span></code> repeatedly on the same word, we
|
||||
want to recover tidily from this problem, and not report it over and over.
|
||||
We do this by altering the text to <code class="display"><span class="extract">1</span></code>, the lowest well-formed version
|
||||
number text.
|
||||
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>Because we tend to call <code class="display"><span class="extract">Extensions::Inclusion::parse_version</span></code> repeatedly on
|
||||
the same word, we want to recover tidily from this problem, and not report it
|
||||
over and over. We do this by altering the text to <code class="display"><span class="extract">1</span></code>, the lowest well-formed
|
||||
version number text.
|
||||
</p>
|
||||
|
||||
|
||||
|
@ -473,14 +409,15 @@ number text.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Offending word number %d <%N>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">vwn</span><span class="plain">, </span><span class="identifier">vwn</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtVersionMalformed</span><span class="plain">),</span>
|
||||
<span class="string">"a version number must have the form N/DDDDDD"</span><span class="plain">,</span>
|
||||
<span class="string">"as in the example '2/040426' for release 2 made on 26 April 2004. "</span>
|
||||
<span class="string">"(The DDDDDD part is optional, so '3' is a legal version number too. "</span>
|
||||
<span class="string">"N must be between 1 and 999: in particular, there is no version 0.)"</span><span class="plain">);</span>
|
||||
<span class="identifier">Vocabulary::change_text_of_word</span><span class="plain">(</span><span class="identifier">vwn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"1"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> 1000000; </span> <span class="comment">which equates to <code class="display"><span class="extract">1/000000</span></code></span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">last_PM_ExtVersionMalformed_at</span><span class="plain"> != </span><span class="identifier">vwn</span><span class="plain">) {</span>
|
||||
<span class="identifier">last_PM_ExtVersionMalformed_at</span><span class="plain"> = </span><span class="identifier">vwn</span><span class="plain">;</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Offending word number %d <%N>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">vwn</span><span class="plain">, </span><span class="identifier">vwn</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtVersionMalformed</span><span class="plain">),</span>
|
||||
<span class="string">"a version number must have the form N/DDDDDD"</span><span class="plain">,</span>
|
||||
<span class="string">"as in the example '2/040426' for release 2 made on 26 April 2004. "</span>
|
||||
<span class="string">"(The DDDDDD part is optional, so '3' is a legal version number too. "</span>
|
||||
<span class="string">"N must be between 1 and 999: in particular, there is no version 0.)"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -520,19 +457,19 @@ problem messages if it is malformed.
|
|||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">begins</span><span class="plain">-</span><span class="identifier">here</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">title</span><span class="plain">-</span><span class="identifier">and</span><span class="plain">-</span><span class="identifier">version</span><span class="plain">> </span><span class="identifier">by</span><span class="plain"> ... | ==> </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">auth1</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[1]); <<</span><span class="identifier">auth2</span><span class="plain">>> = </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[1]);</span>
|
||||
<span class="plain">... ==> </span><<span class="cwebmacro">Issue PM_ExtMiswordedBeginsHere problem</span> <span class="cwebmacronumber">8.1</span>>
|
||||
<span class="plain">... ==> </span><<span class="cwebmacro">Issue problem</span> <span class="cwebmacronumber">8.1</span>>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue PM_ExtMiswordedBeginsHere problem</span> <span class="cwebmacronumber">8.1</span>> =
|
||||
<<span class="cwebmacrodefn">Issue problem</span> <span class="cwebmacronumber">8.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="plain"><<</span><span class="identifier">auth1</span><span class="plain">>> = -1; <<</span><span class="identifier">auth2</span><span class="plain">>> = -1;</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMiswordedBeginsHere</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">)); </span> <span class="comment">since inbuild's scan catches this first</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"has a misworded 'begins here' sentence ('%2'), which contains "</span>
|
||||
<span class="string">"no 'by'. Recall that every extension should begin with a "</span>
|
||||
|
@ -550,26 +487,15 @@ problem messages if it is malformed.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::check_begins_here</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::check_begins_here</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</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="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">PN</span><span class="plain">; </span> <span class="comment">in case problem messages need to be issued</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">));</span>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">begins</span><span class="plain">-</span><span class="identifier">here</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</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="identifier">Wordings::new</span><span class="plain">(<<</span><span class="identifier">t1</span><span class="plain">>>, <<</span><span class="identifier">t2</span><span class="plain">>>);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">Wordings::new</span><span class="plain">(<<</span><span class="identifier">auth1</span><span class="plain">>>, <<</span><span class="identifier">auth2</span><span class="plain">>>);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>version_loaded</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
||||
<span class="identifier">ef</span><span class="plain">-</span><span class="element">>VM_restriction_text</span><span class="plain"> = </span><span class="identifier">Wordings::new</span><span class="plain">(<<</span><span class="identifier">rest1</span><span class="plain">>>, <<</span><span class="identifier">rest2</span><span class="plain">>>);</span>
|
||||
<span class="identifier">Extensions::set_VM_text</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">Wordings::new</span><span class="plain">(<<</span><span class="identifier">rest1</span><span class="plain">>>, <<</span><span class="identifier">rest2</span><span class="plain">>>));</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>version_loaded</span><span class="plain"> >= 0) </span><span class="functiontext">Extensions::Inclusion::parse_version</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>version_loaded</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">ef</span><span class="plain">-</span><span class="element">>VM_restriction_text</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Check that the extension's stipulation about the virtual machine can be met</span> <span class="cwebmacronumber">9.1</span>><span class="character">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>author_text</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Issue a problem message pointing out that name and author do not agree with filename</span> <span class="cwebmacronumber">9.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Check that the extension's stipulation about the virtual machine can be met</span> <span class="cwebmacronumber">9.1</span>><span class="character">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -589,74 +515,16 @@ with our VM de jour.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">platform</span><span class="plain">-</span><span class="identifier">qualifier</span><span class="plain">>(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>VM_restriction_text</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> == </span><span class="constant">PLATFORM_UNMET_HQ</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Issue a problem message saying that the VM does not meet requirements</span> <span class="cwebmacronumber">9.1.2</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<<span class="cwebmacro">Issue a problem message saying that the VM requirements are malformed</span> <span class="cwebmacronumber">9.1.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">compatibility_specification</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">compatibility</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Compatibility::with</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">Task::vm</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Issue a problem message saying that the VM does not meet requirements</span> <span class="cwebmacronumber">9.1.1</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_2"></a><b>§9.2. </b>Suppose we wanted Onion Cookery by Delia Smith. We loaded the extension
|
||||
file called Onion Cookery in the Delia Smith folder of the (probably external)
|
||||
extensions area: but suppose that file turns out instead to be French Cuisine
|
||||
by Elizabeth David, according to its "begins here" sentence? Then the
|
||||
following problem message is produced:
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue a problem message pointing out that name and author do not agree with filename</span> <span class="cwebmacronumber">9.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMisidentified</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"The extension %1, which your source text makes use of, seems to be "</span>
|
||||
<span class="string">"misidentified: its 'begins here' sentence declares it as '%2'. "</span>
|
||||
<span class="string">"(Perhaps it was wrongly installed?)"</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_1"></a><b>§9.1.1. </b>See Virtual Machines for the grammar of what can be given as a VM
|
||||
requirement.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue a problem message saying that the VM requirements are malformed</span> <span class="cwebmacronumber">9.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>VM_restriction_text</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMalformedVM</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"Your source text makes use of the extension %1: but my copy "</span>
|
||||
<span class="string">"stipulates that it is '%2', which is a description of the required "</span>
|
||||
<span class="string">"story file format which I can't understand, and should be "</span>
|
||||
<span class="string">"something like '(for Z-machine version 5 or 8 only)'."</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_2"></a><b>§9.1.2. </b>Here the problem is not that the extension is broken in some way: it's
|
||||
<p class="inwebparagraph"><a id="SP9_1_1"></a><b>§9.1.1. </b>Here the problem is not that the extension is broken in some way: it's
|
||||
just not what we can currently use. Therefore the correction should be a
|
||||
matter of removing the inclusion, not of altering the extension, so we
|
||||
report this problem at the inclusion line.
|
||||
|
@ -664,20 +532,19 @@ report this problem at the inclusion line.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Issue a problem message saying that the VM does not meet requirements</span> <span class="cwebmacronumber">9.1.2</span>> =
|
||||
<<span class="cwebmacrodefn">Issue a problem message saying that the VM does not meet requirements</span> <span class="cwebmacronumber">9.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>inclusion_sentence</span><span class="plain">;</span>
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">Extensions::get_inclusion_sentence</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(3, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>author_text</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(4, </span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>VM_restriction_text</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_copy</span><span class="plain">(2, </span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_stream</span><span class="plain">(3, </span><span class="identifier">C</span><span class="plain">-></span><span class="identifier">parsed_from</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtInadequateVM</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
<span class="string">"You wrote %1: but my copy of %2 by %3 stipulates that it "</span>
|
||||
<span class="string">"is '%4'. That means it can only be used with certain of "</span>
|
||||
<span class="string">"You wrote %1: but my copy of %2 stipulates that it "</span>
|
||||
<span class="string">"is '%3'. That means it can only be used with certain of "</span>
|
||||
<span class="string">"the possible compiled story file formats, and at the "</span>
|
||||
<span class="string">"moment, we don't fit the requirements. (You can change "</span>
|
||||
<span class="string">"the format used for this project on the Settings panel.)"</span><span class="plain">);</span>
|
||||
|
@ -697,11 +564,12 @@ that the extension isn't the one he thinks it is.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::check_ends_here</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::Inclusion::check_ends_here</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</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="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Articles::remove_the</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">problem_count</span><span class="plain"> == 0) && (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">-</span><span class="element">>title_text</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">-></span><span class="identifier">title</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">problem_count</span><span class="plain"> == 0) && (</span><span class="identifier">Wordings::match</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">PN</span><span class="plain">;</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ef</span><span class="plain">);</span>
|
||||
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMisidentifiedEnds</span><span class="plain">));</span>
|
||||
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
||||
|
@ -757,7 +625,7 @@ we might in future.
|
|||
<p class="endnote">The function Extensions::Inclusion::handle_extension_ends appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="8-ef.html">Back to 'Extension Files'</a></li><li><a href="8-ei.html">Continue with 'Extension Identifiers'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="8-ef.html">Back to 'Extension Files'</a></li><li><i>(This section ends Chapter 8: Extensions.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -60,7 +60,7 @@ generalisations which apply to it.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure generalisation is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure generalisation is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>For reasons to do with timing, each object needs to keep track of which
|
||||
generalisations have and have not yet applied to it. In practice, this is
|
||||
|
@ -79,7 +79,7 @@ applied from K's list.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure application is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
<p class="endnote">The structure application is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>These structures are combined in the following packet of data attached to
|
||||
each inference subject:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>8/ed2</title>
|
||||
<title>8/ie</title>
|
||||
<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">
|
||||
|
|
|
@ -2547,7 +2547,7 @@ suite: it would be annoying to verify this problem message otherwise.)
|
|||
<pre class="displaydefn">
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, *</span><span class="identifier">Q</span><span class="plain">, *</span><span class="identifier">In</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">variant</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rng_seed_at_start_of_play</span><span class="plain"> == 0) </span><span class="identifier">variant</span><span class="plain"> = (</span><span class="identifier">time</span><span class="plain">(0))&15;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Task::rng_seed</span><span class="plain">() == 0) </span><span class="identifier">variant</span><span class="plain"> = (</span><span class="identifier">time</span><span class="plain">(0))&15;</span>
|
||||
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">variant</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="identifier">P</span><span class="plain"> = </span><span class="string">"the chalk"</span><span class="plain">; </span><span class="identifier">Q</span><span class="plain"> = </span><span class="string">"the cheese"</span><span class="plain">; </span><span class="identifier">In</span><span class="plain"> = </span><span class="string">"Dairy Products School"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 2: </span><span class="identifier">P</span><span class="plain"> = </span><span class="string">"St Peter"</span><span class="plain">; </span><span class="identifier">Q</span><span class="plain"> = </span><span class="string">"St Paul"</span><span class="plain">; </span><span class="identifier">In</span><span class="plain"> = </span><span class="string">"Pearly Gates"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
|
|
|
@ -159,7 +159,7 @@ we don't bother to print details of the closing <code class="display"><span clas
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Assertions::Traverse::traverse is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>).</p>
|
||||
<p class="endnote">The function Assertions::Traverse::traverse is used in 1/htc (<a href="1-htc.html#SP2_4">§2.4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b>Here's a tricky timing problem, or rather, here's the fix for it. Assemblies
|
||||
are made when the kinds of objects are set, and they're made by inserting
|
||||
|
@ -651,14 +651,14 @@ is the rubric, the second the credit line.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
||||
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</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="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) {</span>
|
||||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">));</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">near_start_of_extension</span><span class="plain">++) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="functiontext">Extensions::Files::set_rubric</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 2: </span><span class="functiontext">Extensions::Files::set_extra_credit</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">);</span>
|
||||
<span class="reserved">case</span><span class="plain"> 1: </span><span class="identifier">Extensions::set_rubric</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> 2: </span><span class="identifier">Extensions::set_extra_credit</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">);</span>
|
||||
<span class="identifier">near_start_of_extension</span><span class="plain"> = 0; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
||||
|
@ -808,7 +808,7 @@ subject carried over from previous sentences.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Assertions::Traverse::new_discussion is used in <a href="#SP7">§7</a>, 7/hdn (<a href="7-hdn.html#SP30">§30</a>), 8/ie (<a href="8-ie.html#SP11">§11</a>), 9/tbath (<a href="9-tbath.html#SP5_1">§5.1</a>).</p>
|
||||
<p class="endnote">The function Assertions::Traverse::new_discussion is used in <a href="#SP7">§7</a>, 7/hdn (<a href="7-hdn.html#SP31">§31</a>), 8/ie (<a href="8-ie.html#SP11">§11</a>), 9/tbath (<a href="9-tbath.html#SP5_1">§5.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Assertions::Traverse::change_discussion_topic is used in 9/tbath (<a href="9-tbath.html#SP5_1">§5.1</a>).</p>
|
||||
|
||||
|
|
|
@ -17,22 +17,22 @@
|
|||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="1-mr.html"><spon class="sectiontitle">Main Routine</span></a> -
|
||||
<span class="purpose">As with all C programs, Inform begins execution in a |main| routine, reading command-line arguments to modify its behaviour.</span></p>
|
||||
<span class="purpose">The top level of the Inform 7 compiler, reading command line arguments and preparing the way.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="1-cm.html"><spon class="sectiontitle">Core Module</span></a> -
|
||||
<span class="purpose">Setting up the use of this module.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="1-kts.html"><spon class="sectiontitle">Kits</span></a> -
|
||||
<span class="purpose">A kit is a combination of Inter code with an Inform 7 extension.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="1-pp.html"><spon class="sectiontitle">Progress Percentages</span></a> -
|
||||
<span class="purpose">This tiny section, the Lichtenstein of Inform, prints percentage of completion estimates onto |stderr| so that the host application can intercept them and update its graphical progress bar.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="1-wel.html"><spon class="sectiontitle">Where Everything Lives</span></a> -
|
||||
<p><a href="1-wtc.html"><spon class="sectiontitle">What To Compile</span></a> -
|
||||
<span class="purpose">To receive an instruction to compile something from Inbuild, and then to sort out the many locations then used in the host filing system.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="1-htc.html"><spon class="sectiontitle">How To Compile</span></a> -
|
||||
<span class="purpose">To configure the many locations used in the host filing system.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -193,22 +193,6 @@
|
|||
<p><a href="8-ie.html"><spon class="sectiontitle">Including Extensions</span></a> -
|
||||
<span class="purpose">To fulfill requests to include extensions, adding their material to the parse tree as needed, and removing INCLUDE nodes.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="8-ei.html"><spon class="sectiontitle">Extension Identifiers</span></a> -
|
||||
<span class="purpose">To store, hash code and compare title/author pairs used to identify extensions which, though installed, are not necessarily used in the present source text.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="8-ec.html"><spon class="sectiontitle">Extension Census</span></a> -
|
||||
<span class="purpose">To conduct a census of all the extensions installed (whether used on this run or not), and keep the documentation index for them up to date.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="8-ed.html"><spon class="sectiontitle">Extension Dictionary</span></a> -
|
||||
<span class="purpose">To maintain a database of names and constructions in all extensions so far used by this installation of Inform, and spot potential namespace clashes.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="8-ed2.html"><spon class="sectiontitle">Extension Documentation</span></a> -
|
||||
<span class="purpose">To generate HTML documentation for extensions.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -746,8 +730,8 @@
|
|||
<p><span class="purpose">Mainly low-level utilities for compiling code.</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="26-vm.html"><spon class="sectiontitle">Virtual Machines</span></a> -
|
||||
<span class="purpose">I7 supports a variety of virtual machines as targets. Most source text should be independent of the target VM, but sometimes numbering is needed, and this is where any VM dependencies are decided.</span></p>
|
||||
<p><a href="26-fc.html"><spon class="sectiontitle">Fundamental Constants</span></a> -
|
||||
<span class="purpose">Inter constants for, say, extremal number values, which depend on the target we are compiling to, and are generally low-level in nature.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="26-i6i.html"><spon class="sectiontitle">Inform 6 Inclusions</span></a> -
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '2/bd' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">if</a></li><li><a href="index.html#2">Chapter 2: Bibliographic Data</a></li><li><b>Bibliographic Data</b></li></ul><p class="purpose">To manage the special variables providing bibliographic data on the work of IF being generated (title, author's name and so forth), and to write the Library Card in the index.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP17">§17. Bibliographic text</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
||||
|
||||
|
@ -138,7 +138,7 @@ it affects the grammar needed to understand the rest of the file —
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">natural_language</span><span class="plain"> *</span><span class="functiontext">PL::Bibliographic::scan_language</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">) {</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="functiontext">PL::Bibliographic::scan_language</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -256,7 +256,7 @@ person as the author of the main work.
|
|||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</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="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="identifier">HTMLFiles::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="functiontext">PL::Bibliographic::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">)) </span><span class="identifier">result</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">result</span><span class="plain">;</span>
|
||||
|
@ -529,7 +529,9 @@ simplified form of the iFiction record, without the XML overhead.
|
|||
<span class="functiontext">PL::Bibliographic::library_card_entry</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Release number"</span><span class="plain">, </span><span class="identifier">story_release_number_VAR</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"1"</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::library_card_entry</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Story creation year"</span><span class="plain">, </span><span class="identifier">story_creation_year_VAR</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"(This year)"</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">lang</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">lang</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">NaturalLanguages::get_name</span><span class="plain">(</span><span class="identifier">language_of_play</span><span class="plain">));</span>
|
||||
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">());</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">lang</span><span class="plain">, </span><span class="string">"English"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">lang</span><span class="plain">, </span><span class="string">"%X"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-></span><span class="identifier">as_copy</span><span class="plain">-></span><span class="identifier">edition</span><span class="plain">-></span><span class="identifier">work</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::library_card_entry</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Language of play"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">lang</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">lang</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::library_card_entry</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"IFID number"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">PL::Bibliographic::IFID::read_uuid</span><span class="plain">());</span>
|
||||
|
@ -604,7 +606,7 @@ Contents listing, so:
|
|||
<span class="identifier">COMPILATION_MODE_ENTER</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nlv</span><span class="plain">) && (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">nlv</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="identifier">NonlocalVariables::treat_as_plain_text_word</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
|
||||
<span class="identifier">HTMLFiles::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)));</span>
|
||||
<span class="functiontext">PL::Bibliographic::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)));</span>
|
||||
<span class="plain">} </span><span class="reserved">else</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">t</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -616,6 +618,259 @@ Contents listing, so:
|
|||
|
||||
<p class="endnote">The function PL::Bibliographic::index_bibliographic_variable is used in <a href="#SP14">§14</a>, <a href="#SP15">§15</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. Bibliographic text. </b>"Bibliographic text" is text used in bibliographic data about the work
|
||||
of IF compiled: for instance, in the iFiction record, or in the Library
|
||||
Card section of the HTML index. Note that the exact output format depends
|
||||
on global variables, which allow the bibliographic text writing code to
|
||||
configure NI for its current purposes. On non-empty strings this routine
|
||||
therefore splits into one of three independent methods.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::compile_bibliographic_text</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="reserved">if</span><span class="plain"> (</span><span class="identifier">p</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="reserved">if</span><span class="plain"> (</span><span class="identifier">TEST_COMPILATION_MODE</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Compile bibliographic text as XML respecting Treaty of Babel rules</span> <span class="cwebmacronumber">17.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TEST_COMPILATION_MODE</span><span class="plain">(</span><span class="identifier">TRUNCATE_TEXT_CMODE</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Compile bibliographic text as a truncated filename</span> <span class="cwebmacronumber">17.4</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TEST_COMPILATION_MODE</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_I6_CMODE</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Compile bibliographic text as an I6 string</span> <span class="cwebmacronumber">17.3</span>>
|
||||
<<span class="cwebmacro">Compile bibliographic text as HTML</span> <span class="cwebmacronumber">17.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function PL::Bibliographic::compile_bibliographic_text is used in <a href="#SP9">§9</a>, <a href="#SP16">§16</a>, 2/ri (<a href="2-ri.html#SP12">§12</a>, <a href="2-ri.html#SP13">§13</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17_1"></a><b>§17.1. </b>This looks like a standard routine for converting ISO Latin-1 to UTF-8
|
||||
with XML escapes, but there are a few conventions on whitespace, too, in order
|
||||
to comply with a strict reading of the Treaty of Babel. (This is intended
|
||||
for fields in iFiction records.)
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile bibliographic text as XML respecting Treaty of Babel rules</span> <span class="cwebmacronumber">17.1</span>> =
|
||||
</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="identifier">i2</span><span class="plain"> = </span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)-1, </span><span class="identifier">snl</span><span class="plain">, </span><span class="identifier">wsc</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'"'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i2</span><span class="plain">] == </span><span class="character">'"'</span><span class="plain">)) { </span><span class="identifier">i</span><span class="plain">++; </span><span class="identifier">i2</span><span class="plain">--; } </span> <span class="comment">omit surrounding double-quotes</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::is_babel_whitespace</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">])) </span><span class="identifier">i</span><span class="plain">++; </span> <span class="comment">omit leading whitespace</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i2</span><span class="plain">>=0) && (</span><span class="identifier">Characters::is_babel_whitespace</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i2</span><span class="plain">]))) </span><span class="identifier">i2</span><span class="plain">--; </span> <span class="comment">omit trailing whitespace</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">snl</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">wsc</span><span class="plain"> = 0; </span><span class="identifier">i</span><span class="plain"><=</span><span class="identifier">i2</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">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">' '</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">:</span>
|
||||
<span class="identifier">snl</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">wsc</span><span class="plain">++;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">k</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">k</span><span class="plain">] == </span><span class="character">' '</span><span class="plain">) || (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">k</span><span class="plain">] == </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">) || (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">k</span><span class="plain">] == </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">) || (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">k</span><span class="plain">] == </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">)) </span><span class="identifier">k</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">wsc</span><span class="plain"> == 1) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">k</span><span class="plain">] != </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</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="identifier">NEWLINE_IN_STRING</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">snl</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<br/>"</span><span class="plain">);</span>
|
||||
<span class="identifier">snl</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">wsc</span><span class="plain"> = 1; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'['</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+2] == </span><span class="character">']'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">i</span><span class="plain"> += 2;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"'"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">CompiledText::expand_unisub</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> >= 0) { </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
|
||||
<span class="comment">and otherwise fall through to the default case</span>
|
||||
<span class="reserved">default</span><span class="plain">:</span>
|
||||
<span class="identifier">snl</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">wsc</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">switch</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">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;"</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="character">'<'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;"</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="character">'>'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;"</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</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">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17_2"></a><b>§17.2. </b>In the HTML version, we want to respect the forcing of newlines, and
|
||||
also the <code class="display"><span class="extract">[']</span></code> escape to obtain a literal single quotation mark.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile bibliographic text as HTML</span> <span class="cwebmacronumber">17.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">whitespace_count</span><span class="plain">=0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'"'</span><span class="plain">) </span><span class="identifier">p</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">p</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="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="character">'"'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == 0)) </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">switch</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">case</span><span class="plain"> </span><span class="character">' '</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">:</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">whitespace_count</span><span class="plain"> == 1) </span><span class="identifier">PUT</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">case</span><span class="plain"> </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">:</span>
|
||||
<span class="reserved">while</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">NEWLINE_IN_STRING</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">++;</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="character">'<'</span><span class="plain">);</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="character">'p'</span><span class="plain">);</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="character">'>'</span><span class="plain">);</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain"> = 1;</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'['</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+2] == </span><span class="character">']'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">i</span><span class="plain"> += 2;</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">CompiledText::expand_unisub</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> >= 0) { </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
|
||||
<span class="comment">and otherwise fall through to the default case</span>
|
||||
<span class="reserved">default</span><span class="plain">:</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">PUT</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">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17_3"></a><b>§17.3. </b>In the Inform 6 string version, we suppress the forcing of newlines, but
|
||||
otherwise it's much the same.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile bibliographic text as an I6 string</span> <span class="cwebmacronumber">17.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">whitespace_count</span><span class="plain">=0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'"'</span><span class="plain">) </span><span class="identifier">p</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">p</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="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="character">'"'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == 0)) </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">switch</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">case</span><span class="plain"> </span><span class="character">' '</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">:</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">whitespace_count</span><span class="plain"> == 1) </span><span class="identifier">PUT</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">case</span><span class="plain"> </span><span class="character">'['</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+2] == </span><span class="character">']'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">i</span><span class="plain"> += 2;</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">} </span> <span class="comment">and otherwise fall through to the default case</span>
|
||||
<span class="reserved">default</span><span class="plain">:</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">PUT</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">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17_4"></a><b>§17.4. </b>This code is used to work out a good filename for something given a name
|
||||
inside NI. For instance, if a project is called
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"St. Bartholemew's Fair: \'Etude for a Push-Me/Pull-You Machine"</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
<p class="inwebparagraph">then what would be a good filename for its released story file?
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">In the filename version we must forcibly truncate the text to ensure
|
||||
that it does not exceed a certain length, and must also make it filename-safe,
|
||||
omitting characters used as folder separators on various platforms and
|
||||
(for good measure) removing accents from accented letters, so that we can
|
||||
arrive at a sequence of ASCII characters. Each run of whitespace is also
|
||||
converted to a single space. If this would result in an empty text or only
|
||||
a single space, we return the text "story" instead.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Our example (if not truncated) then emerges as:
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">St- Bartholemew's Fair- Etude for a Push-Me-Pull-You Machine</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">Note that we do not write any filename extension (e.g., <code class="display"><span class="extract">.z5</span></code>) here.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">We change possible filename separators or extension indicators to hyphens,
|
||||
and remove accents from each possible ISO Latin-1 accented letter. This does
|
||||
still mean that the OE and AE digraphs will simply be omitted, while the
|
||||
German eszet will be barbarously shortened to a single "s", but life is
|
||||
just too short to care overmuch about this.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile bibliographic text as a truncated filename</span> <span class="cwebmacronumber">17.4</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">STREAM_EXTENT</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">), </span><span class="identifier">whitespace_count</span><span class="plain">=0, </span><span class="identifier">black_chars_written</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = 100;</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="constant">IF_MODULE</span>
|
||||
<span class="identifier">N</span><span class="plain"> = </span><span class="constant">BIBLIOGRAPHIC_TEXT_TRUNCATION</span><span class="plain">;</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'"'</span><span class="plain">) </span><span class="identifier">p</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">p</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="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_EXTENT</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">) - </span><span class="identifier">pos</span><span class="plain"> >= </span><span class="identifier">N</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">] == </span><span class="character">'"'</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] == 0)) </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">switch</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">case</span><span class="plain"> </span><span class="character">' '</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">:</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">whitespace_count</span><span class="plain"> == 1) </span><span class="identifier">PUT</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">case</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'*'</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]) && (</span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1] != </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">)) </span><span class="identifier">PUT</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">default</span><span class="plain">: {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">charcode</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
||||
<span class="identifier">charcode</span><span class="plain"> = </span><span class="identifier">Characters::make_filename_safe</span><span class="plain">(</span><span class="identifier">charcode</span><span class="plain">);</span>
|
||||
<span class="identifier">whitespace_count</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">charcode</span><span class="plain"> < 128) {</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">charcode</span><span class="plain">); </span><span class="identifier">black_chars_written</span><span class="plain">++;</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">if</span><span class="plain"> (</span><span class="identifier">black_chars_written</span><span class="plain"> == 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"story"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-ifi.html">Back to 'Interactive Fiction ID'</a></li><li><a href="2-ri.html">Continue with 'Release Instructions'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
|
|
|
@ -39,7 +39,7 @@ cases the UUID is empty.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uuid_read</span><span class="plain"> >= 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">uuid_text</span><span class="plain">;</span>
|
||||
<span class="identifier">uuid_text</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">uuid_read</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">filename_of_uuid</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">Task::uuid_file</span><span class="plain">(), </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">xf</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">uuid_text</span><span class="plain">; </span> <span class="comment">the UUID is the empty string if the file is missing</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (((</span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">fgetc</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">)) != </span><span class="identifier">EOF</span><span class="plain">) </span> <span class="comment">the UUID file is plain text, not Unicode</span>
|
||||
|
|
|
@ -31,7 +31,7 @@ any "Release along with..." sentences, in fact.
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Release along with a website?</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">website_template_leafname</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"Standard"</span><span class="plain">; </span> <span class="comment">If so, the template name for it</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_interpreter</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Release along with an interpreter?</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">If so, the template name for it</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">If so, the template name for it</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_booklet</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Release along with introductory booklet?</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_postcard</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Release along with Zarf's IF card?</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_cover</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Release along with cover art?</span>
|
||||
|
@ -272,7 +272,7 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">EXISTING_STORY_FILE_PAYLOAD</span><span class="plain">:</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NAMED_EXISTING_STORY_FILE_PAYLOAD</span><span class="plain">:</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VirtualMachines::is_16_bit</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">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span> <span class="comment">not usefully testable</span>
|
||||
<span class="string">"existing story files can only be used with the Z-machine"</span><span class="plain">,</span>
|
||||
<span class="string">"not with the Glulx setting."</span><span class="plain">);</span>
|
||||
|
@ -283,11 +283,11 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">SW</span><span class="plain">));</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">SW</span><span class="plain">));</span>
|
||||
<span class="identifier">filename_of_existing_story_file</span><span class="plain"> =</span>
|
||||
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">existing_story_file</span><span class="plain"> = </span><span class="identifier">TRUE</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">AUXILIARY_FILE_PAYLOAD</span><span class="plain">: {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">DW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, 1);</span>
|
||||
|
@ -296,10 +296,10 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">DW</span><span class="plain">));</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::Release::create_aux_file</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_materials_release</span><span class="plain">,</span>
|
||||
<span class="identifier">Task::release_path</span><span class="plain">(),</span>
|
||||
<span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">DW</span><span class="plain">)),</span>
|
||||
<span class="identifier">payload</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -309,10 +309,10 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::Release::create_aux_file</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_materials_release</span><span class="plain">,</span>
|
||||
<span class="identifier">Task::release_path</span><span class="plain">(),</span>
|
||||
<span class="identifier">L</span><span class="string">"--"</span><span class="plain">,</span>
|
||||
<span class="identifier">payload</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -324,11 +324,11 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">FW</span><span class="plain">));</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">FW</span><span class="plain">));</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_materials_release</span><span class="plain">, </span><span class="identifier">folder</span><span class="plain">);</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">Task::release_path</span><span class="plain">(), </span><span class="identifier">folder</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::Release::create_aux_file</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"--"</span><span class="plain">, </span><span class="identifier">payload</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -349,7 +349,8 @@ optionally be marked "public" (they appear on any website about it) or
|
|||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">THEMED_INTERPRETER_PAYLOAD</span><span class="plain">: {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">TW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, 1);</span>
|
||||
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
||||
<span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
||||
<span class="identifier">interpreter_template_leafname</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">interpreter_template_leafname</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
||||
<span class="identifier">release_interpreter</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -429,7 +430,7 @@ of writing the same thing.
|
|||
<<span class="cwebmacro">Check cover art image if any</span> <span class="cwebmacronumber">10.2</span>><span class="plain">;</span>
|
||||
|
||||
<span class="constant">zbyte</span><span class="plain"> </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">LENGTH_OF_STORY_FILE_HEADER</span><span class="plain">]; </span> <span class="comment">a sequence of bytes, not a C string</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) </span><<span class="cwebmacro">Read header of existing story file if present</span> <span class="cwebmacronumber">10.3</span>>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) </span><<span class="cwebmacro">Read header of existing story file if present</span> <span class="cwebmacronumber">10.3</span>>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><<span class="cwebmacro">Finally, write out our three metadata files</span> <span class="cwebmacronumber">10.4</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -455,7 +456,7 @@ application sandboxing in Mac OS X in 2012 may force us to revisit this.
|
|||
<span class="identifier">create_Materials</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span> <span class="comment">thus making the next condition irrelevant</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">release_website</span><span class="plain">) || (</span><span class="identifier">release_interpreter</span><span class="plain">) || (</span><span class="identifier">release_booklet</span><span class="plain">) || (</span><span class="identifier">release_postcard</span><span class="plain">) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">release_cover</span><span class="plain">) || (</span><span class="identifier">release_source</span><span class="plain">) || (</span><span class="identifier">release_card</span><span class="plain">) || (</span><span class="identifier">release_solution</span><span class="plain">) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">existing_story_file</span><span class="plain">) || (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="identifier">blorb_figure</span><span class="plain">) > 1)) {</span>
|
||||
<span class="plain">(</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) || (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="identifier">blorb_figure</span><span class="plain">) > 1)) {</span>
|
||||
<span class="identifier">create_Materials</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">create_Materials</span><span class="plain">) {</span>
|
||||
|
@ -475,13 +476,13 @@ application sandboxing in Mac OS X in 2012 may force us to revisit this.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</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">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
||||
<span class="string">"In order to release the story file along with other "</span>
|
||||
<span class="string">"resources, I tried to create a folder alongside this "</span>
|
||||
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
||||
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">]);</span>
|
||||
<span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -496,13 +497,13 @@ application sandboxing in Mac OS X in 2012 may force us to revisit this.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">pathname_of_materials_release</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">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">Task::release_path</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
||||
<span class="string">"In order to release the story file along with other "</span>
|
||||
<span class="string">"resources, I tried to create a folder alongside this "</span>
|
||||
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
||||
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_materials_release</span><span class="plain">);</span>
|
||||
<span class="identifier">Task::release_path</span><span class="plain">());</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
||||
|
@ -528,13 +529,13 @@ application sandboxing in Mac OS X in 2012 may force us to revisit this.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">pathname_of_released_interpreter</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">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">Task::released_interpreter_path</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
||||
<span class="string">"In order to release the story file along with an "</span>
|
||||
<span class="string">"interpreter, I tried to create a folder alongside this "</span>
|
||||
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
||||
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
||||
<span class="identifier">pathname_of_released_interpreter</span><span class="plain">);</span>
|
||||
<span class="identifier">Task::released_interpreter_path</span><span class="plain">());</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -557,11 +558,11 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">) {</span>
|
||||
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">cover_filename_sentence</span><span class="plain">;</span>
|
||||
<span class="identifier">cover_art_format</span><span class="plain"> = </span><span class="string">""</span><span class="plain">;</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">filename_of_large_cover_art_jpeg</span><span class="plain">;</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">COVER_FILE</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">cover_filename</span><span class="plain">, </span><span class="string">"rb"</span><span class="plain"> );</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">COVER_FILE</span><span class="plain">) </span><<span class="cwebmacro">The cover seems to be a JPEG</span> <span class="cwebmacronumber">10.2.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">filename_of_large_cover_art_png</span><span class="plain">;</span>
|
||||
<span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">COVER_FILE</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">cover_filename</span><span class="plain">, </span><span class="string">"rb"</span><span class="plain"> );</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">COVER_FILE</span><span class="plain">) </span><<span class="cwebmacro">The cover seems to be a PNG</span> <span class="cwebmacronumber">10.2.2</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">There seems to be no cover at all</span> <span class="cwebmacronumber">10.2.3</span>><span class="plain">;</span>
|
||||
|
@ -667,16 +668,16 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">this_is_a_release_compile</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">Inbuild::currently_releasing</span><span class="plain">() == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Issue a problem if this isn't a Release run</span> <span class="cwebmacronumber">10.3.1</span>><span class="character">;</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">STORYF</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">filename_of_existing_story_file</span><span class="plain">, </span><span class="string">"rb"</span><span class="plain">);</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">STORYF</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">(), </span><span class="string">"rb"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STORYF</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">Problems::Issue::unlocated_problem_on_file</span><span class="plain">(</span>
|
||||
<span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span> <span class="comment">i.e., not testable by intest</span>
|
||||
<span class="string">"The instruction 'Release along with an existing story file' "</span>
|
||||
<span class="string">"means that I need to bind up a story file called '%1', in "</span>
|
||||
<span class="string">"the .materials folder for this project. But it doesn't seem "</span>
|
||||
<span class="string">"to be there."</span><span class="plain">, </span><span class="identifier">filename_of_existing_story_file</span><span class="plain">);</span>
|
||||
<span class="string">"to be there."</span><span class="plain">, </span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">());</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
||||
|
@ -742,8 +743,9 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">filename_of_ifiction_record</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open metadata file"</span><span class="plain">, </span><span class="identifier">filename_of_ifiction_record</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::ifiction_record_file</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open metadata file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
|
||||
<span class="identifier">COMPILATION_MODE_ENTER</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::Release::write_ifiction_record</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
|
||||
|
@ -761,9 +763,10 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::blurb_file</span><span class="plain">();</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">filename_of_blurb</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open blurb file"</span><span class="plain">, </span><span class="identifier">filename_of_blurb</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open blurb file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::Bibliographic::Release::write_release_blurb</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
@ -778,9 +781,10 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::manifest_file</span><span class="plain">();</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">filename_of_manifest</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open manifest file"</span><span class="plain">, </span><span class="identifier">filename_of_manifest</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open manifest file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">PL::Figures::write_picture_manifest</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">release_cover</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
@ -817,8 +821,7 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">story_format</span><span class="plain"> = </span><span class="string">"zcode"</span><span class="plain">;</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">story_filename_extension</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ulx"</span><span class="plain">)) </span><span class="identifier">story_format</span><span class="plain"> = </span><span class="string">"glulx"</span><span class="plain">;</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">story_format</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_iFiction_format</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
||||
|
||||
<<span class="cwebmacro">Write the identification tag of the iFiction record</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the bibliographic tag of the iFiction record</span> <span class="cwebmacronumber">11.1.2</span>><span class="plain">;</span>
|
||||
|
@ -828,9 +831,9 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<<span class="cwebmacro">Write the cover tag of the iFiction record</span> <span class="cwebmacronumber">11.1.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the releases tag of the iFiction record</span> <span class="cwebmacronumber">11.1.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the colophon tag of the iFiction record</span> <span class="cwebmacronumber">11.1.6</span>><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<%s>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<%S>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the format-specific tag of the iFiction record</span> <span class="cwebmacronumber">11.1.7</span>><span class="plain">;</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</%s>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</%S>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -845,7 +848,7 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<identification>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ifid>%S</ifid>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">PL::Bibliographic::IFID::read_uuid</span><span class="plain">());</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ifid>ZCODE-%d-%c%c%c%c%c%c"</span><span class="plain">,</span>
|
||||
<span class="identifier">header</span><span class="plain">[2]*256+</span><span class="identifier">header</span><span class="plain">[3],</span>
|
||||
<span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x12</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x13</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x14</span><span class="plain">],</span>
|
||||
|
@ -854,7 +857,7 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-%04x"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x1c</span><span class="plain">]*256 + </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x1d</span><span class="plain">]);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</ifid>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<format>%s</format>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<format>%S</format>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</identification>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
|
@ -892,7 +895,7 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</description>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<language>"</span><span class="plain">);</span>
|
||||
<span class="identifier">NaturalLanguages::write_language_code</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">Languages::write_ISO_code</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</language>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<group>Inform</group>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">episode_number</span><span class="plain"> >= 0) {</span>
|
||||
|
@ -918,7 +921,7 @@ art and see that its dimensions conform to Treaty of Babel requirements.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<auxiliary>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<leafname>"</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">]);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
||||
<span class="identifier">HTMLFiles::write_xml_safe_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</leafname>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
|
@ -973,7 +976,7 @@ in February 2014.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<releases>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<attached>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<release>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) </span><<span class="cwebmacro">Write release data for an existing story file</span> <span class="cwebmacronumber">11.1.5.1</span>>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) </span><<span class="cwebmacro">Write release data for an existing story file</span> <span class="cwebmacronumber">11.1.5.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">Write release data for an Inform 7 project</span> <span class="cwebmacronumber">11.1.5.2</span>><span class="plain">;</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</release>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</attached>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
|
@ -1079,7 +1082,7 @@ LISP.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<serial>%c%c%c%c%c%c</serial>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
||||
<span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x12</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x13</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x14</span><span class="plain">],</span>
|
||||
<span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x15</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x16</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[0</span><span class="identifier">x17</span><span class="plain">]);</span>
|
||||
|
@ -1136,7 +1139,7 @@ LISP.
|
|||
<span class="plain">} </span><span class="reserved">else</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="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="identifier">HTMLFiles::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="functiontext">PL::Bibliographic::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
|
@ -1172,7 +1175,7 @@ LISP.
|
|||
<span class="plain">} </span><span class="reserved">else</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="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="identifier">HTMLFiles::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="functiontext">PL::Bibliographic::compile_bibliographic_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
|
@ -1252,7 +1255,7 @@ the Blorb-file's filename won't be too long for the file system.
|
|||
<span class="functiontext">PL::Bibliographic::Release::write_var_to_text</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">story_title_VAR</span><span class="plain">);</span>
|
||||
<span class="identifier">END_COMPILATION_MODE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">"story"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">".%s"</span><span class="plain">, </span><span class="identifier">VirtualMachines::get_blorbed_extension</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">".%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">()));</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -1294,8 +1297,8 @@ the Blorb-file's filename won't be too long for the file system.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
||||
<span class="identifier">filename_of_cblorb_report_model</span><span class="plain">,</span>
|
||||
<span class="identifier">filename_of_cblorb_report</span><span class="plain">);</span>
|
||||
<span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">CBLORB_REPORT_MODEL_IRES</span><span class="plain">),</span>
|
||||
<span class="identifier">Task::cblorb_report_file</span><span class="plain">());</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -1308,9 +1311,9 @@ the Blorb-file's filename won't be too long for the file system.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"project folder \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">pathname_of_project</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"project folder \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Projects::path</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">create_Materials</span><span class="plain">)</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release to \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">pathname_of_materials_release</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release to \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Task::release_path</span><span class="plain">());</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -1324,11 +1327,11 @@ the Blorb-file's filename won't be too long for the file system.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile leafname \</span><span class="plain">"</span><span class="string">"</span><span class="plain">); </span><span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">)</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_existing_story_file</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">())</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">());</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_story_file</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"ifiction \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_ifiction_record</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Task::storyfile_file</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"ifiction \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> include\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Task::ifiction_record_file</span><span class="plain">());</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -1350,17 +1353,17 @@ released along with the work.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">) {</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">large</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">cover_art_format</span><span class="plain">, </span><span class="string">"jpg"</span><span class="plain">) == 0)</span>
|
||||
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">filename_of_large_cover_art_jpeg</span><span class="plain">;</span>
|
||||
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">filename_of_large_cover_art_png</span><span class="plain">;</span>
|
||||
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</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">"cover \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">large</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"picture %d \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">large</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cover \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_large_default_cover_art</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"picture %d \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, 1, </span><span class="identifier">filename_of_large_default_cover_art</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cover \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"picture %d \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, 1, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_website</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_large_default_cover_art</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_small_default_cover_art</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">SMALL_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -1464,7 +1467,7 @@ own credits.
|
|||
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">Pathnames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>folder_to_release_to</span><span class="plain">, </span><span class="identifier">pathname_of_materials_release</span><span class="plain">);</span>
|
||||
<span class="identifier">Pathnames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>folder_to_release_to</span><span class="plain">, </span><span class="identifier">Task::release_path</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
||||
<span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">-</span><span class="element">>brief_description</span><span class="plain">) > 0)?(</span><span class="identifier">af</span><span class="plain">-</span><span class="element">>brief_description</span><span class="plain">):</span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">,</span>
|
||||
|
@ -1472,10 +1475,10 @@ own credits.
|
|||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_booklet</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">Introduction to IF\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">--\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_intro_booklet</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">Introduction to IF\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">--\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">INTRO_BOOKLET_IRES</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_postcard</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">IF Postcard\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">--\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">filename_of_intro_postcard</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">IF Postcard\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">--\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">INTRO_POSTCARD_IRES</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [OTHERCREDITS] = \</span><span class="plain">"</span><span class="string">The postcard was written by Andrew Plotkin "</span>
|
||||
<span class="string">"and designed by Lea Albaugh.\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -1502,29 +1505,29 @@ file online.
|
|||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".js\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Tell Inblorb where to find the website templates</span> <span class="cwebmacronumber">14.2.8.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">interpreter_template_leafname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">VirtualMachines::get_default_interpreter</span><span class="plain">();</span>
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">VirtualMachines::get_blorbed_extension</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">interpreter_template_leafname</span><span class="plain">) == 0)</span>
|
||||
<span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_default_interpreter</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [INTERPRETERSCRIPTS] = \</span><span class="plain">"</span><span class="string"> "</span><span class="plain">);</span>
|
||||
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">af</span><span class="plain">-</span><span class="element">>from_payload</span><span class="plain"> == </span><span class="constant">JAVASCRIPT_PAYLOAD</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">]);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<script src='%S'></script>"</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">af</span><span class="plain">-</span><span class="element">>from_payload</span><span class="plain"> == </span><span class="constant">CSS_PAYLOAD</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="identifier">MATERIALS_FS_AREA</span><span class="plain">]);</span>
|
||||
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-</span><span class="element">>name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<link rel='stylesheet' href='%S' type='text/css' media='all'></link>"</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"interpreter \</span><span class="plain">"</span><span class="string">%w\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">%c\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">interpreter_template_leafname</span><span class="plain">, </span><span class="identifier">ext</span><span class="plain">[0]);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"interpreter \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string"> \</span><span class="plain">"</span><span class="string">%c\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">interpreter_template_leafname</span><span class="plain">, </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">));</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"base64 \</span><span class="plain">"</span><span class="string">%f\</span><span class="plain">"</span><span class="string"> to \</span><span class="plain">"</span><span class="string">%p%c"</span><span class="plain">,</span>
|
||||
<span class="identifier">filename_of_story_file</span><span class="plain">, </span><span class="identifier">pathname_of_released_interpreter</span><span class="plain">, </span><span class="identifier">FOLDER_SEPARATOR</span><span class="plain">);</span>
|
||||
<span class="identifier">Task::storyfile_file</span><span class="plain">(), </span><span class="identifier">Task::released_interpreter_path</span><span class="plain">(), </span><span class="identifier">FOLDER_SEPARATOR</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".js\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
@ -1560,8 +1563,10 @@ with the earliest quoted searched first.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain"><</span><span class="identifier">NO_FS_AREAS</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"template path \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">pathname_of_website_templates</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">]);</span>
|
||||
<span class="identifier">inbuild_nest</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Inbuild::nest_list</span><span class="plain">();</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">inbuild_nest</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">)</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"template path \</span><span class="plain">"</span><span class="string">%p\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">TemplateManager::path_within_nest</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">));</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -1235,9 +1235,10 @@ For instance, <code class="display"><span class="extract">28&-125</span></co
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::epsmap_file</span><span class="plain">();</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">EPS_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">EPS</span><span class="plain"> = &</span><span class="identifier">EPS_struct</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">, </span><span class="identifier">filename_of_epsfile</span><span class="plain">, </span><span class="identifier">ISO_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open EPS map file"</span><span class="plain">, </span><span class="identifier">filename_of_epsfile</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ISO_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open EPS map file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="functiontext">PL::EPSMap::EPS_compile_map</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">);</span>
|
||||
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
|
|
@ -401,7 +401,7 @@ turn by turn.
|
|||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">(), </span><span class="identifier">AND_BIP</span><span class="plain">);</span>
|
||||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">this_is_a_debug_compile</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::debug_enabled</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">())) {</span>
|
||||
<span class="identifier">Produce::inv_call_iname</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">(), </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">ALLOWINSHOWME_HL</span><span class="plain">));</span>
|
||||
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">());</span>
|
||||
<span class="identifier">Produce::val_iname</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">));</span>
|
||||
|
|
|
@ -314,7 +314,7 @@ to translate this to other languages.)
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">create</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain"> = </span><span class="identifier">sc</span><span class="plain">-</span><span class="element">>no_ends</span><span class="plain">++;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = 31;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VirtualMachines::is_16_bit</span><span class="plain">()) </span><span class="identifier">max</span><span class="plain"> = 15;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">())) </span><span class="identifier">max</span><span class="plain"> = 15;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">end</span><span class="plain"> >= </span><span class="identifier">max</span><span class="plain">) </span><<span class="cwebmacro">Issue a too-many-ends problem message</span> <span class="cwebmacronumber">14.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">sc</span><span class="plain">-</span><span class="element">>end_names</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">] = </span><span class="identifier">EW</span><span class="plain">;</span>
|
||||
|
|
|
@ -1926,7 +1926,7 @@ empty.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Spatial::spatial_stage_IV</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
||||
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_OBJECT_INSTANCES</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="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)) {</span>
|
||||
|
|
|
@ -592,7 +592,7 @@ at run-time, so we can't know now how many we will need.
|
|||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">MAP_STORAGE_HL</span><span class="plain">);</span>
|
||||
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">words_used</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
||||
<span class="identifier">Emit::array_divider</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"minimal, as there are no rooms"</span><span class="plain">);</span>
|
||||
<span class="identifier">Emit::array_iname_entry</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">Emit::array_iname_entry</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
|
@ -621,9 +621,6 @@ at run-time, so we can't know now how many we will need.
|
|||
<span class="plain">}</span>
|
||||
<span class="identifier">Emit::array_end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
||||
<span class="identifier">Hierarchy::make_available</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
||||
<span class="identifier">VirtualMachines::note_usage</span><span class="plain">(</span><span class="string">"map"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"map of rooms and doors"</span><span class="plain">,</span>
|
||||
<span class="identifier">words_used</span><span class="plain">, 0, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -254,8 +254,8 @@ from sentences, and this can include I6 properties with no I7 analogue.
|
|||
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_BASE_KINDS</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::lt</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_object</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="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">language_of_play</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="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
||||
<span class="identifier">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain"> = </span><span class="identifier">Kinds::Knowledge::as_subject</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Issue problem message if the name contains a comma</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Assert the printed plural name property for kinds other than thing or kinds of room</span> <span class="cwebmacronumber">11.1.3</span>><span class="plain">;</span>
|
||||
|
@ -273,7 +273,7 @@ from sentences, and this can include I6 properties with no I7 analogue.
|
|||
<span class="identifier">this_is_named_for_something_with_a_printed_name</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Issue problem message if the name contains a comma</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">this_has_a_printed_name</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Assert the printed name property</span> <span class="cwebmacronumber">11.1.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">language_of_play</span><span class="plain"> != </span><span class="identifier">English_language</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()) != </span><span class="identifier">English_language</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Assert male, female, neuter adjectives from grammatical gender</span> <span class="cwebmacronumber">11.1.4</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -335,7 +335,7 @@ a comma, and that's caught here:
|
|||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Instances::get_name_in_play</span><span class="plain">(</span><span class="identifier">I</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">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">k</span><span class="plain"> = </span><span class="identifier">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">language_of_play</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name_in_play</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">begins_with_lower_case</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">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
|
|
|
@ -413,7 +413,7 @@ we assume he is freestanding in the earliest defined room.
|
|||
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_OBJECT_INSTANCES</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="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)) && (</span><span class="identifier">start_room</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<span class="plain">&& (</span><span class="identifier">Instances::get_creating_file</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">) == </span><span class="identifier">primary_source_file</span><span class="plain">))</span>
|
||||
<span class="plain">&& (</span><span class="identifier">Projects::draws_from_source_file</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">(), </span><span class="identifier">Instances::get_creating_file</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">))))</span>
|
||||
<span class="identifier">start_room</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_OBJECT_INSTANCES</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="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)) && (</span><span class="identifier">start_room</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
|
@ -431,7 +431,7 @@ we assume he is freestanding in the earliest defined room.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">start_room</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">existing_story_file</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">start_room</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">() == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Problems::Issue::unlocated_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_NoStartRoom</span><span class="plain">),</span>
|
||||
<span class="string">"There doesn't seem to be any location in this story, so there's "</span>
|
||||
<span class="string">"nowhere for the player to begin. This may be because I have "</span>
|
||||
|
|
|
@ -1594,8 +1594,6 @@ infrastructure, and we access it with a single call.
|
|||
<span class="identifier">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">ad_iname</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">record_count</span><span class="plain">);</span>
|
||||
<span class="identifier">Hierarchy::make_available</span><span class="plain">(</span><span class="identifier">Emit::tree</span><span class="plain">(), </span><span class="identifier">ad_iname</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">VirtualMachines::note_usage</span><span class="plain">(</span><span class="string">"action"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 12, 0, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">DB_Action_Details_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">DB_ACTION_DETAILS_HL</span><span class="plain">);</span>
|
||||
<span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">DB_Action_Details_iname</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">act_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_named_call_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"act"</span><span class="plain">);</span>
|
||||
|
@ -1783,13 +1781,13 @@ infrastructure, and we access it with a single call.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Actions::index</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</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="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">,</span>
|
||||
<span class="identifier">extension_file</span><span class="plain"> **</span><span class="identifier">ext</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="reserved">int</span><span class="plain"> </span><span class="identifier">f</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="reserved">int</span><span class="plain"> </span><span class="identifier">bold</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">heading</span><span class="plain"> **</span><span class="identifier">current_area</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="reserved">int</span><span class="plain"> *</span><span class="identifier">new_par</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bold</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">on_details_page</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">>use_verb_routine_in_I6_library</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">f</span><span class="plain">;</span>
|
||||
<span class="identifier">heading</span><span class="plain"> *</span><span class="identifier">definition_area</span><span class="plain"> = </span><span class="identifier">Sentences::Headings::of_wording</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">>present_name</span><span class="plain">);</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">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) {</span>
|
||||
<span class="identifier">extension_file</span><span class="plain"> *</span><span class="identifier">this_extension</span><span class="plain"> =</span>
|
||||
<span class="identifier">inform_extension</span><span class="plain"> *</span><span class="identifier">this_extension</span><span class="plain"> =</span>
|
||||
<span class="identifier">Sentences::Headings::get_extension_containing</span><span class="plain">(</span><span class="identifier">definition_area</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (*</span><span class="identifier">ext</span><span class="plain"> != </span><span class="identifier">this_extension</span><span class="plain">) {</span>
|
||||
<span class="plain">*</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">this_extension</span><span class="plain">;</span>
|
||||
|
@ -1800,20 +1798,20 @@ infrastructure, and we access it with a single call.
|
|||
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</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="plain">*</span><span class="identifier">new_par</span><span class="plain"> = </span><span class="identifier">TRUE</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">ext</span><span class="plain"> != </span><span class="identifier">standard_rules_extension</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">Extensions::is_standard</span><span class="plain">(*</span><span class="identifier">ext</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">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_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">"<b>Actions defined by the extension "</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::Files::write_name_to_file</span><span class="plain">(*</span><span class="identifier">ext</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::write_name_to_file</span><span class="plain">(*</span><span class="identifier">ext</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" by "</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::Files::write_author_to_file</span><span class="plain">(*</span><span class="identifier">ext</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">Extensions::write_author_to_file</span><span class="plain">(*</span><span class="identifier">ext</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</b>"</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">f</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">*</span><span class="identifier">new_par</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">definition_area</span><span class="plain"> != *</span><span class="identifier">current_area</span><span class="plain">) && (*</span><span class="identifier">ext</span><span class="plain"> == </span><span class="identifier">standard_rules_extension</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">definition_area</span><span class="plain"> != *</span><span class="identifier">current_area</span><span class="plain">) && (</span><span class="identifier">Extensions::is_standard</span><span class="plain">(*</span><span class="identifier">ext</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_OPEN</span><span class="plain">(</span><span class="string">"p"</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="identifier">Sentences::Headings::get_text</span><span class="plain">(</span><span class="identifier">definition_area</span><span class="plain">);</span>
|
||||
|
|
|
@ -291,7 +291,7 @@ we divide these headwords into five "natures":
|
|||
<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">extension_file</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">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, &</span><span class="identifier">ext</span><span class="plain">, &</span><span class="identifier">current_area</span><span class="plain">, </span><span class="identifier">f</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">FALSE</span><span class="plain">);</span>
|
||||
|
@ -305,7 +305,7 @@ we divide these headwords into five "natures":
|
|||
<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">extension_file</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">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">"<Actions"</span><span class="plain">,</span>
|
||||
<span class="identifier">an</span><span class="plain">-></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>
|
||||
|
@ -339,12 +339,12 @@ we divide these headwords into five "natures":
|
|||
<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">extension_file</span><span class="plain"> *</span><span class="identifier">ef</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">>present_name</span><span class="plain">)) == </span><span class="identifier">ef</span><span class="plain">-></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::Documentation::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">ef</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="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">>present_name</span><span class="plain">)) == </span><span class="identifier">E</span><span class="plain">-></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">>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>
|
||||
|
|
|
@ -130,12 +130,12 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Patterns::Named::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">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Actions::Patterns::Named::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">named_action_pattern</span><span class="plain"> *</span><span class="identifier">nap</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">nap</span><span class="plain">, </span><span class="reserved">named_action_pattern</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">nap</span><span class="plain">-</span><span class="element">>text_of_declaration</span><span class="plain">)) == </span><span class="identifier">ef</span><span class="plain">-></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::Documentation::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">ef</span><span class="plain">, </span><span class="string">"Kinds of action"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kind of action"</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">nap</span><span class="plain">-</span><span class="element">>text_of_declaration</span><span class="plain">)) == </span><span class="identifier">E</span><span class="plain">-></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">"Kinds of action"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kind of action"</span><span class="plain">,</span>
|
||||
<span class="identifier">nap</span><span class="plain">-</span><span class="element">>text_of_declaration</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>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue