Directory extensions able to use their own figures, sounds and internal files

This commit is contained in:
Graham Nelson 2023-02-01 23:17:23 +00:00
parent ccff6ddc47
commit 7af87e5206
46 changed files with 604 additions and 286 deletions

View File

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W18 'Krypton' (30 January 2023)
[Version](notes/versioning.md): 10.2.0-beta+6W19 'Krypton' (1 February 2023)
## About Inform

View File

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 30 January 2023
Build Number: 6W18
Build Date: 1 February 2023
Build Number: 6W19

View File

@ -386,7 +386,7 @@ here, which only happens when special runs are made for compiler testing.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tests_run</span><span class="plain-syntax"> = </span><a href="1-itc.html#SP7" class="function-link"><span class="function-syntax">InternalTests::run</span></a><span class="plain-syntax">(2);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tests_run</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">exit</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::specify_index_requirements</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP20" class="function-link"><span class="function-syntax">Task::specify_index_requirements</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">INTER_DA</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSkill::set_debugging</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">INFORM_INTER_DA</span><span class="plain-syntax">))</span>

View File

@ -469,10 +469,6 @@ 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="commentary">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="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::large_cover_art_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">JPEG</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
@ -483,21 +479,28 @@ and Sounds, if any, live: in their own subfolders.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform Map.eps"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>This is also where the originals (not the released copies) of the Figures
and Sounds, if any, live: in their own subfolders, or "departments".
</p>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::figures_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::resources_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::sounds_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">);</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::figures_department</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::data_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Data"</span><span class="plain-syntax">);</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::sounds_department</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::data_department</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Data"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>On a release run, Inblorb will populate the Release subfolder of Materials;
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </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.
@ -509,16 +512,16 @@ it can all be generated again.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Release"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_figures_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP17" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_sounds_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP17" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_interpreter_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP17" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"interpreter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"interpreter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>EPS-format files are vector art, rather than raster art, and are produced
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>EPS-format files are vector art, rather than raster art, and are produced
with the intention that authors can tidy them up afterwards using programs
like Adobe Illustrator. By default they aren't produced, so that the following
flag stays <span class="extract"><span class="extract-syntax">FALSE</span></span>:
@ -544,7 +547,7 @@ flag stays <span class="extract"><span class="extract-syntax">FALSE</span></span
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">do_not_generate_problems</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>And so, finally, the following triggers the indexing process.
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And so, finally, the following triggers the indexing process.
</p>
<pre class="displayed-code all-displayed-code code-font">

View File

@ -89,6 +89,16 @@ group.
<span class="plain-syntax"> </span><span class="string-syntax">"Specifically, %2."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_DIRNAME_CE:</span>
<span class="plain-syntax"> </span><a href="2-sq.html#SP1" class="function-link"><span class="function-syntax">Problems::quote_work</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">details</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">Untestable</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The extension %1, which your source text makes use of, is stored "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"in a directory (which is fine), but does not follow the rules for "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"what that directory is called (which is not fine). Specifically, %2."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">METADATA_MALFORMED_CE:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-sq.html#SP1" class="function-link"><span class="function-syntax">Problems::quote_work</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>

View File

@ -324,15 +324,15 @@ to match this width, preserving the aspect ratio.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="string-syntax">"&lt;br&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">sample</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">sample</span><span class="plain-syntax">, </span><span class="string-syntax">"%d.%01dkHz"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pSampleRate</span><span class="plain-syntax">/1000, (</span><span class="identifier-syntax">pSampleRate</span><span class="plain-syntax">%1000)/100);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman_t</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.Sampled"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sample</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman_t</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.Sampled"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sample</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">sample</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pChannels</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">Localisation::roman</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.Mono"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.Stereo"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.Stereo"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="string-syntax">" ("</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bitrate</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bitrate</span><span class="plain-syntax">, </span><span class="string-syntax">"%d.%01d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pBitsPerSecond</span><span class="plain-syntax">/1000, (</span><span class="identifier-syntax">pSampleRate</span><span class="plain-syntax">%1000)/100);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman_t</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.BitRate"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bitrate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman_t</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.Fi.BitRate"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bitrate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bitrate</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">description</span><span class="plain-syntax">, </span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
</pre>

View File

@ -175,14 +175,14 @@ isn't set up to allow more, so this error is not easy to generate.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stand_alone</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_explicitly_set</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_index</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_index</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problems_explicitly_set</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><a href="../core-module/1-pp2.html#SP1" class="function-link"><span class="function-syntax">ProgressBar::enable_or_disable</span></a><span class="plain-syntax">(</span><span class="constant-syntax">FALSE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/2-dl.html#SP5" class="function-link"><span class="function-syntax">Log::get_debug_log_filename</span></a><span class="plain-syntax">() == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/2-dl.html#SP9" class="function-link"><span class="function-syntax">Log::set_aspect_from_command_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"nothing"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">silence_is_golden</span><span class="plain-syntax">) </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">silence_is_golden</span><span class="plain-syntax">) </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="comment-syntax"> disable it</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>&#167;2.3. </b><a href="../supervisor-module/index.html" class="internal">supervisor</a> supplies us with a folder in which to write the debugging log
@ -212,7 +212,7 @@ but we won't assume that. Remember, <a href="../supervisor-module/index.html" cl
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP10" class="function-link"><span class="function-syntax">CommandLine::play_back_log</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::problems_enabled</span></a><span class="plain-syntax">()) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::problems_enabled</span></a><span class="plain-syntax">()) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::build_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PF</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Problems.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../problems-module/2-pl3.html#SP19" class="function-link"><span class="function-syntax">StandardProblems::start_problems_report</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PF</span><span class="plain-syntax">);</span>
@ -412,6 +412,7 @@ compiler via Delia scripts in <span class="extract"><span class="extract-syntax"
<span class="definition-keyword">enum</span> <span class="constant-syntax">SIGILS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_OUTPUT_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SILENCE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHECK_RESOURCES_CLSW</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register command-line arguments</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
@ -430,6 +431,8 @@ compiler via Delia scripts in <span class="extract"><span class="extract-syntax"
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"display progress percentages"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP6" class="function-link"><span class="function-syntax">CommandLine::declare_boolean_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SIGILS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"sigils"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"print Problem message sigils"</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP6" class="function-link"><span class="function-syntax">CommandLine::declare_boolean_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CHECK_RESOURCES_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"resource-checking"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"check that figures, sounds and similar resources exist at compile-time"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP6" class="function-link"><span class="function-syntax">CommandLine::declare_boolean_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DIAGNOSTICS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"diagnostics"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"if no problems occur, write diagnostics files to directory X"</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">REQUIRE_PROBLEM_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"require-problem"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
@ -450,15 +453,16 @@ rather than <span class="extract"><span class="extract-syntax">core</span></span
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CRASHALL_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugger_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../problems-module/2-pl0.html#SP5" class="function-link"><span class="function-syntax">ProblemSigils::crash_on_problems</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEX_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEX_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">index_explicitly_set</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEMS_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEMS_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_problems</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">problems_explicitly_set</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CENSUS_UPDATE_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::disable_or_enable_census</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CENSUS_UPDATE_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::disable_or_enable_census</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROGRESS_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-pp2.html#SP1" class="function-link"><span class="function-syntax">ProgressBar::enable_or_disable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SIGILS_CLSW:</span><span class="plain-syntax"> </span><a href="../problems-module/2-pl0.html#SP4" class="function-link"><span class="function-syntax">ProblemSigils::echo_sigils</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">REQUIRE_PROBLEM_CLSW:</span><span class="plain-syntax"> </span><a href="../problems-module/2-pl0.html#SP3" class="function-link"><span class="function-syntax">ProblemSigils::require</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DIAGNOSTICS_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">diagnostics_path</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CHECK_RESOURCES_CLSW:</span><span class="plain-syntax"> </span><a href="../multimedia-module/2-rf.html#SP1" class="function-link"><span class="function-syntax">ResourceFinder::set_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_OUTPUT_CLSW:</span><span class="plain-syntax"> </span><a href="../core-module/1-itc.html#SP6" class="function-link"><span class="function-syntax">InternalTests::set_file</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SILENCE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">silence_is_golden</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View File

