1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/core-module/1-mr.html
2019-09-22 16:43:06 +01:00

822 lines
121 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Booklet Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '1/mr' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>Main Routine</b></li></ul><p class="purpose">As with all C programs, Inform begins execution in a |main| routine, reading command-line arguments to modify its behaviour.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Flags</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Flags. </b>These flags are set by command-line parameters. <code class="display"><span class="extract">for_release</span></code> will be set
when Inform is used in a run started by clicking on the Release button in the
application. <code class="display"><span class="extract">rng_seed_at_start_of_play</span></code> is not used by the application,
but the <code class="display"><span class="extract">intest</span></code> program makes use of this feature to make repeated
tests of the Z-machine story file produce identical sequences of random
numbers: without this, we would have difficulty comparing a transcript of
text produced by the story file on one compilation from another.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">story_filename_extension</span></code> is also set as a result of information passed
from the application via the command line to Inform. In order for Inform to
write good releasing instructions, it needs to know the story file format
(".z5", ".z8", etc.) of the finally produced story file. But since Inform 7
compiles only to Inter and thence to Inform 6 code, and does not run I6
itself, it has no way of telling what the application intends to do on this.
So the application is required to give Inform advance notice of this via a
command-line option.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">this_is_a_debug_compile</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Destined to be compiled with debug features</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">this_is_a_release_compile</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Omit sections of source text marked not for release</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">existing_story_file</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Ignore source text to blorb existing story file?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rng_seed_at_start_of_play</span><span class="plain"> = 0; </span> <span class="comment">The seed value, or 0 if not seeded</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">census_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Inform running only to update extension documentation</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">story_filename_extension</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">What story file we will eventually have</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">show_progress_indicator</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span> <span class="comment">Produce percentage of progress messages</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">scoring_option_set</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">; </span> <span class="comment">Whether in this case a score is kept at run time</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">disable_import</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>This flag is set by the use option "Use no deprecated features", and makes
Inform strict in rejecting syntaxes we intend to get rid of later on.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_deprecated_features</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">forbid syntaxes marked as deprecated?</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Broadly speaking, what Inform does can be divided into two halves: in
the first half, it reads all the assertions, makes all the objects and
global variables and constructs the model world; in the second half,
it compiles the phrases and grammar to go with it.
<code class="display"><span class="extract">model_world_constructed</span></code> records which of these halves we are
currently in: <code class="display"><span class="extract">FALSE</span></code> in the first half, <code class="display"><span class="extract">TRUE</span></code> in the second.
</p>
<p class="inwebparagraph">If there were a third stage, it would be indexing, and during that
period <code class="display"><span class="extract">indexing_stage</span></code> is <code class="display"><span class="extract">TRUE</span></code>. But by that time the compilation of
Inform 6 code is complete.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">text_loaded_from_source</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Lexical scanning is done</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">model_world_under_construction</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">World model is being constructed</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">model_world_constructed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">World model is now constructed</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">indexing_stage</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">Everything is done except indexing</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">report_clock_time</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">time_t</span><span class="plain"> </span><span class="identifier">right_now</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">inter_processing_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">inter_processing_pipeline</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">pipeline_vars</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">path_to_inform7</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CoreMain::main</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">argv</span><span class="plain">[]) {</span>
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Banner and startup</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Register command-line arguments</span> <span class="cwebmacronumber">4.3</span>&gt;<span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">proceed</span><span class="plain"> = </span><span class="identifier">CommandLine::read</span><span class="plain">(</span><span class="identifier">argc</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="functiontext">CoreMain::switch</span><span class="plain">, &amp;</span><span class="functiontext">CoreMain::bareword</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proceed</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Establish our location in the file system</span> <span class="cwebmacronumber">4.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">With that done, configure all other settings</span> <span class="cwebmacronumber">4.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Open the debugging log and the problems report</span> <span class="cwebmacronumber">4.6</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Boot up the compiler</span> <span class="cwebmacronumber">4.7</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">census_mode</span><span class="plain">)</span>
<span class="functiontext">Extensions::Files::handle_census_mode</span><span class="plain">();</span>
<span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Perform lexical analysis</span> <span class="cwebmacronumber">4.8</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Perform semantic analysis</span> <span class="cwebmacronumber">4.9</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the assertions in two passes</span> <span class="cwebmacronumber">4.10</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Make the model world</span> <span class="cwebmacronumber">4.11</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Tables and grammar</span> <span class="cwebmacronumber">4.12</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Phrases and rules</span> <span class="cwebmacronumber">4.13</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Generate inter</span> <span class="cwebmacronumber">4.14</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Convert inter to Inform 6</span> <span class="cwebmacronumber">4.15</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Generate metadata</span> <span class="cwebmacronumber">4.16</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Post mortem logging</span> <span class="cwebmacronumber">4.17</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">end</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Shutdown and rennab</span> <span class="cwebmacronumber">4.18</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> &gt; 0) </span><span class="identifier">Problems::Fatal::exit</span><span class="plain">(1);</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CoreMain::main appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b>It is the dawn of time...
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Banner and startup</span> <span class="cwebmacronumber">4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Errors::set_internal_handler</span><span class="plain">(&amp;</span><span class="identifier">Problems::Issue::internal_error_fn</span><span class="plain">);</span>
<span class="identifier">story_filename_extension</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"ulx"</span><span class="plain">;</span>
<span class="identifier">inter_processing_pipeline</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%B build %B has started.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">STREAM_FLUSH</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_2"></a><b>&#167;4.2. </b>Note that the locations manager is also allowed to process command-line
arguments in order to set certain pathnames or filenames, so the following
list is not exhaustive.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">CASE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">CENSUS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">CLOCK_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">DEBUG_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">EXTERNAL_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">FORMAT_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">CRASHALL_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">INTERNAL_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">NOINDEX_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">NOPROGRESS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROJECT_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RELEASE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">REQUIRE_PROBLEM_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RNG_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SIGILS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TRANSIENT_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PIPELINE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PIPELINE_FILE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PIPELINE_VARIABLE_CLSW</span>
</pre>
<p class="inwebparagraph"><a id="SP4_3"></a><b>&#167;4.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Register command-line arguments</span> <span class="cwebmacronumber">4.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">CommandLine::declare_heading</span><span class="plain">(</span>
<span class="identifier">L</span><span class="string">"inform7: a compiler from source text to Inform 6 code\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span>
<span class="identifier">L</span><span class="string">"Usage: inform7 [OPTIONS] [SOURCETEXT]\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_textual_switch</span><span class="plain">(</span><span class="constant">FORMAT_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"format"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"compile I6 code suitable for the virtual machine X"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">CENSUS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"census"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"perform an extensions census (rather than compile)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">CLOCK_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"clock"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"time how long inform7 takes to run"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">DEBUG_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"debug"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"compile with debugging features even on a Release"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">CRASHALL_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"crash-all"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"crash intentionally on Problem messages (for debugger backtraces)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">NOINDEX_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"noindex"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"don't produce an Index"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">NOPROGRESS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"noprogress"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"don't display progress percentages"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">RELEASE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"release"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"compile a version suitable for a Release build"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">RNG_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"rng"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"fix the random number generator of the story file (for testing)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">SIGILS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"sigils"</span><span class="plain">, 1,</span>
<span class="identifier">L</span><span class="string">"print Problem message sigils (for testing)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">CASE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"case"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"make any source links refer to the source in extension example X"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">REQUIRE_PROBLEM_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"require-problem"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"return 0 unless exactly this Problem message is generated (for testing)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PIPELINE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"pipeline"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"specify code-generation pipeline"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PIPELINE_FILE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"pipeline-file"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"specify code-generation pipeline from file X"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PIPELINE_VARIABLE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"variable"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"set pipeline variable X (in form name=value)"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PROJECT_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"project"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"work within the Inform project X"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">INTERNAL_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"internal"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"use X as the location of built-in material such as the Standard Rules"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">EXTERNAL_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"external"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"use X as the user's home for installed material such as extensions"</span><span class="plain">);</span>
<span class="identifier">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">TRANSIENT_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"transient"</span><span class="plain">, 2,</span>
<span class="identifier">L</span><span class="string">"use X for transient data such as the extensions census"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_4"></a><b>&#167;4.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Establish our location in the file system</span> <span class="cwebmacronumber">4.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">path_to_inform7</span><span class="plain"> = </span><span class="identifier">Pathnames::installation_path</span><span class="plain">(</span><span class="string">"INFORM7_PATH"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inform7"</span><span class="plain">);</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">def_int</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">Pathnames::up</span><span class="plain">(</span><span class="identifier">path_to_inform7</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"Internal"</span><span class="plain">);</span>
<span class="functiontext">Locations::set_default_internal</span><span class="plain">(</span><span class="identifier">def_int</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_5"></a><b>&#167;4.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">With that done, configure all other settings</span> <span class="cwebmacronumber">4.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">VirtualMachines::set_identifier</span><span class="plain">(</span><span class="identifier">story_filename_extension</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Locations::set_defaults</span><span class="plain">(</span><span class="identifier">census_mode</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"Unable to create folders in local file system"</span><span class="plain">);</span>
<span class="identifier">Log::set_debug_log_filename</span><span class="plain">(</span><span class="identifier">filename_of_debugging_log</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_6"></a><b>&#167;4.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Open the debugging log and the problems report</span> <span class="cwebmacronumber">4.6</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Log::open</span><span class="plain">();</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Inform called as:"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">argc</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" %s"</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::start_problems_report</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_7"></a><b>&#167;4.7. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">mark</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">now</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
<span class="identifier">routine</span><span class="plain">();</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cs</span><span class="plain"> = ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">clock</span><span class="plain">() - </span><span class="identifier">now</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cs</span><span class="plain"> &gt; 0) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">".... "</span><span class="plain"> #</span><span class="identifier">routine</span><span class="plain"> </span><span class="string">"() took %dcs\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cs</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Boot up the compiler</span> <span class="cwebmacronumber">4.7</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">Emit::begin</span><span class="plain">();</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Semantics::read_preform</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Semantics::read_preform"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Plugins::Manage::start</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Plugins::Manage::start"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">InferenceSubjects::begin</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InferenceSubjects::begin"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_8"></a><b>&#167;4.8. </b><code class="display">
&lt;<span class="cwebmacrodefn">Perform lexical analysis</span> <span class="cwebmacronumber">4.8</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(0, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Lexical analysis"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">SourceFiles::read_primary_source_text</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"SourceFiles::read_primary_source_text"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::RuleSubtrees::create_standard_csps</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::RuleSubtrees::create_standard_csps"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_9"></a><b>&#167;4.9. </b><code class="display">
&lt;<span class="cwebmacrodefn">Perform semantic analysis</span> <span class="cwebmacronumber">4.9</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(1, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis Ia"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">ParseTreeUsage::plant_parse_tree</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ParseTreeUsage::plant_parse_tree"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">StructuralSentences::break_source</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StructuralSentences::break_source"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Inclusion::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Inclusion::traverse"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::satisfy_dependencies</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::satisfy_dependencies"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Initialise language semantics"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Plugins::Manage::load_types</span><span class="plain">();</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">BinaryPredicates::make_built_in</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BinaryPredicates::make_built_in"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">NewVerbs::add_inequalities</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NewVerbs::add_inequalities"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis Ib"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::VPs::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::VPs::traverse"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Rearrangement::tidy_up_ofs_and_froms</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Rearrangement::tidy_up_ofs_and_froms"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::RuleSubtrees::register_recently_lexed_phrases</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::RuleSubtrees::register_recently_lexed_phrases"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">StructuralSentences::declare_source_loaded</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StructuralSentences::declare_source_loaded"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">Kinds::Interpreter::include_templates_for_kinds</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::Interpreter::include_templates_for_kinds"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis II"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">ParseTreeUsage::verify</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ParseTreeUsage::verify"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Files::check_versions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Files::check_versions"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::make_tree</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::make_tree"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::write_as_xml</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::write_as_xml"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Sentences::Headings::write_as_xml</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sentences::Headings::write_as_xml"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Modules::traverse_to_define</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Modules::traverse_to_define"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Semantic analysis III"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Adjectives::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Adjectives::traverse"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::traverse_to_create</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::traverse_to_create"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_create</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_create"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::traverse_for_names</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::traverse_for_names"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_10"></a><b>&#167;4.10. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the assertions in two passes</span> <span class="cwebmacronumber">4.10</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(2, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"First pass through assertions"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Assertions::Traverse::traverse</span><span class="plain">(1);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_stock"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Second pass through assertions"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">Assertions::Traverse::traverse</span><span class="plain">(2);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::kind_declarations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::kind_declarations"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_11"></a><b>&#167;4.11. </b><code class="display">
&lt;<span class="cwebmacrodefn">Make the model world</span> <span class="cwebmacronumber">4.11</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Making the model world"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::emit</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::emit"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Emit::allocate_attributes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Emit::allocate_attributes"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::name_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::name_all"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseNouns::name_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseNouns::name_all"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::complete</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::complete"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Measurement::validate_definitions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Measurement::validate_definitions"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">BinaryPredicates::make_built_in_further</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BinaryPredicates::make_built_in_further"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Bibliographic::IFID::define_UUID</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Bibliographic::IFID::define_UUID"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Figures::compile_ResourceIDsOfFigures_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Figures::compile_ResourceIDsOfFigures_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Sounds::compile_ResourceIDsOfSounds_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Sounds::compile_ResourceIDsOfSounds_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Player::InitialSituation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Player::InitialSituation"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_12"></a><b>&#167;4.12. </b><code class="display">
&lt;<span class="cwebmacrodefn">Tables and grammar</span> <span class="cwebmacronumber">4.12</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Tables and grammar"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::check_tables_for_kind_clashes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::check_tables_for_kind_clashes"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::Support::compile_print_table_names</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::Support::compile_print_table_names"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::traverse"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::complete_additions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::complete_additions"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_13"></a><b>&#167;4.13. </b><code class="display">
&lt;<span class="cwebmacrodefn">Phrases and rules</span> <span class="cwebmacronumber">4.13</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(3, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Phrases and rules"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">LiteralPatterns::define_named_phrases</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"LiteralPatterns::define_named_phrases"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::traverse</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::traverse"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::register_meanings</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::register_meanings"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::parse_rule_parameters</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::parse_rule_parameters"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::add_rules_to_rulebooks</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::add_rules_to_rulebooks"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::parse_rule_placements</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::parse_rule_placements"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::traverse_to_stock"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::traverse_to_stock</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::traverse_to_stock"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::annotate_attributes</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::annotate_attributes"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rulebooks::Outcomes::RulebookOutcomePrintingRule</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rulebooks::Outcomes::RulebookOutcomePrintingRule"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_instance_counts</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_instance_counts"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_14"></a><b>&#167;4.14. </b>This is where we hand over to regular template files &mdash; containing code
passed through as I6 source, as well as a few further commands &mdash; starting
with "Output.i6t".
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Generate inter</span> <span class="cwebmacronumber">4.14</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">ProgressBar::update_progress_bar</span><span class="plain">(4, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Generating inter"</span><span class="plain">);</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::compile_icl_commands</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::compile_icl_commands"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">TemplateFiles::compile_build_number</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TemplateFiles::compile_build_number"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Plugins::Manage::define_IFDEF_symbols</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Plugins::Manage::define_IFDEF_symbols"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Bibliographic::compile_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Bibliographic::compile_constants"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Extensions::Files::ShowExtensionVersions_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions::Files::ShowExtensionVersions_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">Kinds::Constructors::compile_I6_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::Constructors::compile_I6_constants"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Score::compile_max_score</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Score::compile_max_score"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::TestUseOption_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::TestUseOption_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::compile_activity_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::compile_activity_constants"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_before_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_before_rulebooks_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_for_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_for_rulebooks_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_after_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_after_rulebooks_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::Activity_atb_rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::Activity_atb_rulebooks_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::compile_defined_relation_constants</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::compile_defined_relation_constants"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_data_type_support_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_data_type_support_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::I7_Kind_Name_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::I7_Kind_Name_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">World::Compile::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"World::Compile::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Backdrops::write_found_in_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Backdrops::write_found_in_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Map::write_door_dir_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Map::write_door_dir_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Map::write_door_to_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Map::write_door_to_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::General::write_parse_name_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::General::write_parse_name_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Regions::write_regional_found_in_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Regions::write_regional_found_in_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::complete</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::complete"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Tables::Support::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tables::Support::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Equations::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Equations::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::Patterns::Named::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::Patterns::Named::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::ActionData</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionData"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::ActionCoding_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionCoding_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::ActionHappened</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::ActionHappened"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Actions::compile_action_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Actions::compile_action_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Lines::MistakeActionSub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Lines::MistakeActionSub_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_first_block</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_first_block"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_rulebooks</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_rulebooks"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::rulebooks_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::rulebooks_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Scenes::DetectSceneChange_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Scenes::DetectSceneChange_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Scenes::ShowSceneStatus_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Scenes::ShowSceneStatus_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Files::arrays</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Files::arrays"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rulebooks::rulebook_var_creators</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rulebooks::rulebook_var_creators"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Activities::activity_var_creators</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Activities::activity_var_creators"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::IterateRelations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::IterateRelations"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::RulebookNames_array</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::RulebookNames_array"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::RulePrintingRule_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::RulePrintingRule_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Verbs::prepare</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::prepare"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Verbs::compile_conditions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::compile_conditions"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Values::number</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::number"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Values::truth_state</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::truth_state"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Values::time</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::time"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Values::compile_type_gprs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Values::compile_type_gprs"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">NewVerbs::ConjugateVerb</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NewVerbs::ConjugateVerb"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Adjectives::Meanings::agreements</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Adjectives::Meanings::agreements"</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">this_is_a_debug_compile</span><span class="plain">)) {</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">PL::Parsing::TestScripts::write_text</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::write_text"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">PL::Parsing::TestScripts::TestScriptSub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::TestScriptSub_routine"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">PL::Parsing::TestScripts::InternalTestCases_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::InternalTestCases_routine"</span><span class="plain">)</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">PL::Parsing::TestScripts::TestScriptSub_stub_routine</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::TestScripts::TestScriptSub_stub_routine"</span><span class="plain">)</span>
<span class="plain">}</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_as_needed</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_as_needed"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::compile_responses</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::compile_responses"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Relations::compile_defined_relations</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Relations::compile_defined_relations"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Manager::compile_as_needed</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Manager::compile_as_needed"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::TextSubstitutions::allow_no_further_text_subs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::TextSubstitutions::allow_no_further_text_subs"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Filters::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Filters::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Chronology::past_actions_i6_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::past_actions_i6_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Chronology::chronology_extents_i6_escape</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::chronology_extents_i6_escape"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Chronology::past_tenses_i6_escape</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::past_tenses_i6_escape"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Chronology::allow_no_further_past_tenses</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chronology::allow_no_further_past_tenses"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Verbs::compile_all</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Verbs::compile_all"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Parsing::Tokens::Filters::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Parsing::Tokens::Filters::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Properties::Measurement::compile_MADJ_routines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Properties::Measurement::compile_MADJ_routines"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Calculus::Propositions::Deferred::compile_remaining_deferred</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Calculus::Propositions::Deferred::compile_remaining_deferred"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Calculus::Deferrals::allow_no_further_deferrals</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Calculus::Deferrals::allow_no_further_deferrals"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::check</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::check"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Lists::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lists::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Strings::TextLiterals::compile</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strings::TextLiterals::compile"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">JumpLabels::compile_necessary_storage</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"JumpLabels::compile_necessary_storage"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_heap_allocator</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_heap_allocator"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Constants::compile_closures</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Constants::compile_closures"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Kinds::RunTime::compile_structures</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kinds::RunTime::compile_structures"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Rules::check_response_usages</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rules::check_response_usages"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::check_for_unused</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::check_for_unused"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Showme::compile_SHOWME_details</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Showme::compile_SHOWME_details"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::TimedEventsTable</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::TimedEventsTable"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">Phrases::Timed::TimedEventTimesTable</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phrases::Timed::TimedEventTimesTable"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="identifier">PL::Naming::compile_cap_short_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"PL::Naming::compile_cap_short_name"</span><span class="plain">)</span>
<span class="identifier">COMPILATION_STEP</span><span class="plain">(</span><span class="functiontext">UseOptions::configure_template</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UseOptions::configure_template"</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_15"></a><b>&#167;4.15. </b><code class="display">
&lt;<span class="cwebmacrodefn">Convert inter to Inform 6</span> <span class="cwebmacronumber">4.15</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">problem_count</span><span class="plain"> == 0) &amp;&amp; (</span><span class="identifier">existing_story_file</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">front_end</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Front end elapsed time: %dcs\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">front_end</span><span class="plain"> - </span><span class="identifier">start</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100));</span>
<span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Converting inter to Inform 6"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing_story_file</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">this_is_a_release_compile</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">this_is_a_debug_compile</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">())</span>
<span class="identifier">CodeGen::Architecture::set</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"16d"</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">CodeGen::Architecture::set</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"32d"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">VirtualMachines::is_16_bit</span><span class="plain">())</span>
<span class="identifier">CodeGen::Architecture::set</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"16"</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">CodeGen::Architecture::set</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"32"</span><span class="plain">);</span>
<span class="plain">}</span>
&lt;<span class="cwebmacro">Ensure inter pipeline variables dictionary</span> <span class="cwebmacronumber">4.15.1</span>&gt;<span class="plain">;</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">pipeline_vars</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*in"</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"*memory"</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">pipeline_vars</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*out"</span><span class="plain">), </span><span class="identifier">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">filename_of_compiled_i6_code</span><span class="plain">));</span>
<span class="identifier">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">SS</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inter_processing_file</span><span class="plain">)</span>
<span class="identifier">SS</span><span class="plain"> = </span><span class="identifier">CodeGen::Pipeline::parse_from_file</span><span class="plain">(</span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">inter_processing_file</span><span class="plain">), </span><span class="identifier">pipeline_vars</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">inter_processing_pipeline</span><span class="plain">) &gt; 0)</span>
<span class="identifier">SS</span><span class="plain"> = </span><span class="identifier">CodeGen::Pipeline::parse</span><span class="plain">(</span><span class="identifier">inter_processing_pipeline</span><span class="plain">, </span><span class="identifier">pipeline_vars</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain">&lt;</span><span class="constant">NO_FS_AREAS</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++) {</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">pathname_of_inter_resources</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">];</span>
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"default.interpipeline"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TextFiles::exists</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) {</span>
<span class="identifier">SS</span><span class="plain"> = </span><span class="identifier">CodeGen::Pipeline::parse_from_file</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">pipeline_vars</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">SS</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"The Inter pipeline description contained errors"</span><span class="plain">);</span>
<span class="identifier">CodeGen::Pipeline::set_repository</span><span class="plain">(</span><span class="identifier">SS</span><span class="plain">, </span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">inter_library</span><span class="plain">);</span>
<span class="identifier">inter_library</span><span class="plain"> *</span><span class="identifier">bi</span><span class="plain"> =</span>
<span class="identifier">CodeGen::Libraries::find</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"basic_inform"</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bi</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"The Basic Inform inter library cannot be found"</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">bi</span><span class="plain">, </span><span class="identifier">inter_library</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
<span class="identifier">inter_library</span><span class="plain"> *</span><span class="identifier">stdr</span><span class="plain"> =</span>
<span class="identifier">CodeGen::Libraries::find</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"standard_rules"</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stdr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"The Standard Rules inter library cannot be found"</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">stdr</span><span class="plain">, </span><span class="identifier">inter_library</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
<span class="identifier">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">Filenames::get_path_to</span><span class="plain">(</span><span class="identifier">filename_of_compiled_i6_code</span><span class="plain">),</span>
<span class="identifier">SS</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Back end elapsed time: %dcs\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">clock</span><span class="plain">() - </span><span class="identifier">front_end</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Compilation now complete"</span><span class="plain">);</span>
<span class="identifier">pipeline_vars</span><span class="plain"> = </span><span class="identifier">CodeGen::Pipeline::basic_dictionary</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"output.i6"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_15_1"></a><b>&#167;4.15.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Ensure inter pipeline variables dictionary</span> <span class="cwebmacronumber">4.15.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pipeline_vars</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">pipeline_vars</span><span class="plain"> = </span><span class="identifier">CodeGen::Pipeline::basic_dictionary</span><span class="plain">(</span>
<span class="identifier">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">filename_of_compiled_i6_code</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4_15">&#167;4.15</a>, <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP4_16"></a><b>&#167;4.16. </b>Metadata.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Generate metadata</span> <span class="cwebmacronumber">4.16</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">PL::Bibliographic::Release::write_ifiction_and_blurb</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
<span class="functiontext">TemplateFiles::interpret</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Index.i6t"</span><span class="plain">, -1);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_17"></a><b>&#167;4.17. </b><code class="display">
&lt;<span class="cwebmacrodefn">Post mortem logging</span> <span class="cwebmacronumber">4.17</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
<span class="identifier">TemplateReader::report_unacted_upon_interventions</span><span class="plain">();</span>
<span class="comment">ParseTreeUsage::write_main_source_to_log();</span>
<span class="comment">Memory::log_statistics();</span>
<span class="comment">Preform::log_language();</span>
<span class="comment">Index::DocReferences::log_statistics();</span>
<span class="comment">NewVerbs::log_all();</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_18"></a><b>&#167;4.18. </b><code class="display">
&lt;<span class="cwebmacrodefn">Shutdown and rennab</span> <span class="cwebmacronumber">4.18</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proceed</span><span class="plain">) {</span>
<span class="identifier">Problems::write_reports</span><span class="plain">(</span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Total of %d files written as streams.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">total_file_writes</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cpu_time_used</span><span class="plain"> = ((</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">end</span><span class="plain"> - </span><span class="identifier">start</span><span class="plain">)) / (</span><span class="identifier">CLOCKS_PER_SEC</span><span class="plain">/100);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"CPU time: %d centiseconds\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">cpu_time_used</span><span class="plain">);</span>
<span class="identifier">Writers::log_escape_usage</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"%s has finished"</span><span class="plain">, </span><span class="identifier">HUMAN_READABLE_INTOOL_NAME</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">report_clock_time</span><span class="plain">)</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">": %d centiseconds used"</span><span class="plain">, </span><span class="identifier">cpu_time_used</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">".\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_log_phases</span><span class="plain"> = 0;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CoreMain::go_to_log_phase</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">) {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">phase_names</span><span class="plain">[] = {</span>
<span class="string">"I"</span><span class="plain">, </span><span class="string">"II"</span><span class="plain">, </span><span class="string">"III"</span><span class="plain">, </span><span class="string">"IV"</span><span class="plain">, </span><span class="string">"V"</span><span class="plain">, </span><span class="string">"VI"</span><span class="plain">, </span><span class="string">"VII"</span><span class="plain">, </span><span class="string">"VIII"</span><span class="plain">, </span><span class="string">"IX"</span><span class="plain">, </span><span class="string">"X"</span><span class="plain">,</span>
<span class="string">"XI"</span><span class="plain">, </span><span class="string">"XII"</span><span class="plain">, </span><span class="string">"XIII"</span><span class="plain">, </span><span class="string">"XIV"</span><span class="plain">, </span><span class="string">"XV"</span><span class="plain">, </span><span class="string">"XVI"</span><span class="plain">, </span><span class="string">"XVII"</span><span class="plain">, </span><span class="string">"XVIII"</span><span class="plain">, </span><span class="string">"XIX"</span><span class="plain">, </span><span class="string">"XX"</span><span class="plain">, </span><span class="string">"XXI"</span><span class="plain">, </span><span class="string">"XXII"</span><span class="plain"> };</span>
<span class="identifier">Log::new_phase</span><span class="plain">(</span><span class="identifier">phase_names</span><span class="plain">[</span><span class="identifier">no_log_phases</span><span class="plain">], </span><span class="identifier">argument</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_log_phases</span><span class="plain"> &lt; 21) </span><span class="identifier">no_log_phases</span><span class="plain">++;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CoreMain::go_to_log_phase is used in <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>.</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CoreMain::switch</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="comment">Miscellaneous boolean settings</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CENSUS_CLSW</span><span class="plain">: </span><span class="identifier">census_mode</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CLOCK_CLSW</span><span class="plain">: </span><span class="identifier">report_clock_time</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CRASHALL_CLSW</span><span class="plain">: </span><span class="identifier">debugger_mode</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="identifier">crash_on_all_errors</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DEBUG_CLSW</span><span class="plain">: </span><span class="identifier">this_is_a_debug_compile</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOINDEX_CLSW</span><span class="plain">: </span><span class="identifier">do_not_generate_index</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOPROGRESS_CLSW</span><span class="plain">: </span><span class="identifier">show_progress_indicator</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">?</span><span class="identifier">FALSE</span><span class="plain">:</span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RELEASE_CLSW</span><span class="plain">: </span><span class="identifier">this_is_a_release_compile</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RNG_CLSW</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val</span><span class="plain">) </span><span class="identifier">rng_seed_at_start_of_play</span><span class="plain"> = -16339;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">rng_seed_at_start_of_play</span><span class="plain"> = 0;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SIGILS_CLSW</span><span class="plain">: </span><span class="identifier">echo_problem_message_sigils</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="comment">Other settings</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FORMAT_CLSW</span><span class="plain">: </span><span class="identifier">story_filename_extension</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CASE_CLSW</span><span class="plain">: </span><span class="identifier">HTMLFiles::set_source_link_case</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">REQUIRE_PROBLEM_CLSW</span><span class="plain">: </span><span class="identifier">Problems::Fatal::require</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PIPELINE_CLSW</span><span class="plain">: </span><span class="identifier">inter_processing_pipeline</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PIPELINE_FILE_CLSW</span><span class="plain">: </span><span class="identifier">inter_processing_file</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PIPELINE_VARIABLE_CLSW</span><span class="plain">: {</span>
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">arg</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+)=(%c+)"</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">) != </span><span class="character">'*'</span><span class="plain">) {</span>
<span class="identifier">Errors::fatal</span><span class="plain">(</span><span class="string">"-variable names must begin with '*'"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Ensure inter pipeline variables dictionary</span> <span class="cwebmacronumber">4.15.1</span>&gt;<span class="plain">;</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">pipeline_vars</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]), </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1]);</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">Errors::fatal</span><span class="plain">(</span><span class="string">"-variable should take the form 'name=value'"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="comment">Useful pathnames</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROJECT_CLSW</span><span class="plain">: </span><span class="functiontext">Locations::set_project</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INTERNAL_CLSW</span><span class="plain">: </span><span class="functiontext">Locations::set_internal</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">EXTERNAL_CLSW</span><span class="plain">: </span><span class="functiontext">Locations::set_external</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TRANSIENT_CLSW</span><span class="plain">: </span><span class="functiontext">Locations::set_transient</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented switch"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CoreMain::bareword</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">opt</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Locations::set_I7_source</span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="identifier">Errors::fatal_with_text</span><span class="plain">(</span><span class="string">"unknown command line argument: %S (see -help)"</span><span class="plain">, </span><span class="identifier">opt</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CoreMain::disable_importation</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">disable_import</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CoreMain::set_inter_pipeline</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">inter_processing_pipeline</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">inter_processing_pipeline</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">inter_processing_pipeline</span><span class="plain">);</span>
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">inter_processing_pipeline</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Setting pipeline %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">inter_processing_pipeline</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CoreMain::switch is used in <a href="#SP4">&#167;4</a>.</p>
<p class="endnote">The function CoreMain::bareword is used in <a href="#SP4">&#167;4</a>.</p>
<p class="endnote">The function CoreMain::disable_importation is used in 7/hdn (<a href="7-hdn.html#SP10_2">&#167;10.2</a>).</p>
<p class="endnote">The function CoreMain::set_inter_pipeline is used in 26/uo (<a href="26-uo.html#SP11_2">&#167;11.2</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 1: Configuration and Control.)</i></li><li><a href="1-cm.html">Continue with 'Core Module'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>