@ -70,37 +70,37 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 71.2% in compilation to Inter</span>
<span class="plain-syntax"> 50.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.8% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 2.0% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.8% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.4% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 1.0% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.6% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.6% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 0.4% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.2% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.2% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
<span class="plain-syntax"> 0.2% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
<span class="plain-syntax"> 0.2% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
<span class="plain-syntax"> 3.2% not specifically accounted for</span>
<span class="plain-syntax"> 70.9% in compilation to Inter</span>
<span class="plain-syntax"> 50.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.9% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.7% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.3% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 1.3% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.1% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 0.3% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
<span class="plain-syntax"> 2.8% not specifically accounted for</span>
<span class="plain-syntax"> 25.8% in running Inter pipeline</span>
<span class="plain-syntax"> 10.2% in step 14/15: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 5.6% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 5.2% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 1.8% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 0.4% in step 12/15: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.4% in step 4/15: compile-splats</span>
<span class="plain-syntax"> 0.4% in step 7/15: shorten-wiring</span>
<span class="plain-syntax"> 0.4% in step 8/15: detect-indirect-calls</span>
<span class="plain-syntax"> 0.2% in step 11/15: eliminate-redundant-labels</span>
<span class="plain-syntax"> 1.2% not specifically accounted for</span>
<span class="plain-syntax"> 2.6% in supervisor</span>
<span class="plain-syntax"> 0.4% not specifically accounted for</span>
<span class="plain-syntax"> 10.1% in step 14/15: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 5.7% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 5.3% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 1.7% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 0.3% in step 12/15: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in step 4/15: compile-splats</span>
<span class="plain-syntax"> 0.3% in step 7/15: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in step 8/15: detect-indirect-calls</span>
<span class="plain-syntax"> 0.1% in step 11/15: eliminate-redundant-labels</span>
<span class="plain-syntax"> 0.9% not specifically accounted for</span>
<span class="plain-syntax"> 2.5% in supervisor</span>
<span class="plain-syntax"> 0.6% not specifically accounted for</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most
instances, and also of how Inform's memory tends to be used in practice.
@ -109,53 +109,53 @@ represent less than 1/1000th of the total.
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 123441K = 121 MB</span>
<span class="plain-syntax">Total memory consumption was 121434K = 119 MB</span>
<span class="plain-syntax"> ---- was used for 2056836 objects, in 366558 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> ---- was used for 2058109 objects, in 366643 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> 33.0% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 20.6% text_stream_array 4639 x 100 = 463900 objects, 26126848 bytes</span>
<span class="plain-syntax"> 19.5% linked_list 44089 objects, 24689840 bytes</span>
<span class="plain-syntax"> 11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes</span>
<span class="plain-syntax"> 10.5% inter_error_stash_array 102 x 1024 = 104448 objects, 13372608 bytes</span>
<span class="plain-syntax"> 8.2% parse_node 130351 objects, 10428080 bytes</span>
<span class="plain-syntax"> 6.0% verb_conjugation 164 objects, 7610912 bytes</span>
<span class="plain-syntax"> 33.6% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 21.0% text_stream_array 4649 x 100 = 464900 objects, 26183168 bytes</span>
<span class="plain-syntax"> 19.8% linked_list 44171 objects, 24735760 bytes</span>
<span class="plain-syntax"> 11.3% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes</span>
<span class="plain-syntax"> 10.7% inter_error_stash_array 102 x 1024 = 104448 objects, 13372608 bytes</span>
<span class="plain-syntax"> 8.3% parse_node 130355 objects, 10428400 bytes</span>
<span class="plain-syntax"> 6.1% verb_conjugation 164 objects, 7610912 bytes</span>
<span class="plain-syntax"> 4.4% parse_node_annotation_array 348 x 500 = 174000 objects, 5579136 bytes</span>
<span class="plain-syntax"> 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 2.7% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes</span>
<span class="plain-syntax"> 1.7% scan_directory 528 objects, 2179584 bytes</span>
<span class="plain-syntax"> 1.8% scan_directory 548 objects, 2262144 bytes</span>
<span class="plain-syntax"> 1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes</span>
<span class="plain-syntax"> 1.6% inter_schema_token 14131 objects, 2034864 bytes</span>
<span class="plain-syntax"> 1.6% inter_schema_token 14043 objects, 2022192 bytes</span>
<span class="plain-syntax"> 1.4% package_request 21191 objects, 1864808 bytes</span>
<span class="plain-syntax"> 1.4% vocabulary_entry_array 164 x 100 = 16400 objects, 1842048 bytes</span>
<span class="plain-syntax"> 1.2% dict_entry_array 475 x 100 = 47500 objects, 1535200 bytes</span>
<span class="plain-syntax"> 1.1% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 1.1% inter_symbols_table 26612 objects, 1490272 bytes</span>
<span class="plain-syntax"> 1.0% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
<span class="plain-syntax"> 1.0% inter_package 26612 objects, 1277376 bytes</span>
<span class="plain-syntax"> 0.8% map_data 677 objects, 1137360 bytes</span>
<span class="plain-syntax"> 1.2% dict_entry_array 477 x 100 = 47700 objects, 1541664 bytes</span>
<span class="plain-syntax"> 1.2% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 1.1% inter_symbols_table 26637 objects, 1491672 bytes</span>
<span class="plain-syntax"> 1.1% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
<span class="plain-syntax"> 1.0% inter_package 26637 objects, 1278576 bytes</span>
<span class="plain-syntax"> 0.9% map_data 677 objects, 1137360 bytes</span>
<span class="plain-syntax"> 0.8% id_body 947 objects, 1083368 bytes</span>
<span class="plain-syntax"> 0.7% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.8% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.7% excerpt_meaning 3122 objects, 974064 bytes</span>
<span class="plain-syntax"> 0.7% production 3956 objects, 917792 bytes</span>
<span class="plain-syntax"> 0.7% ptoken 8587 objects, 893048 bytes</span>
<span class="plain-syntax"> 0.6% grammatical_usage 3641 objects, 873840 bytes</span>
<span class="plain-syntax"> 0.6% inter_schema_node 9056 objects, 869376 bytes</span>
<span class="plain-syntax"> 0.7% production 3957 objects, 918024 bytes</span>
<span class="plain-syntax"> 0.7% ptoken 8588 objects, 893152 bytes</span>
<span class="plain-syntax"> 0.7% grammatical_usage 3641 objects, 873840 bytes</span>
<span class="plain-syntax"> 0.6% individual_form 2571 objects, 863856 bytes</span>
<span class="plain-syntax"> 0.6% inter_schema_node 8968 objects, 860928 bytes</span>
<span class="plain-syntax"> 0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
<span class="plain-syntax"> 0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
<span class="plain-syntax"> 0.3% verb_usage 1148 objects, 394912 bytes</span>
<span class="plain-syntax"> 0.2% rule 470 objects, 368480 bytes</span>
<span class="plain-syntax"> 0.2% dictionary 7622 objects, 365856 bytes</span>
<span class="plain-syntax"> 0.2% dictionary 7661 objects, 367728 bytes</span>
<span class="plain-syntax"> 0.2% verb_form 388 objects, 350752 bytes</span>
<span class="plain-syntax"> 0.2% noun 2389 objects, 286680 bytes</span>
<span class="plain-syntax"> 0.2% compilation_subtask 3367 objects, 269360 bytes</span>
<span class="plain-syntax"> 0.2% inference_subject 672 objects, 263424 bytes</span>
<span class="plain-syntax"> 0.2% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes</span>
<span class="plain-syntax"> 0.1% vanilla_function 3706 objects, 237184 bytes</span>
<span class="plain-syntax"> 0.1% vanilla_function 3716 objects, 237824 bytes</span>
<span class="plain-syntax"> 0.1% binary_predicate 326 objects, 172128 bytes</span>
<span class="plain-syntax"> 0.1% hierarchy_location 1172 objects, 168768 bytes</span>
<span class="plain-syntax"> 0.1% hierarchy_location 1178 objects, 169632 bytes</span>
<span class="plain-syntax"> 0.1% linguistic_stock_item 3329 objects, 159792 bytes</span>
<span class="plain-syntax"> 0.1% rule_family_data 401 objects, 147568 bytes</span>
<span class="plain-syntax"> 0.1% nonterminal 773 objects, 142232 bytes</span>
@ -192,8 +192,8 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- heading 204 objects, 45696 bytes</span>
<span class="plain-syntax"> ---- text_substitution 437 objects, 41952 bytes</span>
<span class="plain-syntax"> ---- to_family_data 502 objects, 40160 bytes</span>
<span class="plain-syntax"> ---- activity_list_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- anl_clause_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- activity_list_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes</span>
<span class="plain-syntax"> ---- parsing_data 677 objects, 37912 bytes</span>
<span class="plain-syntax"> ---- production_list 630 objects, 35280 bytes</span>
@ -212,17 +212,17 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- action_name 90 objects, 20160 bytes</span>
<span class="plain-syntax"> ---- filename 489 objects, 19560 bytes</span>
<span class="plain-syntax"> ---- timed_rules_rfd_data 401 objects, 19248 bytes</span>
<span class="plain-syntax"> ---- method 384 objects, 18432 bytes</span>
<span class="plain-syntax"> ---- method 390 objects, 18720 bytes</span>
<span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span>
<span class="plain-syntax"> ---- instance 167 objects, 17368 bytes</span>
<span class="plain-syntax"> ---- JSON_value 194 objects, 17072 bytes</span>
<span class="plain-syntax"> ---- JSON_value 195 objects, 17160 bytes</span>
<span class="plain-syntax"> ---- to_phrase_request 62 objects, 16864 bytes</span>
<span class="plain-syntax"> ---- build_vertex 138 objects, 16560 bytes</span>
<span class="plain-syntax"> ---- pathname 403 objects, 16120 bytes</span>
<span class="plain-syntax"> ---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- adjective 137 objects, 15344 bytes</span>
<span class="plain-syntax"> ---- pathname 383 objects, 15320 bytes</span>
<span class="plain-syntax"> ---- parse_node_tree 17 objects, 14824 bytes</span>
<span class="plain-syntax"> ---- booking_list 407 objects, 13024 bytes</span>
<span class="plain-syntax"> ---- adjective_iname_holder 320 objects, 12800 bytes</span>
@ -247,37 +247,37 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- value_property_data 84 objects, 4704 bytes</span>
<span class="plain-syntax"> ---- parsing_pp_data 96 objects, 4608 bytes</span>
<span class="plain-syntax"> ---- build_script 138 objects, 4416 bytes</span>
<span class="plain-syntax"> ---- command_line_switch 49 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- command_line_switch 51 objects, 4080 bytes</span>
<span class="plain-syntax"> ---- compatibility_specification 80 objects, 3840 bytes</span>
<span class="plain-syntax"> ---- parse_node_annotation_type 119 objects, 3808 bytes</span>
<span class="plain-syntax"> ---- submodule_request 85 objects, 3400 bytes</span>
<span class="plain-syntax"> ---- method_set 106 objects, 3392 bytes</span>
<span class="plain-syntax"> ---- property_setting_bp_data 84 objects, 3360 bytes</span>
<span class="plain-syntax"> ---- method_set 105 objects, 3360 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes</span>
<span class="plain-syntax"> ---- semver_range 31 objects, 3224 bytes</span>
<span class="plain-syntax"> ---- inform_extension 16 objects, 3200 bytes</span>
<span class="plain-syntax"> ---- definition 44 objects, 3168 bytes</span>
<span class="plain-syntax"> ---- either_or_property_data 62 objects, 2976 bytes</span>
<span class="plain-syntax"> ---- target_vm 20 objects, 2880 bytes</span>
<span class="plain-syntax"> ---- inform_extension 16 objects, 2688 bytes</span>
<span class="plain-syntax"> ---- use_option 29 objects, 2552 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- part_of_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- equation_symbol 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- scene 1 object, 2352 bytes</span>
<span class="plain-syntax"> ---- JSON_type 31 objects, 2232 bytes</span>
<span class="plain-syntax"> ---- JSON_single_requirement 43 objects, 2064 bytes</span>
<span class="plain-syntax"> ---- build_step 28 objects, 2016 bytes</span>
<span class="plain-syntax"> ---- compiler_feature 30 objects, 1680 bytes</span>
<span class="plain-syntax"> ---- pronoun_usage 42 objects, 1680 bytes</span>
<span class="plain-syntax"> ---- compiler_feature 30 objects, 1680 bytes</span>
<span class="plain-syntax"> ---- table_contribution_array 1 x 100 objects, 1632 bytes</span>
<span class="plain-syntax"> ---- inform_pipeline 24 objects, 1536 bytes</span>
<span class="plain-syntax"> ---- noun_filter_token 22 objects, 1408 bytes</span>
<span class="plain-syntax"> ---- inter_node_array 35 objects, 1400 bytes</span>
<span class="plain-syntax"> ---- special_meaning_holder 35 objects, 1400 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- constant_phrase 20 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- invocation_options_array 1 x 100 objects, 1224 bytes</span>
<span class="plain-syntax"> ---- direction_inference_data 30 objects, 1200 bytes</span>
<span class="plain-syntax"> ---- JSON_requirement 36 objects, 1152 bytes</span>
@ -286,8 +286,8 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- submodule_identity 33 objects, 1056 bytes</span>
<span class="plain-syntax"> ---- runtime_kind_structure 13 objects, 1040 bytes</span>
<span class="plain-syntax"> ---- quantifier 16 objects, 1024 bytes</span>
<span class="plain-syntax"> ---- pipeline_stage 20 objects, 960 bytes</span>
<span class="plain-syntax"> ---- named_rulebook_outcome 15 objects, 960 bytes</span>
<span class="plain-syntax"> ---- pipeline_stage 20 objects, 960 bytes</span>
<span class="plain-syntax"> ---- control_structure_phrase 12 objects, 864 bytes</span>
<span class="plain-syntax"> ---- web_md 6 objects, 864 bytes</span>
<span class="plain-syntax"> ---- cached_understanding 21 objects, 840 bytes</span>
@ -300,20 +300,20 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- implication 13 objects, 624 bytes</span>
<span class="plain-syntax"> ---- code_generation 1 object, 576 bytes</span>
<span class="plain-syntax"> ---- generated_segment 14 objects, 560 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 14 objects, 560 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse_room 10 objects, 560 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 14 objects, 560 bytes</span>
<span class="plain-syntax"> ---- rulebook_outcome 17 objects, 544 bytes</span>
<span class="plain-syntax"> ---- small_word_set 11 objects, 528 bytes</span>
<span class="plain-syntax"> ---- chapter_md 6 objects, 528 bytes</span>
<span class="plain-syntax"> ---- module 6 objects, 480 bytes</span>
<span class="plain-syntax"> ---- equation 4 objects, 480 bytes</span>
<span class="plain-syntax"> ---- small_word_set 11 objects, 528 bytes</span>
<span class="plain-syntax"> ---- inform_language 6 objects, 480 bytes</span>
<span class="plain-syntax"> ---- bp_family 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- equation 4 objects, 480 bytes</span>
<span class="plain-syntax"> ---- module 6 objects, 480 bytes</span>
<span class="plain-syntax"> ---- i6_memory_setting 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- bp_family 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- inference_family 11 objects, 440 bytes</span>
<span class="plain-syntax"> ---- article_usage 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- inbuild_genre 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- source_file 5 objects, 360 bytes</span>
<span class="plain-syntax"> ---- inbuild_genre 7 objects, 336 bytes</span>
<span class="plain-syntax"> ---- tree_inventory 1 object, 320 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
@ -323,52 +323,52 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- inter_pipeline 1 object, 312 bytes</span>
<span class="plain-syntax"> ---- up_family 9 objects, 288 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- inbuild_nest 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- verb_usage_tier 5 objects, 240 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 224 bytes</span>
<span class="plain-syntax"> ---- adjective_meaning_family 7 objects, 224 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 224 bytes</span>
<span class="plain-syntax"> ---- test_scenario 1 object, 216 bytes</span>
<span class="plain-syntax"> ---- release_instructions 1 object, 208 bytes</span>
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- kit_dependency 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- element_activation 6 objects, 192 bytes</span>
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- element_activation 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- attachment_instruction 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inbuild_nest 3 objects, 120 bytes</span>
<span class="plain-syntax"> ---- local_block_value 2 objects, 112 bytes</span>
<span class="plain-syntax"> ---- inform_kit_ittt 2 objects, 96 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax">100.0% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 57.6% text stream storage 72845148 bytes in 481444 claims</span>
<span class="plain-syntax"> 4.2% dictionary storage 5313536 bytes in 7622 claims</span>
<span class="plain-syntax"> ---- sorting 1568 bytes in 159 claims</span>
<span class="plain-syntax"> 5.6% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 8.5% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 56.9% text stream storage 70764524 bytes in 482127 claims</span>
<span class="plain-syntax"> 4.2% dictionary storage 5335040 bytes in 7661 claims</span>
<span class="plain-syntax"> ---- sorting 1696 bytes in 183 claims</span>
<span class="plain-syntax"> 5.7% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 8.6% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 0.2% documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 3.6% inter symbols storage 4558048 bytes in 27977 claims</span>
<span class="plain-syntax"> 13.2% inter bytecode storage 16767448 bytes in 14 claims</span>
<span class="plain-syntax"> 4.9% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 3.6% inter symbols storage 4562240 bytes in 28004 claims</span>
<span class="plain-syntax"> 13.4% inter bytecode storage 16767540 bytes in 14 claims</span>
<span class="plain-syntax"> 5.0% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 1.3% instance-of-kind counting 1731856 bytes in 1 claim</span>
<span class="plain-syntax"> ---- compilation workspace for objects 22136 bytes in 25 claims</span>
@ -376,7 +376,7 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- code generation workspace for objects 3480 bytes in 19 claims</span>
<span class="plain-syntax"> 0.2% emitter array storage 280544 bytes in 2001 claims</span>
<span class="plain-syntax">-147.-8% was overhead - -186919368 bytes = -182538K = -178 MB</span>
<span class="plain-syntax">-150.-4% was overhead - -187098264 bytes = -182713K = -178 MB</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's
@ -419,7 +419,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
<a href="preform-diagnostics.txt" download>
<button class="download-button">
<img src="../docs-assets/download.png" alt="download icon" height=16 width=16>
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 399.3kB)
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 399.4kB)
</button>
</a>
</p>

View File

@ -60,48 +60,49 @@
<span class="plain-syntax">Usage: inform7 [OPTIONS]</span>
<span class="plain-syntax">for translating Inform source text to Inter:</span>
<span class="plain-syntax"> -basic use Basic Inform language</span>
<span class="plain-syntax"> -case X make any source links refer to the source in extension example X</span>
<span class="plain-syntax"> -census perform an extensions census (default is -no-census)</span>
<span class="plain-syntax"> -debug compile with debugging features even on a Release (default is -no-debug)</span>
<span class="plain-syntax"> -format=X compile to the format X (default is Inform6/32)</span>
<span class="plain-syntax"> -o X use file X as the compiled output (not for use with -project)</span>
<span class="plain-syntax"> -project X work within the Inform project X</span>
<span class="plain-syntax"> -release compile a version suitable for a Release build (default is -no-release)</span>
<span class="plain-syntax"> -rng fix the random number generator of the story file (for testing) (default is -no-rng)</span>
<span class="plain-syntax"> -source X use file X as the Inform source text</span>
<span class="plain-syntax"> -basic use Basic Inform language</span>
<span class="plain-syntax"> -case X make any source links refer to the source in extension example X</span>
<span class="plain-syntax"> -census perform an extensions census (default is -no-census)</span>
<span class="plain-syntax"> -debug compile with debugging features even on a Release (default is -no-debug)</span>
<span class="plain-syntax"> -format=X compile to the format X (default is Inform6/32)</span>
<span class="plain-syntax"> -o X use file X as the compiled output (not for use with -project)</span>
<span class="plain-syntax"> -project X work within the Inform project X</span>
<span class="plain-syntax"> -release compile a version suitable for a Release build (default is -no-release)</span>
<span class="plain-syntax"> -rng fix the random number generator of the story file (for testing) (default is -no-rng)</span>
<span class="plain-syntax"> -source X use file X as the Inform source text</span>
<span class="plain-syntax">for locating resources in the file system:</span>
<span class="plain-syntax"> -external X use X as the user's home for installed material such as extensions</span>
<span class="plain-syntax"> -internal X use X as the location of built-in material such as the Standard Rules</span>
<span class="plain-syntax"> -nest X add the nest at pathname X to the search list</span>
<span class="plain-syntax"> -transient X use X for transient data such as the extensions census</span>
<span class="plain-syntax"> -external X use X as the user's home for installed material such as extensions</span>
<span class="plain-syntax"> -internal X use X as the location of built-in material such as the Standard Rules</span>
<span class="plain-syntax"> -nest X add the nest at pathname X to the search list</span>
<span class="plain-syntax"> -transient X use X for transient data such as the extensions census</span>
<span class="plain-syntax">for tweaking code generation from Inter:</span>
<span class="plain-syntax"> -kit X include Inter code from the kit called X</span>
<span class="plain-syntax"> -pipeline X specify code-generation pipeline by name (default is "compile")</span>
<span class="plain-syntax"> -pipeline-file X specify code-generation pipeline as file X</span>
<span class="plain-syntax"> -variable X set pipeline variable X (in form name=value)</span>
<span class="plain-syntax"> -kit X include Inter code from the kit called X</span>
<span class="plain-syntax"> -pipeline X specify code-generation pipeline by name (default is "compile")</span>
<span class="plain-syntax"> -pipeline-file X specify code-generation pipeline as file X</span>
<span class="plain-syntax"> -variable X set pipeline variable X (in form name=value)</span>
<span class="plain-syntax">for testing and debugging inform7:</span>
<span class="plain-syntax"> -no-census-update don't update the extensions census (default is -census-update)</span>
<span class="plain-syntax"> -crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)</span>
<span class="plain-syntax"> -diagnostics X if no problems occur, write diagnostics files to directory X (default is -no-diagnostics)</span>
<span class="plain-syntax"> -no-index don't produce an Index (default is -index)</span>
<span class="plain-syntax"> -no-problems don't produce (an HTML) Problems report page (default is -problems)</span>
<span class="plain-syntax"> -no-progress don't display progress percentages (default is -progress)</span>
<span class="plain-syntax"> -require-problem X return 0 unless exactly this Problem message is generated</span>
<span class="plain-syntax"> -sigils print Problem message sigils (default is -no-sigils)</span>
<span class="plain-syntax"> -silence practice 'silence is golden': print only Unix-style errors (default is -no-silence)</span>
<span class="plain-syntax"> -test-output X write output of internal tests to file X</span>
<span class="plain-syntax"> -no-census-update don't update the extensions census (default is -census-update)</span>
<span class="plain-syntax"> -crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)</span>
<span class="plain-syntax"> -diagnostics X if no problems occur, write diagnostics files to directory X (default is -no-diagnostics)</span>
<span class="plain-syntax"> -no-index don't produce an Index (default is -index)</span>
<span class="plain-syntax"> -no-problems don't produce (an HTML) Problems report page (default is -problems)</span>
<span class="plain-syntax"> -no-progress don't display progress percentages (default is -progress)</span>
<span class="plain-syntax"> -require-problem X return 0 unless exactly this Problem message is generated</span>
<span class="plain-syntax"> -no-resource-checking don't check that figures, sounds and similar resources exist at compile-time (default is -resource-checking)</span>
<span class="plain-syntax"> -sigils print Problem message sigils (default is -no-sigils)</span>
<span class="plain-syntax"> -silence practice 'silence is golden': print only Unix-style errors (default is -no-silence)</span>
<span class="plain-syntax"> -test-output X write output of internal tests to file X</span>
<span class="plain-syntax">-at X specify that this tool is installed at X</span>
<span class="plain-syntax">-crash intentionally crash on internal errors, for backtracing (default is -no-crash)</span>
<span class="plain-syntax">-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)</span>
<span class="plain-syntax">-help print this help information</span>
<span class="plain-syntax">-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1</span>
<span class="plain-syntax">-log X write the debugging log to include diagnostics on X</span>
<span class="plain-syntax">-version print out version number</span>
<span class="plain-syntax">-at X specify that this tool is installed at X</span>
<span class="plain-syntax">-crash intentionally crash on internal errors, for backtracing (default is -no-crash)</span>
<span class="plain-syntax">-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)</span>
<span class="plain-syntax">-help print this help information</span>
<span class="plain-syntax">-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1</span>
<span class="plain-syntax">-log X write the debugging log to include diagnostics on X</span>
<span class="plain-syntax">-version print out version number</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="M-cifc.html">&#10094;</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-cu.html">cu</a></li><li class="progresssection"><a href="M-iwtg.html">iwtg</a></li><li class="progresssection"><a href="M-cifc.html">cifc</a></li><li class="progresscurrent">rc</li><li class="progresssection"><a href="M-pm.html">pm</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-pm.html">&#10095;</a></li></ul></div>

View File

@ -9381,7 +9381,7 @@
<action-pattern-past-negated>
(hits 0/978) constraint DS = {18} extremes [4, infinity)
<action-pattern> hits 558/21394 nti 6 constraint (none) extremes [1, infinity)
<action-pattern> hits 558/21424 nti 6 constraint (none) extremes [1, infinity)
English:
asking <s-ap-parameter> to try <ap-three-present>
(hits 0/1005) constraint DS = {6} extremes [5, infinity)
@ -9394,9 +9394,9 @@
trying <ap-three-present>
(hits 0/2266) constraint DS = {6} extremes [2, infinity)
<ap-three-present>
(hits 60/10264) (matched long text) constraint (none) extremes [1, infinity)
(hits 60/10279) (matched long text) constraint (none) extremes [1, infinity)
<actor-description> <ap-three-present>
(hits 65/5437) (matched long text) constraint (none) extremes [2, infinity)
(hits 65/5439) (matched long text) constraint (none) extremes [2, infinity)
<we-are-action-pattern> hits 27/2756 nti 19 constraint (none) extremes [1, infinity)
English:
@ -9474,9 +9474,9 @@
we have not <ap-three-past>
(hits 0/978) constraint DS = {18} extremes [4, infinity)
<actor-description> internal hits 94/13126 nti 9 constraint (none) extremes [1, infinity)
<actor-description> internal hits 94/13130 nti 9 constraint (none) extremes [1, infinity)
<ap-three-present> internal hits 585/24338 nti 10 constraint (none) extremes [1, infinity)
<ap-three-present> internal hits 585/24368 nti 10 constraint (none) extremes [1, infinity)
<ap-three-past> internal nti 11 constraint (none) extremes [1, infinity)
@ -9692,6 +9692,8 @@
English:
<action-name>
(hits 150/165) (matched: 'requesting the story file version') constraint (none) extremes [1, infinity)
<action-pattern>
(hits 0/15) constraint (none) extremes [1, infinity)
<s-descriptive-type-expression>
(hits 15/15) (matched: 'the statue') constraint (none) extremes [1, infinity)
<s-variable>

View File

@ -88,7 +88,7 @@ to the other three; it doesn't even have an activation function.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">mm</li><li class="progresschapter"><a href="2-fgr.html">2</a></li><li class="progressnext"><a href="2-fgr.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">mm</li><li class="progresschapter"><a href="2-rf.html">2</a></li><li class="progressnext"><a href="2-rf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -385,7 +385,7 @@ manages to make a figure, a problem message is thrown.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-se.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresscurrent">ef</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-if.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-se.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-rf.html">rf</a></li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresscurrent">ef</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-if.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -179,11 +179,15 @@ has been found to create a figure:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figure_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::figures_path</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax"> = </span><a href="2-rf.html#SP1" class="function-link"><span class="function-syntax">ResourceFinder::find_resource</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Task::figures_department</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">FN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-fgr.html#SP9" class="function-link"><span class="function-syntax">Figures::figures_create</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;alttext&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MULTIMEDIA_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Created figure &lt;%W&gt; = filename '%f' = resource ID %d\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="2-fgr.html#SP9" class="function-link"><span class="function-syntax">Figures::figures_create</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;alttext&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MULTIMEDIA_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Created figure &lt;%W&gt; = filename '%f' = resource ID %d\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
@ -362,7 +366,7 @@ the cover art, which is handled by Bibliographic Data.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-mm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">fgr</li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-se.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-rf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-rf.html">rf</a></li><li class="progresscurrent">fgr</li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-se.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -134,7 +134,7 @@ proposition somehow manages to make a file, a problem message is thrown.
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"%N"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ifd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">local_filename</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::data_path</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ifd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">local_filename</span><span class="plain-syntax"> = </span><a href="2-rf.html#SP1" class="function-link"><span class="function-syntax">ResourceFinder::find_resource</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Task::data_department</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">FN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -197,7 +197,7 @@ created from <span class="extract"><span class="extract-syntax">Figures.w</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-ef.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresscurrent">if</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-ef.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-rf.html">rf</a></li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresscurrent">if</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -0,0 +1,142 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Resource Finder</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Resource Finder' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">multimedia</a></li><li><a href="index.html#2">Chapter 2: Multimedia Features</a></li><li><b>Resource Finder</b></li></ul></div>
<p class="purpose">To find resources such as sound and image files.</p>
<ul class="toc"><li><a href="2-rf.html#SP1">&#167;1. Resource finder</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Resource finder. </b>This simple function is shared by the code for figures, sound effects and
internal data files. When Inform reads a sentence such as:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Sound</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">Organ</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">file</span><span class="plain-syntax"> </span><span class="string-syntax">"Passacaglia.mid"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary">it looks for the file first in the <span class="extract"><span class="extract-syntax">Sounds</span></span> folder of the materials for the
project, and then, if it isn't there, in the <span class="extract"><span class="extract-syntax">Sounds</span></span> folder of the materials
for the extension in which the sentence occurs (if it occurs in an extension).
Here <span class="extract"><span class="extract-syntax">"Sounds"</span></span> is what we will call the department name for sound effects.
</p>
<p class="commentary">This code was introduced as part of the implementation of IE-0001, and for
the first time throws problem messages is named resources do not exist.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">check_resources_are_present</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ResourceFinder::set_mode</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">check_resources_are_present</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; </span><span class="comment-syntax"> set by </span><span class="extract"><span class="extract-syntax">-resource-checking</span></span><span class="comment-syntax"> at command line</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ResourceFinder::find_resource</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ResourceFinder::find_resource</span></span>:<br/>Figures - <a href="2-fgr.html#SP5">&#167;5</a><br/>Sound Effects - <a href="2-se.html#SP5">&#167;5</a><br/>Internal Files - <a href="2-if.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">department</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Extensions::corresponding_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::file_of_origin</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::resources_path</span><span class="plain-syntax">(), </span><span class="identifier-syntax">department</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">?(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Extensions::materials_path</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">), </span><span class="identifier-syntax">department</span><span class="plain-syntax">)):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P1</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">FILE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::fopen</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="string-syntax">"rb"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">fclose</span><span class="plain-syntax">(</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P2</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">FILE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::fopen</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="string-syntax">"rb"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">fclose</span><span class="plain-syntax">(</span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">check_resources_are_present</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P1</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Tried in %p\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P2</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"And also in %p\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">department</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">Untestable</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, which means I am looking for a file called %2, but I'm "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"unable to find it. "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P2</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The file should either be in the '%3' subfolder of the materials folder, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"or in the 'Materials/%3' subfolder of this extension."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The file should be in the '%3' subfolder of the materials folder."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-mm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">rf</li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresssection"><a href="2-se.html">se</a></li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-fgr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View File

@ -171,11 +171,13 @@ has been found to create a sound:
<span class="plain-syntax"> </span><span class="string-syntax">"because it is either empty or contains only spaces."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sound_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::sounds_path</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sound_file</span><span class="plain-syntax"> = </span><a href="2-rf.html#SP1" class="function-link"><span class="function-syntax">ResourceFinder::find_resource</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Task::sounds_department</span><span class="plain-syntax">(), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">FN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-se.html#SP9" class="function-link"><span class="function-syntax">Sounds::sounds_create</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">sound_file</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;alttext&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MULTIMEDIA_CREATIONS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Created sound effect &lt;%W&gt; = filename '%N' = resource ID %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sound_file</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-se.html#SP9" class="function-link"><span class="function-syntax">Sounds::sounds_create</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">sound_file</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;alttext&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MULTIMEDIA_CREATIONS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Created sound effect &lt;%W&gt; = filename '%N' = resource ID %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
@ -319,7 +321,7 @@ created from <span class="extract"><span class="extract-syntax">Figures.w</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-fgr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresscurrent">se</li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-ef.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-fgr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-rf.html">rf</a></li><li class="progresssection"><a href="2-fgr.html">fgr</a></li><li class="progresscurrent">se</li><li class="progresssection"><a href="2-ef.html">ef</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progressnext"><a href="2-ef.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -76,7 +76,7 @@ very similar to each other:
</li><li>&#9679; <a href="2-se.html" class="internal">Sound Effects</a> for playing music or other sounds.
</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresschapter"><a href="2-fgr.html">2</a></li><li class="progressnext"><a href="1-mm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-mm.html">1</a></li><li class="progresschapter"><a href="2-rf.html">2</a></li><li class="progressnext"><a href="1-mm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View File

@ -75,6 +75,11 @@
<p class="chapterentry"><a name="2"></a>
<span class="chaptertitle">Chapter 2: Multimedia Features</span></p>
<ul class="sectionlist">
<li>
<p class="sectionentry"><a href="2-rf.html">
<spon class="sectiontitle">Resource Finder</span></a> -
<span class="sectionpurpose">To find resources such as sound and image files.</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-fgr.html">
<spon class="sectiontitle">Figures</span></a> -

View File

@ -74,6 +74,7 @@ fields are blank.
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">OPEN_FAILED_CE</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">METADATA_MALFORMED_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_MISWORDED_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_BAD_DIRNAME_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_TITLE_TOO_LONG_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_AUTHOR_TOO_LONG_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_CE</span><span class="plain-syntax"> </span><span class="comment-syntax"> an error generated by the </span><span class="extract"><span class="extract-syntax">words</span></span><span class="comment-syntax"> module</span>
@ -121,7 +122,7 @@ fields are blank.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_3">&#167;2.2.3</a>, <a href="5-es.html#SP2_2_3_2">&#167;2.2.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP8">&#167;8</a><br/>Kit Services - <a href="5-ks.html#SP4_3">&#167;4.3</a>, <a href="5-ks.html#SP4_3_1">&#167;4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">&#167;4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">&#167;4.3.2</a>, <a href="5-ks.html#SP11">&#167;11</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a>, <a href="5-ls.html#SP2_2">&#167;2.2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP33">&#167;33</a>, <a href="5-ps2.html#SP34">&#167;34</a><br/>Headings - <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_3">&#167;2.2.3</a>, <a href="5-es.html#SP2_2_3_2">&#167;2.2.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP8">&#167;8</a><br/>Kit Services - <a href="5-ks.html#SP4_3">&#167;4.3</a>, <a href="5-ks.html#SP4_3_1">&#167;4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">&#167;4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">&#167;4.3.2</a>, <a href="5-ks.html#SP11">&#167;11</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a>, <a href="5-ls.html#SP2_2">&#167;2.2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP33">&#167;33</a>, <a href="5-ps2.html#SP34">&#167;34</a><br/>Headings - <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">NB</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
@ -191,6 +192,7 @@ output.
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">error_category</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OPEN_FAILED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"unable to open file %f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details_file</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_MISWORDED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension misworded: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_DIRNAME_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension directory name wrong: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">METADATA_MALFORMED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S has incorrect metadata: %S"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_TITLE_TOO_LONG_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"title too long: %d characters (max is %d)"</span><span class="plain-syntax">,</span>

View File

@ -147,7 +147,7 @@ for later reporting. These are stored in a list.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_3">&#167;2.2.3</a>, <a href="5-es.html#SP2_2_3_2">&#167;2.2.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP8">&#167;8</a><br/>Kit Services - <a href="5-ks.html#SP4_3">&#167;4.3</a>, <a href="5-ks.html#SP4_3_1">&#167;4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">&#167;4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">&#167;4.3.2</a>, <a href="5-ks.html#SP11">&#167;11</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a>, <a href="5-ls.html#SP2_2">&#167;2.2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP33">&#167;33</a>, <a href="5-ps2.html#SP34">&#167;34</a>, <a href="5-ps2.html#SP35_1_2_3">&#167;35.1.2.3</a><br/>Source Text - <a href="6-st.html#SP2">&#167;2</a>, <a href="6-st.html#SP3">&#167;3</a>, <a href="6-st.html#SP6">&#167;6</a>, <a href="6-st.html#SP15">&#167;15</a><br/>Headings - <a href="6-hdn.html#SP11_1">&#167;11.1</a>, <a href="6-hdn.html#SP12_1">&#167;12.1</a>, <a href="6-hdn.html#SP12_2">&#167;12.2</a>, <a href="6-hdn.html#SP14_3">&#167;14.3</a>, <a href="6-hdn.html#SP22_1">&#167;22.1</a>, <a href="6-hdn.html#SP23_2">&#167;23.2</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a>, <a href="6-hdn.html#SP22_3">&#167;22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP3_1">&#167;3.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a>, <a href="6-inc.html#SP7_1">&#167;7.1</a>, <a href="6-inc.html#SP9_1">&#167;9.1</a>, <a href="6-inc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_3">&#167;2.2.3</a>, <a href="5-es.html#SP2_2_3_2">&#167;2.2.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP8">&#167;8</a><br/>Kit Services - <a href="5-ks.html#SP4_3">&#167;4.3</a>, <a href="5-ks.html#SP4_3_1">&#167;4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">&#167;4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">&#167;4.3.2</a>, <a href="5-ks.html#SP11">&#167;11</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a>, <a href="5-ls.html#SP2_2">&#167;2.2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP33">&#167;33</a>, <a href="5-ps2.html#SP34">&#167;34</a>, <a href="5-ps2.html#SP35_1_2_3">&#167;35.1.2.3</a><br/>Source Text - <a href="6-st.html#SP2">&#167;2</a>, <a href="6-st.html#SP3">&#167;3</a>, <a href="6-st.html#SP6">&#167;6</a>, <a href="6-st.html#SP15">&#167;15</a><br/>Headings - <a href="6-hdn.html#SP11_1">&#167;11.1</a>, <a href="6-hdn.html#SP12_1">&#167;12.1</a>, <a href="6-hdn.html#SP12_2">&#167;12.2</a>, <a href="6-hdn.html#SP14_3">&#167;14.3</a>, <a href="6-hdn.html#SP22_1">&#167;22.1</a>, <a href="6-hdn.html#SP23_2">&#167;23.2</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a>, <a href="6-hdn.html#SP22_3">&#167;22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP3_1">&#167;3.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a>, <a href="6-inc.html#SP7_1">&#167;7.1</a>, <a href="6-inc.html#SP9_1">&#167;9.1</a>, <a href="6-inc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no copy to attach to"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP4" class="function-link"><span class="function-syntax">CopyErrors::supply_attached_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span>

View File

@ -109,7 +109,8 @@ which stores data about extensions used by the Inform compiler.
<span class="plain-syntax">}</span>
<span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionBundleManager::new_copy</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionBundleManager::new_copy</span></span>:<br/><a href="4-ebm.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionBundleManager::new_copy</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionBundleManager::new_copy</span></span>:<br/><a href="4-ebm.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">apparent_V</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(16, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">key</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
@ -118,13 +119,29 @@ which stores data about extensions used by the Inform compiler.
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new_raw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">))));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax"> = </span><a href="2-edt.html#SP1" class="function-link"><span class="function-syntax">Editions::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">VersionNumbers::null</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="2-cps.html#SP3" class="function-link"><span class="function-syntax">Copies::new_in_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP2" class="function-link"><span class="function-syntax">Extensions::scan</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::write_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">eb_copy_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_V</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"an extension in directory format must have a directory name ending "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'-vN', giving the version number: for example, 'Advanced Algebra-v2_3_6'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_BAD_DIRNAME_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VersionNumbers::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_V</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the version number '%v' is not the one implied by the directory "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"name '%S', which would be '%v'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">), </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), &amp;</span><span class="identifier-syntax">apparent_V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_BAD_DIRNAME_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">key</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
@ -157,7 +174,13 @@ copy name.
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">canary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extension_metadata.json"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">canary</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ebm.html#SP3" class="function-link"><span class="function-syntax">ExtensionBundleManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::null</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"(%c+)-v([0-9_]+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ebm.html#SP3" class="function-link"><span class="function-syntax">ExtensionBundleManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View File

@ -543,7 +543,7 @@ are immutable, and need to be for the extensions dictionary to work.
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_path</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"%S.i7x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"%S.i7x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Source"</span><span class="plain-syntax">), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>

View File

@ -72,7 +72,7 @@ in the following structure.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_pipeline</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>

View File

@ -93,7 +93,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
It doesn't actually do any scanning to speak of, in fact: we may eventually
learn a lot about the project, but for now we simply initialise to bland

View File

@ -72,7 +72,7 @@ stored in the following structure.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_template</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>

View File

@ -15,6 +15,7 @@ fields are blank.
@e OPEN_FAILED_CE from 1
@e METADATA_MALFORMED_CE
@e EXT_MISWORDED_CE
@e EXT_BAD_DIRNAME_CE
@e EXT_TITLE_TOO_LONG_CE
@e EXT_AUTHOR_TOO_LONG_CE
@e LEXER_CE /* an error generated by the |words| module */
@ -127,6 +128,7 @@ void CopyErrors::write(OUTPUT_STREAM, copy_error *CE) {
switch (CE->error_category) {
case OPEN_FAILED_CE: WRITE("unable to open file %f", CE->details_file); break;
case EXT_MISWORDED_CE: WRITE("extension misworded: %S", CE->details); break;
case EXT_BAD_DIRNAME_CE: WRITE("extension directory name wrong: %S", CE->details); break;
case METADATA_MALFORMED_CE: WRITE("%S has incorrect metadata: %S",
CE->copy->edition->work->genre->genre_name, CE->details); break;
case EXT_TITLE_TOO_LONG_CE: WRITE("title too long: %d characters (max is %d)",

View File

@ -49,7 +49,8 @@ inform_extension *ExtensionBundleManager::from_copy(inbuild_copy *C) {
}
dictionary *eb_copy_cache = NULL;
inbuild_copy *ExtensionBundleManager::new_copy(text_stream *name, pathname *P, inbuild_nest *N) {
inbuild_copy *ExtensionBundleManager::new_copy(text_stream *name, pathname *P,
inbuild_nest *N, semantic_version_number apparent_V) {
if (eb_copy_cache == NULL) eb_copy_cache = Dictionaries::new(16, FALSE);
TEMPORARY_TEXT(key)
WRITE_TO(key, "%p", P);
@ -58,13 +59,29 @@ inbuild_copy *ExtensionBundleManager::new_copy(text_stream *name, pathname *P, i
C = Dictionaries::read_value(eb_copy_cache, key);
if (C == NULL) {
inbuild_work *work = Works::new_raw(extension_bundle_genre,
Str::duplicate(Pathnames::directory_name(P)),
Str::duplicate(name),
Str::duplicate(Pathnames::directory_name(Pathnames::up(P))));
inbuild_edition *edition = Editions::new(work, VersionNumbers::null());
C = Copies::new_in_path(edition, P, N);
Extensions::scan(C);
Dictionaries::create(eb_copy_cache, key);
Dictionaries::write_value(eb_copy_cache, key, C);
if (VersionNumbers::is_null(apparent_V)) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"an extension in directory format must have a directory name ending "
"'-vN', giving the version number: for example, 'Advanced Algebra-v2_3_6'");
Copies::attach_error(C, CopyErrors::new_T(EXT_BAD_DIRNAME_CE, -1, error_text));
DISCARD_TEXT(error_text)
} else if (VersionNumbers::ne(apparent_V, C->edition->version)) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the version number '%v' is not the one implied by the directory "
"name '%S', which would be '%v'",
&(C->edition->version), Pathnames::directory_name(P), &apparent_V);
Copies::attach_error(C, CopyErrors::new_T(EXT_BAD_DIRNAME_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
}
DISCARD_TEXT(key)
return C;
@ -95,7 +112,13 @@ inbuild_copy *ExtensionBundleManager::claim_folder_as_copy(pathname *P, inbuild_
filename *canary = Filenames::in(P, I"extension_metadata.json");
if (TextFiles::exists(canary)) {
text_stream *name = Str::duplicate(Pathnames::directory_name(P));
return ExtensionBundleManager::new_copy(name, P, N);
semantic_version_number V = VersionNumbers::null();
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, name, L"(%c+)-v([0-9_]+)")) {
name = Str::duplicate(mr.exp[0]);
V = VersionNumbers::from_text(mr.exp[1]);
}
return ExtensionBundleManager::new_copy(name, P, N, V);
}
return NULL;
}

View File

@ -389,7 +389,7 @@ filename *Extensions::main_source_file(inbuild_copy *C) {
pathname *P = C->location_if_path;
if (P) {
TEMPORARY_TEXT(leaf)
WRITE_TO(leaf, "%S.i7x", Pathnames::directory_name(P));
WRITE_TO(leaf, "%S.i7x", C->edition->work->title);
F = Filenames::in(Pathnames::down(P, I"Source"), leaf);
DISCARD_TEXT(leaf)
}

View File

@ -307,6 +307,7 @@ compiler via Delia scripts in |intest|.
@e SIGILS_CLSW
@e TEST_OUTPUT_CLSW
@e SILENCE_CLSW
@e CHECK_RESOURCES_CLSW
@<Register command-line arguments@> =
CommandLine::begin_group(INFORM_TESTING_CLSG, I"for testing and debugging inform7");
@ -322,6 +323,8 @@ compiler via Delia scripts in |intest|.
L"display progress percentages", TRUE);
CommandLine::declare_boolean_switch(SIGILS_CLSW, L"sigils", 1,
L"print Problem message sigils", FALSE);
CommandLine::declare_boolean_switch(CHECK_RESOURCES_CLSW, L"resource-checking", 1,
L"check that figures, sounds and similar resources exist at compile-time", TRUE);
CommandLine::declare_boolean_switch(DIAGNOSTICS_CLSW, L"diagnostics", 2,
L"if no problems occur, write diagnostics files to directory X", FALSE);
CommandLine::declare_switch(REQUIRE_PROBLEM_CLSW, L"require-problem", 2,
@ -349,6 +352,7 @@ void Main::switch(int id, int val, text_stream *arg, void *state) {
case SIGILS_CLSW: ProblemSigils::echo_sigils(val); break;
case REQUIRE_PROBLEM_CLSW: ProblemSigils::require(arg); break;
case DIAGNOSTICS_CLSW: diagnostics_path = Pathnames::from_text(arg); break;
case CHECK_RESOURCES_CLSW: ResourceFinder::set_mode(val); break;
case TEST_OUTPUT_CLSW: InternalTests::set_file(Filenames::from_text(arg)); break;
case SILENCE_CLSW: silence_is_golden = TRUE; break;
}

View File

@ -3,45 +3,46 @@ inform7: a compiler from source text to Inter code
Usage: inform7 [OPTIONS]
for translating Inform source text to Inter:
-basic use Basic Inform language
-case X make any source links refer to the source in extension example X
-census perform an extensions census (default is -no-census)
-debug compile with debugging features even on a Release (default is -no-debug)
-format=X compile to the format X (default is Inform6/32)
-o X use file X as the compiled output (not for use with -project)
-project X work within the Inform project X
-release compile a version suitable for a Release build (default is -no-release)
-rng fix the random number generator of the story file (for testing) (default is -no-rng)
-source X use file X as the Inform source text
-basic use Basic Inform language
-case X make any source links refer to the source in extension example X
-census perform an extensions census (default is -no-census)
-debug compile with debugging features even on a Release (default is -no-debug)
-format=X compile to the format X (default is Inform6/32)
-o X use file X as the compiled output (not for use with -project)
-project X work within the Inform project X
-release compile a version suitable for a Release build (default is -no-release)
-rng fix the random number generator of the story file (for testing) (default is -no-rng)
-source X use file X as the Inform source text
for locating resources in the file system:
-external X use X as the user's home for installed material such as extensions
-internal X use X as the location of built-in material such as the Standard Rules
-nest X add the nest at pathname X to the search list
-transient X use X for transient data such as the extensions census
-external X use X as the user's home for installed material such as extensions
-internal X use X as the location of built-in material such as the Standard Rules
-nest X add the nest at pathname X to the search list
-transient X use X for transient data such as the extensions census
for tweaking code generation from Inter:
-kit X include Inter code from the kit called X
-pipeline X specify code-generation pipeline by name (default is "compile")
-pipeline-file X specify code-generation pipeline as file X
-variable X set pipeline variable X (in form name=value)
-kit X include Inter code from the kit called X
-pipeline X specify code-generation pipeline by name (default is "compile")
-pipeline-file X specify code-generation pipeline as file X
-variable X set pipeline variable X (in form name=value)
for testing and debugging inform7:
-no-census-update don't update the extensions census (default is -census-update)
-crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)
-diagnostics X if no problems occur, write diagnostics files to directory X (default is -no-diagnostics)
-no-index don't produce an Index (default is -index)
-no-problems don't produce (an HTML) Problems report page (default is -problems)
-no-progress don't display progress percentages (default is -progress)
-require-problem X return 0 unless exactly this Problem message is generated
-sigils print Problem message sigils (default is -no-sigils)
-silence practice 'silence is golden': print only Unix-style errors (default is -no-silence)
-test-output X write output of internal tests to file X
-no-census-update don't update the extensions census (default is -census-update)
-crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)
-diagnostics X if no problems occur, write diagnostics files to directory X (default is -no-diagnostics)
-no-index don't produce an Index (default is -index)
-no-problems don't produce (an HTML) Problems report page (default is -problems)
-no-progress don't display progress percentages (default is -progress)
-require-problem X return 0 unless exactly this Problem message is generated
-no-resource-checking don't check that figures, sounds and similar resources exist at compile-time (default is -resource-checking)
-sigils print Problem message sigils (default is -no-sigils)
-silence practice 'silence is golden': print only Unix-style errors (default is -no-silence)
-test-output X write output of internal tests to file X
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number

View File

@ -1,6 +1,6 @@
Total memory consumption was 121432K = 119 MB
Total memory consumption was 121434K = 119 MB
---- was used for 2058107 objects, in 366641 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2058109 objects, in 366643 frames in 0 x 800K = 0K = 0 MB:
33.6% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
21.0% text_stream_array 4649 x 100 = 464900 objects, 26183168 bytes
@ -136,7 +136,7 @@ Total memory consumption was 121432K = 119 MB
---- value_property_data 84 objects, 4704 bytes
---- parsing_pp_data 96 objects, 4608 bytes
---- build_script 138 objects, 4416 bytes
---- command_line_switch 49 objects, 3920 bytes
---- command_line_switch 51 objects, 4080 bytes
---- compatibility_specification 80 objects, 3840 bytes
---- parse_node_annotation_type 119 objects, 3808 bytes
---- submodule_request 85 objects, 3400 bytes
@ -247,7 +247,7 @@ Total memory consumption was 121432K = 119 MB
100.0% was used for memory not allocated for objects:
56.9% text stream storage 70762712 bytes in 482118 claims
56.9% text stream storage 70764524 bytes in 482127 claims
4.2% dictionary storage 5335040 bytes in 7661 claims
---- sorting 1696 bytes in 183 claims
5.7% source text 7200000 bytes in 3 claims
@ -265,5 +265,5 @@ Total memory consumption was 121432K = 119 MB
---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280544 bytes in 2001 claims
-150.-4% was overhead - -187098104 bytes = -182712K = -178 MB
-150.-4% was overhead - -187098264 bytes = -182713K = -178 MB

View File

@ -1,10 +1,10 @@
100.0% in inform7 run
70.5% in compilation to Inter
49.9% in //Sequence::undertake_queued_tasks//
4.8% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile//
70.9% in compilation to Inter
50.3% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
1.7% in //ImperativeDefinitions::assess_all//
1.3% in //RTKindConstructors::compile//
1.3% in //RTPhrasebook::compile_entries//
1.1% in //Sequence::lint_inter//
0.5% in //MajorNodes::pass_2//
@ -16,10 +16,9 @@
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.7% not specifically accounted for
26.5% in running Inter pipeline
10.7% in step 14/15: generate inform6 -> auto.inf
2.8% not specifically accounted for
25.8% in running Inter pipeline
10.1% in step 14/15: generate inform6 -> auto.inf
5.7% in step 5/15: load-binary-kits
5.3% in step 6/15: make-synoptic-module
1.7% in step 9/15: make-identifiers-unique
@ -28,6 +27,6 @@
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
0.1% in step 11/15: eliminate-redundant-labels
1.1% not specifically accounted for
2.6% in supervisor
0.2% not specifically accounted for
0.9% not specifically accounted for
2.5% in supervisor
0.6% not specifically accounted for

View File

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformExtrasKit",
"version": "10.2.0-beta+6W18"
"version": "10.2.0-beta+6W19"
},
"kit-details": {
"has-priority": 1

View File

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6W18"
"version": "10.2.0-beta+6W19"
},
"needs": [ {
"unless": {

View File

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6W18"
"version": "10.2.0-beta+6W19"
},
"needs": [ {
"need": {

View File

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6W18"
"version": "10.2.0-beta+6W19"
},
"needs": [ {
"need": {

View File

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6W18"
"version": "10.2.0-beta+6W19"
},
"needs": [ {
"need": {

View File

@ -97,9 +97,9 @@
mkdir: $PATH/_Results_Ideal
if: $CASE PM_Map%c*
set: $I7OPTIONS = -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-census-update -internal $INTERNAL
set: $I7OPTIONS = -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-census-update -internal $INTERNAL
else
set: $I7OPTIONS = -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
endif
set: $PIPELINE =
@ -261,9 +261,9 @@
mkdir: $PATH/_Results_Ideal
if: $CASE PM_Map%c*
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -internal $INTERNAL
else
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
endif
set: $PIPELINE =
@ -294,7 +294,7 @@
mkdir: $PATH/_Textual
mkdir: $PATH/_C
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7CLIB = inform7/Internal/Miscellany
set: $I7CONSOLE = $WORK/Example.inform/Build/i7_output.txt
@ -408,7 +408,7 @@
mkdir: $PATH/_Results_Actual
mkdir: $PATH/_Results_Ideal
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $PIPELINE =
@ -416,7 +416,7 @@
mkdir: $PATH/_Textual
mkdir: $PATH/_C
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7CLIB = inform7/Internal/Miscellany
set: $I7CONSOLE = $WORK/Example.inform/Build/i7_output.txt
@ -525,9 +525,9 @@
set: $PIPELINE =
if: $CASE %c*-BIP
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -basic -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
else
set: $I7OPTIONS = -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
endif
set: $A = $PATH/_Results_Actual/$CASE.txt
@ -580,7 +580,7 @@
copy: $WORKSPACE/Samples/Powermac.aiff $WORK/Example.materials/Sounds/Powermac.aiff
endif
set: $I7OPTIONS = -fixtime -format=$FORMAT -no-progress -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL -release
set: $I7OPTIONS = -fixtime -format=$FORMAT -no-progress -no-resource-checking -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL -release
mkdir: $WORK/Transient
step: find $WORK/Transient -mindepth 1 -delete
@ -625,7 +625,7 @@
set: $FORMAT = Inform6/16
set: $EXT = z8
endif
set: $I7OPTIONS = -format=$FORMAT -no-progress -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
set: $I7OPTIONS = -format=$FORMAT -no-progress -no-resource-checking -fixtime -rng -sigils -log nothing -external inform7/Tests -transient $WORK/Transient -no-index -internal $INTERNAL
! Now we extract the source text from whatever file originated the test
! case: this is a non-trivial operation when the file is an Extension or

View File

@ -387,9 +387,6 @@ 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.
This is also where the originals (not the released copies) of the Figures
and Sounds, if any, live: in their own subfolders.
=
filename *Task::large_cover_art_file(int JPEG) {
if (inform7_task == NULL) internal_error("there is no current task");
@ -401,17 +398,23 @@ filename *Task::epsmap_file(void) {
return Filenames::in(inform7_task->materials, I"Inform Map.eps");
}
pathname *Task::figures_path(void) {
@ This is also where the originals (not the released copies) of the Figures
and Sounds, if any, live: in their own subfolders, or "departments".
=
pathname *Task::resources_path(void) {
if (inform7_task == NULL) internal_error("there is no current task");
return Pathnames::down(inform7_task->materials, I"Figures");
return inform7_task->materials;
}
pathname *Task::sounds_path(void) {
if (inform7_task == NULL) internal_error("there is no current task");
return Pathnames::down(inform7_task->materials, I"Sounds");
text_stream *Task::figures_department(void) {
return I"Figures";
}
pathname *Task::data_path(void) {
if (inform7_task == NULL) internal_error("there is no current task");
return Pathnames::down(inform7_task->materials, I"Data");
text_stream *Task::sounds_department(void) {
return I"Sounds";
}
text_stream *Task::data_department(void) {
return I"Data";
}
@ On a release run, Inblorb will populate the Release subfolder of Materials;

View File

@ -33,6 +33,16 @@ void SourceProblems::issue_problems_arising(inbuild_copy *C) {
"Specifically, %2.");
Problems::issue_problem_end();
break;
case EXT_BAD_DIRNAME_CE:
Problems::quote_work(1, CE->copy->found_by->work);
Problems::quote_stream(2, CE->details);
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(Untestable));
Problems::issue_problem_segment(
"The extension %1, which your source text makes use of, is stored "
"in a directory (which is fine), but does not follow the rules for "
"what that directory is called (which is not fine). Specifically, %2.");
Problems::issue_problem_end();
break;
case METADATA_MALFORMED_CE:
if (CE->copy->found_by) {
Problems::quote_work(1, CE->copy->found_by->work);

View File

@ -110,11 +110,15 @@ void Figures::register_figure(wording W, wording FN) {
return;
}
filename *figure_file = NULL;
if (wn >= 0) figure_file = Filenames::in(Task::figures_path(), leaf);
if (wn >= 0) {
figure_file = ResourceFinder::find_resource(Task::figures_department(), leaf, FN);
}
DISCARD_TEXT(leaf)
Figures::figures_create(W, id, figure_file, <<alttext>>);
LOGIF(MULTIMEDIA_CREATIONS, "Created figure <%W> = filename '%f' = resource ID %d\n",
W, figure_file, id);
if ((wn < 0) || (figure_file)) {
Figures::figures_create(W, id, figure_file, <<alttext>>);
LOGIF(MULTIMEDIA_CREATIONS, "Created figure <%W> = filename '%f' = resource ID %d\n",
W, figure_file, id);
}
}
}

View File

@ -71,7 +71,7 @@ instance *InternalFiles::files_create(int format, wording W, wording FN) {
TEMPORARY_TEXT(leaf)
Word::dequote(Wordings::first_wn(FN));
WRITE_TO(leaf, "%N", Wordings::first_wn(FN));
ifd->local_filename = Filenames::in(Task::data_path(), leaf);
ifd->local_filename = ResourceFinder::find_resource(Task::data_department(), leaf, FN);
DISCARD_TEXT(leaf)
return I;
}

View File

@ -0,0 +1,71 @@
[ResourceFinder::] Resource Finder.
To find resources such as sound and image files.
@h Resource finder.
This simple function is shared by the code for figures, sound effects and
internal data files. When Inform reads a sentence such as:
= (text as Inform 7)
Sound of Organ is the file "Passacaglia.mid".
=
it looks for the file first in the |Sounds| folder of the materials for the
project, and then, if it isn't there, in the |Sounds| folder of the materials
for the extension in which the sentence occurs (if it occurs in an extension).
Here |"Sounds"| is what we will call the department name for sound effects.
This code was introduced as part of the implementation of IE-0001, and for
the first time throws problem messages is named resources do not exist.
=
int check_resources_are_present = TRUE;
void ResourceFinder::set_mode(int val) {
check_resources_are_present = val; /* set by |-resource-checking| at command line */
}
filename *ResourceFinder::find_resource(text_stream *department, text_stream *leaf, wording W) {
inform_extension *E = NULL;
if (Wordings::nonempty(W))
E = Extensions::corresponding_to(Lexer::file_of_origin(Wordings::first_wn(W)));
pathname *P1 = Pathnames::down(Task::resources_path(), department);
pathname *P2 = E?(Pathnames::down(Extensions::materials_path(E), department)):NULL;
if (P1) {
filename *F = Filenames::in(P1, leaf);
FILE *HANDLE = Filenames::fopen(F, "rb");
if (HANDLE) {
fclose(HANDLE);
return F;
}
}
if (P2) {
filename *F = Filenames::in(P2, leaf);
FILE *HANDLE = Filenames::fopen(F, "rb");
if (HANDLE) {
fclose(HANDLE);
return F;
}
}
if (check_resources_are_present == FALSE) return Filenames::in(P1, leaf);
LOG("Tried in %p\n", P1);
if (P2) LOG("And also in %p\n", P2);
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, W);
Problems::quote_stream(3, department);
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(Untestable));
Problems::issue_problem_segment(
"You wrote %1, which means I am looking for a file called %2, but I'm "
"unable to find it. ");
if (P2)
Problems::issue_problem_segment(
"The file should either be in the '%3' subfolder of the materials folder, "
"or in the 'Materials/%3' subfolder of this extension.");
else
Problems::issue_problem_segment(
"The file should be in the '%3' subfolder of the materials folder.");
Problems::issue_problem_end();
return NULL;
}

View File

@ -102,11 +102,13 @@ void Sounds::register_sound(wording W, wording FN) {
"because it is either empty or contains only spaces.");
return;
}
filename *sound_file = Filenames::in(Task::sounds_path(), leaf);
filename *sound_file = ResourceFinder::find_resource(Task::sounds_department(), leaf, FN);
DISCARD_TEXT(leaf)
Sounds::sounds_create(W, id, sound_file, <<alttext>>);
LOGIF(MULTIMEDIA_CREATIONS,
"Created sound effect <%W> = filename '%N' = resource ID %d\n", W, wn, id);
if (sound_file) {
Sounds::sounds_create(W, id, sound_file, <<alttext>>);
LOGIF(MULTIMEDIA_CREATIONS,
"Created sound effect <%W> = filename '%N' = resource ID %d\n", W, wn, id);
}
}
}

View File

@ -11,6 +11,7 @@ Chapter 1: Starting Up
Multimedia Module
Chapter 2: Multimedia Features
Resource Finder
Figures
Sound Effects
External Files

View File

@ -233,15 +233,15 @@ to match this width, preserving the aspect ratio.
WRITE_TO(description, "<br>");
TEMPORARY_TEXT(sample)
WRITE_TO(sample, "%d.%01dkHz", pSampleRate/1000, (pSampleRate%1000)/100);
Localisation::roman_t(OUT, LD, I"Index.Elements.Fi.Sampled", sample);
Localisation::roman_t(description, LD, I"Index.Elements.Fi.Sampled", sample);
DISCARD_TEXT(sample)
WRITE_TO(description, " ");
if (pChannels == 1) Localisation::roman(OUT, LD, I"Index.Elements.Fi.Mono");
else Localisation::roman(OUT, LD, I"Index.Elements.Fi.Stereo");
else Localisation::roman(description, LD, I"Index.Elements.Fi.Stereo");
WRITE_TO(description, " (");
TEMPORARY_TEXT(bitrate)
WRITE_TO(bitrate, "%d.%01d", pBitsPerSecond/1000, (pSampleRate%1000)/100);
Localisation::roman_t(OUT, LD, I"Index.Elements.Fi.BitRate", bitrate);
Localisation::roman_t(description, LD, I"Index.Elements.Fi.BitRate", bitrate);
DISCARD_TEXT(bitrate)
WRITE_TO(description, ")");