mirror of
https://github.com/ganelson/inform.git
synced 2024-07-09 02:24:21 +03:00
527 lines
120 KiB
HTML
527 lines
120 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>What To Compile</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
|
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<script>
|
|
function togglePopup(material_id) {
|
|
var popup = document.getElementById(material_id);
|
|
popup.classList.toggle("show");
|
|
}
|
|
</script>
|
|
|
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-assets/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
|
|
<li><a href="../if-module/index.html">if</a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Services</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../calculus-module/index.html">calculus</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'What To Compile' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>What To Compile</b></li></ul></div>
|
|
<p class="purpose">To receive an instruction to compile something from Inbuild, and then to sort out the many locations then used in the host filing system.</p>
|
|
|
|
<ul class="toc"><li><a href="1-wtc.html#SP1">§1. Timers</a></li><li><a href="1-wtc.html#SP2">§2. Task data</a></li><li><a href="1-wtc.html#SP10">§10. Project-related files and file paths</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Timers. </b>We keep track of about how long the compiler spends on each task, for the
|
|
sake of better diagnostics.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">supervisor_timer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::start_timers</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Time::start_stopwatch</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform7 run"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">supervisor_timer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Time::start_stopwatch</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"supervisor"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::stop_timers</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Time::stop_stopwatch</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::log_stopwatch</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Time::log_timing</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform7_timer</span><span class="plain-syntax">-></span><span class="identifier-syntax">time_taken</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Task data. </b>When Inbuild (a copy of which is included in the Inform 7 executable) decides
|
|
that an Inform source text must be compiled, it calls <span class="extract"><span class="extract-syntax">Task::carry_out</span></span>. By
|
|
this point Inbuild will have set up an <span class="extract"><span class="extract-syntax">inform_project</span></span> structure to
|
|
represent the program we have to compile; but we will need additional data
|
|
about that compilation, and it's stored in the following.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">compile_task_data</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">build_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">task</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">materials</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing_storyfile</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage_of_compilation</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_resource_number</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
|
<span class="plain-syntax">} </span><span class="reserved-syntax">compile_task_data</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>The structure compile_task_data is private to this section.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>An early and perhaps arguable design decision for inform7 was that it would
|
|
compile just one source text in its lifetime as a process: and because of that,
|
|
<span class="extract"><span class="extract-syntax">Task::carry_out</span></span> can only in fact be called once, and Inbuild only does so
|
|
once. But the following function allows in principle for multiple calls,
|
|
against the day when we change our minds about all this.
|
|
</p>
|
|
|
|
<p class="commentary">Something we will never do is attempt to make <span class="extract"><span class="extract-syntax">inform7</span></span> thread-safe in the
|
|
sense of being able to compile two source texts simultaneously. The global
|
|
<span class="extract"><span class="extract-syntax">inform7_task</span></span> is null when nothing is being compiled, or set to the unique
|
|
thing which is being compiled when it is.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">compile_task_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
<span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">latest_syntax_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::carry_out</span><span class="plain-syntax">(</span><span class="identifier-syntax">build_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Time::stop_stopwatch</span><span class="plain-syntax">(</span><span class="identifier-syntax">supervisor_timer</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ProjectBundleManager::from_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-></span><span class="identifier-syntax">associated_copy</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">project</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ProjectFileManager::from_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-></span><span class="identifier-syntax">associated_copy</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">project</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">latest_syntax_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::DocReferences::read_xrefs</span><span class="plain-syntax">();</span>
|
|
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::issue_problems_arising</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">vertex</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><a href="26-pl.html#SP11" class="function-link"><span class="function-syntax">Plugins::Manage::start_plugins</span></a><span class="plain-syntax">();</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot re-enter with new task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">compile_task_data</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">task</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">project</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">path</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-></span><span class="identifier-syntax">associated_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">location_if_path</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">build</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Projects::build_path</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">build</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Projects::materials_path</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">existing_storyfile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> = -1;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">next_resource_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DefaultLanguage::set</span><span class="plain-syntax">(</span><span class="identifier-syntax">Projects::get_language_of_syntax</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">));</span>
|
|
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="1-htc.html#SP2" class="function-link"><span class="function-syntax">Sequence::carry_out</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TargetVMs::debug_enabled</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">task</span><span class="plain-syntax">-></span><span class="identifier-syntax">for_vm</span><span class="plain-syntax">));</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>All manner of low-level problems emerge when reading in the text of the
|
|
project, or any extensions it uses: these have already been found by inbuild
|
|
and are attached to the relevant nodes in the build graph. We issue them
|
|
here as Inform problem messages. (Inbuild wasn't able to do that for us
|
|
because the Inform problems file wasn't open back then; and besides, it can
|
|
only issue stubby Unix-like command line errors.)
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::issue_problems_arising</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Task::issue_problems_arising</span></span>:<br/><a href="1-wtc.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">COPY_VERTEX</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><a href="2-pwst.html#SP1" class="function-link"><span class="function-syntax">SourceProblems::issue_problems_arising</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="identifier-syntax">build_edges</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::issue_problems_arising</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="identifier-syntax">use_edges</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::issue_problems_arising</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>We will keep track of how far along the process has advanced, in very
|
|
rough stages. Twenty is plenty.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::advance_stage_to</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Task::advance_stage_to</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2">§2</a>, <a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_4">§2.4</a>, <a href="1-htc.html#SP2_5">§2.5</a>, <a href="1-htc.html#SP2_6">§2.6</a>, <a href="1-htc.html#SP2_7">§2.7</a>, <a href="1-htc.html#SP2_8">§2.8</a>, <a href="1-htc.html#SP2_9">§2.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stage</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not an advance"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stage</span><span class="plain-syntax"> >= </span><span class="constant-syntax">20</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"went too far"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">roman</span><span class="plain-syntax">[] = {</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"I"</span><span class="plain-syntax">, </span><span class="string-syntax">"II"</span><span class="plain-syntax">, </span><span class="string-syntax">"III"</span><span class="plain-syntax">, </span><span class="string-syntax">"IV"</span><span class="plain-syntax">, </span><span class="string-syntax">"V"</span><span class="plain-syntax">, </span><span class="string-syntax">"VI"</span><span class="plain-syntax">, </span><span class="string-syntax">"VII"</span><span class="plain-syntax">, </span><span class="string-syntax">"VIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"IX"</span><span class="plain-syntax">, </span><span class="string-syntax">"X"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"XI"</span><span class="plain-syntax">, </span><span class="string-syntax">"XII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIV"</span><span class="plain-syntax">, </span><span class="string-syntax">"XV"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVI"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIX"</span><span class="plain-syntax">, </span><span class="string-syntax">"XX"</span><span class="plain-syntax"> };</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::new_phase</span><span class="plain-syntax">(</span><span class="identifier-syntax">roman</span><span class="plain-syntax">[</span><span class="identifier-syntax">stage</span><span class="plain-syntax">], </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="1-pp.html#SP1" class="function-link"><span class="function-syntax">ProgressBar::update</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">stage</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::is_before_stage</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> < </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::is_during_stage</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Task::is_during_stage</span></span>:<br/>Inferences - <a href="16-in.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::is_after_stage</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> > </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>The current project and the virtual machine we want to compile it for:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::project</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Task::project</span></span>:<br/>New Adjective Requests - <a href="4-nar2.html#SP1">§1</a><br/>Instances - <a href="6-ins.html#SP13">§13</a>, <a href="6-ins.html#SP24">§24</a>, <a href="6-ins.html#SP25">§25</a><br/>Index Physical World - <a href="6-ipw.html#SP3_3_1">§3.3.1</a>, <a href="6-ipw.html#SP3_3_1_1">§3.3.1.1</a><br/>Adjective Meanings - <a href="7-am.html#SP43">§43</a>, <a href="7-am.html#SP44">§44</a><br/>I6 Template Interpreter - <a href="26-iti.html#SP3">§3</a><br/>Internal Test Cases - <a href="26-itc.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="identifier-syntax">target_vm</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::vm</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Task::vm</span></span>:<br/><a href="1-wtc.html#SP17">§17</a><br/>Literal Patterns - <a href="6-lp.html#SP11_2">§11.2</a>, <a href="6-lp.html#SP17_3">§17.3</a><br/>Relations - <a href="7-rlt.html#SP8">§8</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP20_1">§20.1</a>, <a href="13-rsfk.html#SP22">§22</a>, <a href="13-rsfk.html#SP28">§28</a><br/>Text Substitutions - <a href="17-ts.html#SP11_1">§11.1</a><br/>Compile Invocations Inline - <a href="25-cii.html#SP3_5_8_3">§3.5.8.3</a><br/>Fundamental Constants - <a href="26-fc.html#SP3">§3</a><br/>Routines - <a href="26-rt.html#SP4">§4</a><br/>Use Options at Run Time - <a href="26-uoart.html#SP4">§4</a><br/>Emitting Inter - <a href="27-em.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">task</span><span class="plain-syntax">-></span><span class="identifier-syntax">for_vm</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="identifier-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::edition</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">edition</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::syntax_tree</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Task::syntax_tree</span></span>:<br/>Core Preform - <a href="1-cp.html#SP2">§2</a><br/>Using Problems - <a href="2-up.html#SP2">§2</a>, <a href="2-up.html#SP2_3">§2.3</a><br/>Supplementary Issues - <a href="2-si.html#SP1">§1</a>, <a href="2-si.html#SP2">§2</a>, <a href="2-si.html#SP3">§3</a>, <a href="2-si.html#SP4">§4</a>, <a href="2-si.html#SP5">§5</a>, <a href="2-si.html#SP6">§6</a>, <a href="2-si.html#SP7">§7</a>, <a href="2-si.html#SP8">§8</a>, <a href="2-si.html#SP9">§9</a>, <a href="2-si.html#SP10">§10</a>, <a href="2-si.html#SP11">§11</a>, <a href="2-si.html#SP12">§12</a>, <a href="2-si.html#SP13">§13</a><br/>Problems With Source Text - <a href="2-pwst.html#SP1">§1</a><br/>Passes through Major Nodes - <a href="3-ptmn.html#SP2">§2</a>, <a href="3-ptmn.html#SP3_1">§3.1</a>, <a href="3-ptmn.html#SP3_1_2">§3.1.2</a>, <a href="3-ptmn.html#SP3_1_5">§3.1.5</a>, <a href="3-ptmn.html#SP4">§4</a><br/>Classifying Sentences - <a href="3-cs.html#SP3">§3</a>, <a href="3-cs.html#SP3_1">§3.1</a>, <a href="3-cs.html#SP3_3">§3.3</a>, <a href="3-cs.html#SP3_4">§3.4</a>, <a href="3-cs.html#SP3_5">§3.5</a>, <a href="3-cs.html#SP3_6">§3.6</a>, <a href="3-cs.html#SP4_1">§4.1</a>, <a href="3-cs.html#SP4_2">§4.2</a>, <a href="3-cs.html#SP4_3">§4.3</a>, <a href="3-cs.html#SP4_4">§4.4</a>, <a href="3-cs.html#SP4_5">§4.5</a>, <a href="3-cs.html#SP4_6">§4.6</a><br/>Debugging Log Requests - <a href="4-dlr.html#SP5">§5</a><br/>Pluralisation Requests - <a href="4-pr.html#SP2_1">§2.1</a><br/>Translation Requests - <a href="4-tr.html#SP2_2">§2.2</a>, <a href="4-tr.html#SP5_1">§5.1</a>, <a href="4-tr.html#SP4_1">§4.1</a>, <a href="4-tr.html#SP8_1">§8.1</a>, <a href="4-tr.html#SP7_2">§7.2</a>, <a href="4-tr.html#SP7_2_1">§7.2.1</a>, <a href="4-tr.html#SP7_4">§7.4</a>, <a href="4-tr.html#SP7_5">§7.5</a><br/>New Use Option Requests - <a href="4-nuor.html#SP2_1">§2.1</a>, <a href="4-nuor.html#SP5">§5</a><br/>Use Options - <a href="4-uor.html#SP2_2_2">§2.2.2</a>, <a href="4-uor.html#SP2_2_3">§2.2.3</a><br/>Test Requests - <a href="4-tr2.html#SP2_1">§2.1</a>, <a href="4-tr2.html#SP2_2">§2.2</a>, <a href="4-tr2.html#SP2_3">§2.3</a>, <a href="4-tr2.html#SP3_4">§3.4</a>, <a href="4-tr2.html#SP3_5">§3.5</a><br/>Define by Table Requests - <a href="4-dbtr.html#SP5_2">§5.2</a>, <a href="4-dbtr.html#SP6_1_1">§6.1.1</a>, <a href="4-dbtr.html#SP4_1_1_1">§4.1.1.1</a>, <a href="4-dbtr.html#SP4_1_2">§4.1.2</a>, <a href="4-dbtr.html#SP4_1_1_2">§4.1.1.2</a>, <a href="4-dbtr.html#SP4_1_3_3">§4.1.3.3</a><br/>Rule Placement Requests - <a href="4-rpr.html#SP6_1">§6.1</a>, <a href="4-rpr.html#SP14_1">§14.1</a>, <a href="4-rpr.html#SP14_2_1">§14.2.1</a>, <a href="4-rpr.html#SP14_3">§14.3</a>, <a href="4-rpr.html#SP15_1_2">§15.1.2</a>, <a href="4-rpr.html#SP15_1_5">§15.1.5</a><br/>New Literal Pattern Requests - <a href="4-nlpr.html#SP5_2">§5.2</a>, <a href="4-nlpr.html#SP5_3">§5.3</a>, <a href="4-nlpr.html#SP6_6">§6.6</a>, <a href="4-nlpr.html#SP7_1">§7.1</a><br/>New Relation Requests - <a href="4-nrr.html#SP2">§2</a>, <a href="4-nrr.html#SP2_3_2">§2.3.2</a>, <a href="4-nrr.html#SP2_3_3">§2.3.3</a>, <a href="4-nrr.html#SP2_3_4">§2.3.4</a>, <a href="4-nrr.html#SP2_3_5">§2.3.5</a>, <a href="4-nrr.html#SP3">§3</a><br/>New Property Requests - <a href="4-npr.html#SP4_1">§4.1</a>, <a href="4-npr.html#SP4_2">§4.2</a>, <a href="4-npr.html#SP5_3">§5.3</a>, <a href="4-npr.html#SP5_4">§5.4</a>, <a href="4-npr.html#SP5_5">§5.5</a>, <a href="4-npr.html#SP5_6_1">§5.6.1</a>, <a href="4-npr.html#SP5_6_2">§5.6.2</a>, <a href="4-npr.html#SP5_6_3">§5.6.3</a>, <a href="4-npr.html#SP5_7">§5.7</a>, <a href="4-npr.html#SP5_8">§5.8</a>, <a href="4-npr.html#SP5_11_1">§5.11.1</a>, <a href="4-npr.html#SP5_11_2">§5.11.2</a><br/>New Verb Requests - <a href="4-nvr.html#SP5_2">§5.2</a>, <a href="4-nvr.html#SP6_1">§6.1</a>, <a href="4-nvr.html#SP6_2">§6.2</a>, <a href="4-nvr.html#SP6_3">§6.3</a>, <a href="4-nvr.html#SP6_4">§6.4</a>, <a href="4-nvr.html#SP5_3">§5.3</a>, <a href="4-nvr.html#SP5_2_2_1_1_2">§5.2.2.1.1.2</a>, <a href="4-nvr.html#SP5_2_2_1_2">§5.2.2.1.2</a>, <a href="4-nvr.html#SP5_2_2_1_3">§5.2.2.1.3</a>, <a href="4-nvr.html#SP5_2_3">§5.2.3</a><br/>Refine Parse Tree - <a href="5-rpt.html#SP11_4">§11.4</a>, <a href="5-rpt.html#SP11_6_1">§11.6.1</a>, <a href="5-rpt.html#SP11_6_2">§11.6.2</a>, <a href="5-rpt.html#SP11_7">§11.7</a>, <a href="5-rpt.html#SP_1">§.1</a>, <a href="5-rpt.html#SP11_8_2_3_1">§11.8.2.3.1</a><br/>The Creator - <a href="5-tc.html#SP5_1">§5.1</a>, <a href="5-tc.html#SP5_2_3">§5.2.3</a>, <a href="5-tc.html#SP6_1">§6.1</a>, <a href="5-tc.html#SP6_2">§6.2</a>, <a href="5-tc.html#SP6_3">§6.3</a>, <a href="5-tc.html#SP6_4">§6.4</a>, <a href="5-tc.html#SP6_5">§6.5</a>, <a href="5-tc.html#SP6_6">§6.6</a>, <a href="5-tc.html#SP6_7">§6.7</a>, <a href="5-tc.html#SP6_8">§6.8</a>, <a href="5-tc.html#SP6_9">§6.9</a>, <a href="5-tc.html#SP6_10">§6.10</a>, <a href="5-tc.html#SP5_4_2_2_1">§5.4.2.2.1</a>, <a href="5-tc.html#SP5_4_2_6">§5.4.2.6</a>, <a href="5-tc.html#SP5_4_2_7">§5.4.2.7</a>, <a href="5-tc.html#SP5_4_2_8">§5.4.2.8</a>, <a href="5-tc.html#SP8_1">§8.1</a>, <a href="5-tc.html#SP8_2">§8.2</a>, <a href="5-tc.html#SP8_3">§8.3</a>, <a href="5-tc.html#SP11">§11</a><br/>Assertions - <a href="5-ass.html#SP1">§1</a>, <a href="5-ass.html#SP2_2">§2.2</a>, <a href="5-ass.html#SP6_2">§6.2</a>, <a href="5-ass.html#SP6_3_4">§6.3.4</a>, <a href="5-ass.html#SP6_3_6">§6.3.6</a>, <a href="5-ass.html#SP6_3_7">§6.3.7</a>, <a href="5-ass.html#SP6_3_8_1">§6.3.8.1</a>, <a href="5-ass.html#SP6_3_8_2">§6.3.8.2</a>, <a href="5-ass.html#SP6_3_8_3">§6.3.8.3</a>, <a href="5-ass.html#SP6_3_8_4">§6.3.8.4</a>, <a href="5-ass.html#SP6_3_8_5">§6.3.8.5</a>, <a href="5-ass.html#SP6_3_8_6">§6.3.8.6</a>, <a href="5-ass.html#SP6_3_11">§6.3.11</a>, <a href="5-ass.html#SP6_3_12">§6.3.12</a>, <a href="5-ass.html#SP6_3_13">§6.3.13</a>, <a href="5-ass.html#SP6_3_16">§6.3.16</a>, <a href="5-ass.html#SP6_3_17">§6.3.17</a>, <a href="5-ass.html#SP6_3_19">§6.3.19</a>, <a href="5-ass.html#SP6_3_20">§6.3.20</a>, <a href="5-ass.html#SP6_3_21">§6.3.21</a>, <a href="5-ass.html#SP6_3_23">§6.3.23</a>, <a href="5-ass.html#SP6_3_24">§6.3.24</a>, <a href="5-ass.html#SP6_3_25_1">§6.3.25.1</a>, <a href="5-ass.html#SP6_3_25_2">§6.3.25.2</a>, <a href="5-ass.html#SP6_3_10_1">§6.3.10.1</a>, <a href="5-ass.html#SP6_3_10_2">§6.3.10.2</a>, <a href="5-ass.html#SP6_3_26">§6.3.26</a>, <a href="5-ass.html#SP6_3_26_1">§6.3.26.1</a>, <a href="5-ass.html#SP6_3_26_1_1">§6.3.26.1.1</a>, <a href="5-ass.html#SP6_3_26_2">§6.3.26.2</a>, <a href="5-ass.html#SP6_3_26_3">§6.3.26.3</a>, <a href="5-ass.html#SP6_3_26_4">§6.3.26.4</a>, <a href="5-ass.html#SP6_3_27">§6.3.27</a>, <a href="5-ass.html#SP6_3_28">§6.3.28</a>, <a href="5-ass.html#SP6_3_30">§6.3.30</a>, <a href="5-ass.html#SP6_3_32">§6.3.32</a>, <a href="5-ass.html#SP6_3_33">§6.3.33</a>, <a href="5-ass.html#SP6_3_34">§6.3.34</a>, <a href="5-ass.html#SP6_3_38">§6.3.38</a>, <a href="5-ass.html#SP6_3_38_1">§6.3.38.1</a>, <a href="5-ass.html#SP6_3_38_2">§6.3.38.2</a>, <a href="5-ass.html#SP6_3_39">§6.3.39</a>, <a href="5-ass.html#SP6_3_39_1">§6.3.39.1</a>, <a href="5-ass.html#SP6_3_39_2">§6.3.39.2</a>, <a href="5-ass.html#SP6_3_39_3">§6.3.39.3</a>, <a href="5-ass.html#SP6_3_39_4">§6.3.39.4</a>, <a href="5-ass.html#SP6_3_40">§6.3.40</a>, <a href="5-ass.html#SP6_3_41">§6.3.41</a>, <a href="5-ass.html#SP6_3_41_1">§6.3.41.1</a>, <a href="5-ass.html#SP6_3_41_2">§6.3.41.2</a>, <a href="5-ass.html#SP6_3_41_2_1">§6.3.41.2.1</a>, <a href="5-ass.html#SP6_3_41_2_2">§6.3.41.2.2</a>, <a href="5-ass.html#SP6_3_41_4">§6.3.41.4</a>, <a href="5-ass.html#SP6_3_41_8">§6.3.41.8</a>, <a href="5-ass.html#SP7_1">§7.1</a>, <a href="5-ass.html#SP6_3_42">§6.3.42</a>, <a href="5-ass.html#SP8">§8</a><br/>New Property Assertions - <a href="5-npa.html#SP1_1">§1.1</a>, <a href="5-npa.html#SP1_1_1">§1.1.1</a>, <a href="5-npa.html#SP2_1_1_1">§2.1.1.1</a>, <a href="5-npa.html#SP2_1_2">§2.1.2</a>, <a href="5-npa.html#SP2_1_3">§2.1.3</a><br/>Property Knowledge - <a href="5-pk.html#SP2_1">§2.1</a>, <a href="5-pk.html#SP3_2">§3.2</a>, <a href="5-pk.html#SP3_3">§3.3</a>, <a href="5-pk.html#SP4_1">§4.1</a>, <a href="5-pk.html#SP4_2">§4.2</a>, <a href="5-pk.html#SP4_3">§4.3</a>, <a href="5-pk.html#SP4_4">§4.4</a><br/>Relation Knowledge - <a href="5-rk.html#SP1_2">§1.2</a>, <a href="5-rk.html#SP1_3">§1.3</a>, <a href="5-rk.html#SP1_3_1">§1.3.1</a>, <a href="5-rk.html#SP3_1">§3.1</a>, <a href="5-rk.html#SP3_2">§3.2</a>, <a href="5-rk.html#SP3_3">§3.3</a><br/>Assemblies - <a href="5-ass2.html#SP8_1">§8.1</a>, <a href="5-ass2.html#SP8_2">§8.2</a>, <a href="5-ass2.html#SP8_5">§8.5</a>, <a href="5-ass2.html#SP13_1">§13.1</a><br/>Implications - <a href="5-imp.html#SP3_1">§3.1</a>, <a href="5-imp.html#SP3_2_2">§3.2.2</a>, <a href="5-imp.html#SP3_2_3">§3.2.3</a><br/>Literal Patterns - <a href="6-lp.html#SP11_2">§11.2</a>, <a href="6-lp.html#SP17_2">§17.2</a>, <a href="6-lp.html#SP17_3">§17.3</a>, <a href="6-lp.html#SP17_4">§17.4</a>, <a href="6-lp.html#SP17_1_4">§17.1.4</a>, <a href="6-lp.html#SP30_3">§30.3</a>, <a href="6-lp.html#SP30_4">§30.4</a>, <a href="6-lp.html#SP30_5">§30.5</a>, <a href="6-lp.html#SP30_6">§30.6</a>, <a href="6-lp.html#SP30_7">§30.7</a>, <a href="6-lp.html#SP30_8">§30.8</a>, <a href="6-lp.html#SP30_8_1">§30.8.1</a>, <a href="6-lp.html#SP30_8_2">§30.8.2</a>, <a href="6-lp.html#SP30_11">§30.11</a>, <a href="6-lp.html#SP30_12">§30.12</a>, <a href="6-lp.html#SP33_1">§33.1</a>, <a href="6-lp.html#SP34_1">§34.1</a>, <a href="6-lp.html#SP34_2">§34.2</a>, <a href="6-lp.html#SP34_1_1">§34.1.1</a><br/>Times of Day - <a href="6-tod.html#SP8_1">§8.1</a>, <a href="6-tod.html#SP8_2">§8.2</a><br/>Using Excerpt Meanings - <a href="6-uem.html#SP6">§6</a><br/>Unicode Literals - <a href="6-ul.html#SP2">§2</a><br/>Using Nametags - <a href="6-un.html#SP2">§2</a><br/>Instances - <a href="6-ins.html#SP18_1">§18.1</a><br/>Nonlocal Variables - <a href="6-nv.html#SP6_1">§6.1</a>, <a href="6-nv.html#SP9">§9</a>, <a href="6-nv.html#SP11_1">§11.1</a>, <a href="6-nv.html#SP13">§13</a>, <a href="6-nv.html#SP15_1_1">§15.1.1</a>, <a href="6-nv.html#SP21">§21</a>, <a href="6-nv.html#SP22">§22</a>, <a href="6-nv.html#SP24_1">§24.1</a>, <a href="6-nv.html#SP24_2">§24.2</a><br/>Adjective Meanings - <a href="7-am.html#SP12_1">§12.1</a>, <a href="7-am.html#SP26_1">§26.1</a>, <a href="7-am.html#SP26_2">§26.2</a>, <a href="7-am.html#SP26_3">§26.3</a>, <a href="7-am.html#SP26_4">§26.4</a>, <a href="7-am.html#SP26_5">§26.5</a>, <a href="7-am.html#SP27_1">§27.1</a><br/>Relations - <a href="7-rlt.html#SP4_2">§4.2</a>, <a href="7-rlt.html#SP6">§6</a>, <a href="7-rlt.html#SP24">§24</a><br/>Explicit Relations - <a href="7-er.html#SP4_1">§4.1</a>, <a href="7-er.html#SP4_2">§4.2</a><br/>Parse Tree Usage - <a href="8-ptu.html#SP12">§12</a>, <a href="8-ptu.html#SP14">§14</a><br/>Headings - <a href="8-hdn.html#SP4">§4</a>, <a href="8-hdn.html#SP8">§8</a>, <a href="8-hdn.html#SP14">§14</a>, <a href="8-hdn.html#SP16">§16</a><br/>Rule Subtrees - <a href="8-rs.html#SP2">§2</a>, <a href="8-rs.html#SP5_2">§5.2</a>, <a href="8-rs.html#SP5_6_1">§5.6.1</a>, <a href="8-rs.html#SP5_6_6">§5.6.6</a>, <a href="8-rs.html#SP5_6_7">§5.6.7</a>, <a href="8-rs.html#SP5_6_8">§5.6.8</a>, <a href="8-rs.html#SP5_6_5_2">§5.6.5.2</a>, <a href="8-rs.html#SP5_6_3_2_1">§5.6.3.2.1</a>, <a href="8-rs.html#SP5_6_3_1_1">§5.6.3.1.1</a>, <a href="8-rs.html#SP5_6_3_1_2">§5.6.3.1.2</a>, <a href="8-rs.html#SP5_7">§5.7</a>, <a href="8-rs.html#SP5_7_1_2">§5.7.1.2</a>, <a href="8-rs.html#SP6_1">§6.1</a>, <a href="8-rs.html#SP6_2">§6.2</a>, <a href="8-rs.html#SP6_3">§6.3</a>, <a href="8-rs.html#SP6_4">§6.4</a>, <a href="8-rs.html#SP6_5">§6.5</a>, <a href="8-rs.html#SP6_6">§6.6</a>, <a href="8-rs.html#SP6_7">§6.7</a>, <a href="8-rs.html#SP7_1">§7.1</a>, <a href="8-rs.html#SP7_1_1_1">§7.1.1.1</a>, <a href="8-rs.html#SP7_1_1_2">§7.1.1.2</a>, <a href="8-rs.html#SP7_1_1_3">§7.1.1.3</a>, <a href="8-rs.html#SP7_1_1_4">§7.1.1.4</a>, <a href="8-rs.html#SP7_1_1_6">§7.1.1.6</a>, <a href="8-rs.html#SP7_1_1_5_1">§7.1.1.5.1</a><br/>Parse Literals - <a href="10-pl.html#SP5_4">§5.4</a><br/>Constants and Descriptions - <a href="10-cad.html#SP19_2">§19.2</a>, <a href="10-cad.html#SP19_4">§19.4</a><br/>Type Expressions and Values - <a href="10-teav.html#SP4_1">§4.1</a>, <a href="10-teav.html#SP4_2">§4.2</a>, <a href="10-teav.html#SP20_1">§20.1</a><br/>Verbal and Relative Clauses - <a href="10-varc.html#SP12_2">§12.2</a>, <a href="10-varc.html#SP12_3_1">§12.3.1</a>, <a href="10-varc.html#SP13">§13</a><br/>Conditions and Phrases - <a href="10-cap.html#SP8_1">§8.1</a>, <a href="10-cap.html#SP12_2">§12.2</a><br/>Tree Conversions - <a href="11-tc.html#SP7_1">§7.1</a>, <a href="11-tc.html#SP7_1_1">§7.1.1</a>, <a href="11-tc.html#SP7_1_2">§7.1.2</a><br/>Sentence Conversions - <a href="11-sc.html#SP1_1">§1.1</a>, <a href="11-sc.html#SP1_4">§1.4</a><br/>Type Check Propositions - <a href="11-tcp.html#SP4_3">§4.3</a>, <a href="11-tcp.html#SP4_1_1">§4.1.1</a><br/>The Equality Relation Revisited - <a href="12-terr.html#SP4">§4</a>, <a href="12-terr.html#SP5">§5</a>, <a href="12-terr.html#SP5_2">§5.2</a>, <a href="12-terr.html#SP5_4">§5.4</a>, <a href="12-terr.html#SP5_5">§5.5</a><br/>Assert Propositions - <a href="12-ap.html#SP6">§6</a>, <a href="12-ap.html#SP8_2">§8.2</a>, <a href="12-ap.html#SP8_6">§8.6</a>, <a href="12-ap.html#SP8_8">§8.8</a>, <a href="12-ap.html#SP8_8_1">§8.8.1</a>, <a href="12-ap.html#SP8_8_2">§8.8.2</a><br/>Compile Atoms - <a href="12-ca.html#SP3_1_1">§3.1.1</a>, <a href="12-ca.html#SP3_1_2">§3.1.2</a>, <a href="12-ca.html#SP4_2">§4.2</a><br/>Deciding to Defer - <a href="12-dtd.html#SP5">§5</a>, <a href="12-dtd.html#SP10_1">§10.1</a>, <a href="12-dtd.html#SP12">§12</a>, <a href="12-dtd.html#SP17_1">§17.1</a>, <a href="12-dtd.html#SP23_1">§23.1</a>, <a href="12-dtd.html#SP23_2">§23.2</a>, <a href="12-dtd.html#SP28">§28</a><br/>Compile Deferred Propositions - <a href="12-cdp.html#SP2_1_3">§2.1.3</a>, <a href="12-cdp.html#SP2_1_4">§2.1.4</a><br/>Knowledge about Kinds - <a href="13-kak.html#SP8">§8</a><br/>Compile Arithmetic - <a href="13-ca.html#SP1">§1</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP5_1">§5.1</a>, <a href="13-rsfk.html#SP5_2">§5.2</a>, <a href="13-rsfk.html#SP5_3">§5.3</a>, <a href="13-rsfk.html#SP18_2">§18.2</a>, <a href="13-rsfk.html#SP28">§28</a><br/>RValues - <a href="14-rv.html#SP23_3_1">§23.3.1</a><br/>Dash - <a href="14-ds2.html#SP9_1_1_1">§9.1.1.1</a>, <a href="14-ds2.html#SP9_1_1_2">§9.1.1.2</a>, <a href="14-ds2.html#SP9_1_1_3">§9.1.1.3</a>, <a href="14-ds2.html#SP9_1_1_3_1">§9.1.1.3.1</a>, <a href="14-ds2.html#SP9_1_1_4">§9.1.1.4</a>, <a href="14-ds2.html#SP9_1_1_5">§9.1.1.5</a>, <a href="14-ds2.html#SP9_1_1_6">§9.1.1.6</a>, <a href="14-ds2.html#SP10_2_1">§10.2.1</a>, <a href="14-ds2.html#SP10_3_1">§10.3.1</a>, <a href="14-ds2.html#SP10_4_1">§10.4.1</a>, <a href="14-ds2.html#SP10_6_1">§10.6.1</a>, <a href="14-ds2.html#SP10_7_1">§10.7.1</a>, <a href="14-ds2.html#SP10_8_1">§10.8.1</a>, <a href="14-ds2.html#SP10_9_2_3_1_1">§10.9.2.3.1.1</a>, <a href="14-ds2.html#SP10_9_1_1_2_1">§10.9.1.1.2.1</a>, <a href="14-ds2.html#SP10_9_1_1_2_1_1">§10.9.1.1.2.1.1</a>, <a href="14-ds2.html#SP10_9_1_1_2_2_2">§10.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP10_9_1_1_3_1">§10.9.1.1.3.1</a>, <a href="14-ds2.html#SP10_9_1_1_3_1_1">§10.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP10_9_1_1_4_1">§10.9.1.1.4.1</a>, <a href="14-ds2.html#SP10_9_1_1_5_1_3">§10.9.1.1.5.1.3</a>, <a href="14-ds2.html#SP10_9_1_1_5_2">§10.9.1.1.5.2</a>, <a href="14-ds2.html#SP10_9_1_1_9">§10.9.1.1.9</a>, <a href="14-ds2.html#SP10_9_1_1_10">§10.9.1.1.10</a>, <a href="14-ds2.html#SP10_9_1_2_1">§10.9.1.2.1</a>, <a href="14-ds2.html#SP10_9_1_2_2">§10.9.1.2.2</a>, <a href="14-ds2.html#SP10_9_1_2_3_1">§10.9.1.2.3.1</a>, <a href="14-ds2.html#SP10_9_1_2_3_2">§10.9.1.2.3.2</a>, <a href="14-ds2.html#SP10_9_1_2_3_3">§10.9.1.2.3.3</a>, <a href="14-ds2.html#SP10_9_1_2_3_4">§10.9.1.2.3.4</a>, <a href="14-ds2.html#SP10_9_1_2_4">§10.9.1.2.4</a>, <a href="14-ds2.html#SP10_9_1_3">§10.9.1.3</a>, <a href="14-ds2.html#SP11_1">§11.1</a>, <a href="14-ds2.html#SP13_1_1_1">§13.1.1.1</a>, <a href="14-ds2.html#SP13_1_1_2">§13.1.1.2</a>, <a href="14-ds2.html#SP13_1_1_3">§13.1.1.3</a>, <a href="14-ds2.html#SP14_4">§14.4</a>, <a href="14-ds2.html#SP14_5">§14.5</a>, <a href="14-ds2.html#SP15_1">§15.1</a>, <a href="14-ds2.html#SP15_2">§15.2</a>, <a href="14-ds2.html#SP18_1">§18.1</a>, <a href="14-ds2.html#SP18_2_1">§18.2.1</a>, <a href="14-ds2.html#SP19_1">§19.1</a>, <a href="14-ds2.html#SP19_2">§19.2</a>, <a href="14-ds2.html#SP19_3">§19.3</a>, <a href="14-ds2.html#SP19_4">§19.4</a>, <a href="14-ds2.html#SP19_5">§19.5</a>, <a href="14-ds2.html#SP18_2_3">§18.2.3</a>, <a href="14-ds2.html#SP20_1">§20.1</a>, <a href="14-ds2.html#SP20_2">§20.2</a>, <a href="14-ds2.html#SP20_3">§20.3</a>, <a href="14-ds2.html#SP20_4">§20.4</a>, <a href="14-ds2.html#SP20_5">§20.5</a>, <a href="14-ds2.html#SP20_6">§20.6</a>, <a href="14-ds2.html#SP20_7">§20.7</a>, <a href="14-ds2.html#SP20_8">§20.8</a>, <a href="14-ds2.html#SP18_5_1">§18.5.1</a>, <a href="14-ds2.html#SP18_5_3_1">§18.5.3.1</a>, <a href="14-ds2.html#SP18_5_3_2">§18.5.3.2</a>, <a href="14-ds2.html#SP18_5_3_3">§18.5.3.3</a>, <a href="14-ds2.html#SP18_5_4">§18.5.4</a>, <a href="14-ds2.html#SP18_6_1_1">§18.6.1.1</a>, <a href="14-ds2.html#SP18_6_2_1">§18.6.2.1</a>, <a href="14-ds2.html#SP18_6_2_2">§18.6.2.2</a><br/>Properties - <a href="15-pr.html#SP4_1">§4.1</a>, <a href="15-pr.html#SP4_2">§4.2</a>, <a href="15-pr.html#SP21_1">§21.1</a><br/>Either-Or Properties - <a href="15-ep.html#SP3">§3</a>, <a href="15-ep.html#SP6">§6</a><br/>Valued Properties - <a href="15-vp.html#SP2_1">§2.1</a>, <a href="15-vp.html#SP5">§5</a>, <a href="15-vp.html#SP11">§11</a><br/>Property Sentences - <a href="15-ps.html#SP5_1">§5.1</a>, <a href="15-ps.html#SP5_2">§5.2</a>, <a href="15-ps.html#SP5_3">§5.3</a><br/>Condition Properties - <a href="15-cp.html#SP3">§3</a><br/>Measurement Adjectives - <a href="15-ma.html#SP7_1">§7.1</a>, <a href="15-ma.html#SP7_2">§7.2</a>, <a href="15-ma.html#SP9_1">§9.1</a>, <a href="15-ma.html#SP10_1">§10.1</a>, <a href="15-ma.html#SP10_4_1">§10.4.1</a>, <a href="15-ma.html#SP10_4_2">§10.4.2</a><br/>Setting Property Relation - <a href="15-spr2.html#SP6_1">§6.1</a>, <a href="15-spr2.html#SP6_2">§6.2</a><br/>Properties of Values - <a href="15-pov.html#SP4_1">§4.1</a><br/>Inferences - <a href="16-in.html#SP13">§13</a>, <a href="16-in.html#SP19_3_3">§19.3.3</a><br/>Text Literals - <a href="17-tl.html#SP11">§11</a><br/>Responses - <a href="17-rs.html#SP11_1_1">§11.1.1</a><br/>List Constants - <a href="18-lc.html#SP7_1_1">§7.1.1</a>, <a href="18-lc.html#SP7_1_2">§7.1.2</a>, <a href="18-lc.html#SP7_2_1">§7.2.1</a><br/>Tables - <a href="19-tb.html#SP5">§5</a>, <a href="19-tb.html#SP14_1">§14.1</a>, <a href="19-tb.html#SP17_1">§17.1</a>, <a href="19-tb.html#SP17_3">§17.3</a>, <a href="19-tb.html#SP17_5">§17.5</a>, <a href="19-tb.html#SP17_6">§17.6</a>, <a href="19-tb.html#SP17_9_2">§17.9.2</a>, <a href="19-tb.html#SP17_9_3">§17.9.3</a>, <a href="19-tb.html#SP17_10_2">§17.10.2</a>, <a href="19-tb.html#SP17_10_2_1">§17.10.2.1</a>, <a href="19-tb.html#SP17_10_2_2">§17.10.2.2</a>, <a href="19-tb.html#SP17_10_3_2">§17.10.3.2</a>, <a href="19-tb.html#SP17_10_4_1">§17.10.4.1</a>, <a href="19-tb.html#SP17_10_2_2_1">§17.10.2.2.1</a>, <a href="19-tb.html#SP24_1_3_2">§24.1.3.2</a>, <a href="19-tb.html#SP24_1_3_2_1">§24.1.3.2.1</a>, <a href="19-tb.html#SP29">§29</a><br/>Equations - <a href="20-eq.html#SP8_3">§8.3</a>, <a href="20-eq.html#SP8_1_3">§8.1.3</a>, <a href="20-eq.html#SP15_4">§15.4</a>, <a href="20-eq.html#SP39_4_1">§39.4.1</a>, <a href="20-eq.html#SP39_4_2">§39.4.2</a>, <a href="20-eq.html#SP45_1">§45.1</a>, <a href="20-eq.html#SP45_2">§45.2</a>, <a href="20-eq.html#SP45_3_1">§45.3.1</a>, <a href="20-eq.html#SP45_3_2">§45.3.2</a>, <a href="20-eq.html#SP47">§47</a><br/>Rules - <a href="21-rl.html#SP6">§6</a>, <a href="21-rl.html#SP10_1">§10.1</a>, <a href="21-rl.html#SP14">§14</a>, <a href="21-rl.html#SP17">§17</a>, <a href="21-rl.html#SP24">§24</a><br/>Rule Bookings - <a href="21-rb.html#SP8">§8</a><br/>Rulebooks - <a href="21-rl2.html#SP7_1">§7.1</a>, <a href="21-rl2.html#SP7_2">§7.2</a>, <a href="21-rl2.html#SP7_3">§7.3</a>, <a href="21-rl2.html#SP12_1">§12.1</a>, <a href="21-rl2.html#SP13">§13</a>, <a href="21-rl2.html#SP18">§18</a>, <a href="21-rl2.html#SP20_1">§20.1</a><br/>Focus and Outcome - <a href="21-fao.html#SP5_1">§5.1</a>, <a href="21-fao.html#SP5_2">§5.2</a>, <a href="21-fao.html#SP7_1">§7.1</a>, <a href="21-fao.html#SP7_2">§7.2</a>, <a href="21-fao.html#SP10">§10</a><br/>Activities - <a href="21-ac.html#SP3_2">§3.2</a>, <a href="21-ac.html#SP4">§4</a>, <a href="21-ac.html#SP5_1">§5.1</a>, <a href="21-ac.html#SP6">§6</a><br/>Construction Sequence - <a href="22-cs.html#SP4">§4</a>, <a href="22-cs.html#SP9">§9</a>, <a href="22-cs.html#SP11_6">§11.6</a>, <a href="22-cs.html#SP11_7">§11.7</a><br/>Phrases - <a href="22-ph.html#SP5_9">§5.9</a>, <a href="22-ph.html#SP5_1_1">§5.1.1</a>, <a href="22-ph.html#SP5_10">§5.10</a>, <a href="22-ph.html#SP6_1">§6.1</a>, <a href="22-ph.html#SP12">§12</a><br/>Phrase Usage - <a href="22-pu.html#SP5_2">§5.2</a>, <a href="22-pu.html#SP6_1">§6.1</a>, <a href="22-pu.html#SP6_2">§6.2</a>, <a href="22-pu.html#SP6_3">§6.3</a>, <a href="22-pu.html#SP6_4">§6.4</a>, <a href="22-pu.html#SP6_5">§6.5</a>, <a href="22-pu.html#SP10_2">§10.2</a>, <a href="22-pu.html#SP10_2_1">§10.2.1</a>, <a href="22-pu.html#SP11_1">§11.1</a>, <a href="22-pu.html#SP11_2">§11.2</a>, <a href="22-pu.html#SP10_3_1_2">§10.3.1.2</a>, <a href="22-pu.html#SP20_1_1_1_1">§20.1.1.1.1</a>, <a href="22-pu.html#SP20_1_1_1_2">§20.1.1.1.2</a>, <a href="22-pu.html#SP20_1_1_1_3">§20.1.1.1.3</a>, <a href="22-pu.html#SP20_1_1_1_4">§20.1.1.1.4</a>, <a href="22-pu.html#SP20_1_1_1_5">§20.1.1.1.5</a>, <a href="22-pu.html#SP22_1">§22.1</a>, <a href="22-pu.html#SP22_2">§22.2</a>, <a href="22-pu.html#SP23_1">§23.1</a>, <a href="22-pu.html#SP23_2">§23.2</a><br/>Phrase Runtime Context Data - <a href="22-prcd.html#SP9_5">§9.5</a><br/>Describing Phrase Type Data - <a href="22-dptd.html#SP8_3">§8.3</a>, <a href="22-dptd.html#SP13_1">§13.1</a>, <a href="22-dptd.html#SP15_1">§15.1</a>, <a href="22-dptd.html#SP16">§16</a>, <a href="22-dptd.html#SP18_2">§18.2</a>, <a href="22-dptd.html#SP18_3">§18.3</a>, <a href="22-dptd.html#SP18_4">§18.4</a>, <a href="22-dptd.html#SP18_1_1">§18.1.1</a>, <a href="22-dptd.html#SP18_1_2">§18.1.2</a>, <a href="22-dptd.html#SP18_1_3">§18.1.3</a>, <a href="22-dptd.html#SP20">§20</a>, <a href="22-dptd.html#SP20_2_1">§20.2.1</a>, <a href="22-dptd.html#SP20_2_2">§20.2.2</a>, <a href="22-dptd.html#SP20_2_3">§20.2.3</a>, <a href="22-dptd.html#SP20_3_1">§20.3.1</a>, <a href="22-dptd.html#SP21_1">§21.1</a><br/>Phrase Options - <a href="22-po.html#SP8">§8</a>, <a href="22-po.html#SP9_1_1">§9.1.1</a>, <a href="22-po.html#SP10_1">§10.1</a><br/>To Phrases - <a href="22-tp.html#SP3">§3</a>, <a href="22-tp.html#SP6_1">§6.1</a>, <a href="22-tp.html#SP7">§7</a><br/>Timed Phrases - <a href="22-tp2.html#SP5">§5</a><br/>Adjectival Definitions - <a href="23-ad.html#SP4_1">§4.1</a>, <a href="23-ad.html#SP4_3">§4.3</a>, <a href="23-ad.html#SP5">§5</a><br/>Adjectives by Condition - <a href="23-abc.html#SP1">§1</a><br/>Local Variables - <a href="24-lv.html#SP6_3_1">§6.3.1</a>, <a href="24-lv.html#SP32_1">§32.1</a>, <a href="24-lv.html#SP32_2">§32.2</a>, <a href="24-lv.html#SP38">§38</a>, <a href="24-lv.html#SP42">§42</a><br/>Chronology - <a href="24-ch.html#SP2">§2</a>, <a href="24-ch.html#SP3">§3</a>, <a href="24-ch.html#SP5">§5</a>, <a href="24-ch.html#SP6_4">§6.4</a>, <a href="24-ch.html#SP6_4_1">§6.4.1</a><br/>Parse Invocations - <a href="25-pi.html#SP3_1_1">§3.1.1</a>, <a href="25-pi.html#SP3_1_2">§3.1.2</a>, <a href="25-pi.html#SP3_1_3">§3.1.3</a>, <a href="25-pi.html#SP3_2_1_2">§3.2.1.2</a><br/>Compile Invocations - <a href="25-ci.html#SP2_1_1_2">§2.1.1.2</a><br/>Compile Invocations Inline - <a href="25-cii.html#SP5_2">§5.2</a>, <a href="25-cii.html#SP3_1_1_2">§3.1.1.2</a>, <a href="25-cii.html#SP3_2_1_1">§3.2.1.1</a>, <a href="25-cii.html#SP3_3_1">§3.3.1</a>, <a href="25-cii.html#SP3_1_1_4_6">§3.1.1.4.6</a>, <a href="25-cii.html#SP3_1_1_4_7_1_1">§3.1.1.4.7.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">§3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_1_1_4_12">§3.1.1.4.12</a>, <a href="25-cii.html#SP3_1_1_4_13">§3.1.1.4.13</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">§3.5.4.3</a>, <a href="25-cii.html#SP3_6_4">§3.6.4</a>, <a href="25-cii.html#SP3_7_3">§3.7.3</a>, <a href="25-cii.html#SP8">§8</a><br/>Compile Phrases - <a href="25-cp.html#SP2_3_1">§2.3.1</a>, <a href="25-cp.html#SP4_3_2_1">§4.3.2.1</a>, <a href="25-cp.html#SP4_3_2_2">§4.3.2.2</a>, <a href="25-cp.html#SP_1">§.1</a>, <a href="25-cp.html#SP4_3_3">§4.3.3</a>, <a href="25-cp.html#SP4_3_5">§4.3.5</a>, <a href="25-cp.html#SP4_3_5_5">§4.3.5.5</a>, <a href="25-cp.html#SP7_1_2_1">§7.1.2.1</a>, <a href="25-cp.html#SP7_1_3_1">§7.1.3.1</a>, <a href="25-cp.html#SP7_1_4_1">§7.1.4.1</a>, <a href="25-cp.html#SP7_1_1_1">§7.1.1.1</a>, <a href="25-cp.html#SP7_1_5_1">§7.1.5.1</a>, <a href="25-cp.html#SP7_1_5_2">§7.1.5.2</a>, <a href="25-cp.html#SP7_1_5_3">§7.1.5.3</a>, <a href="25-cp.html#SP7_1_6_1">§7.1.6.1</a>, <a href="25-cp.html#SP7_1_6_2">§7.1.6.2</a>, <a href="25-cp.html#SP7_1_7">§7.1.7</a><br/>Fundamental Constants - <a href="26-fc.html#SP3">§3</a><br/>Inform 6 Inclusions - <a href="26-i6i.html#SP4_3">§4.3</a>, <a href="26-i6i.html#SP4_4">§4.4</a>, <a href="26-i6i.html#SP5_5">§5.5</a><br/>Jump Labels - <a href="26-jl.html#SP2">§2</a><br/>Routines - <a href="26-rt.html#SP4_2">§4.2</a><br/>I6 Template Interpreter - <a href="26-iti.html#SP1">§1</a>, <a href="26-iti.html#SP2_1">§2.1</a>, <a href="26-iti.html#SP2_6">§2.6</a><br/>Plugins - <a href="26-pl.html#SP10_1">§10.1</a><br/>Test Scripts - <a href="26-ts.html#SP2">§2</a>, <a href="26-ts.html#SP2_1">§2.1</a>, <a href="26-ts.html#SP3">§3</a><br/>Compilation Units - <a href="27-cm.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">latest_syntax_tree</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::language_of_syntax</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Task::language_of_syntax</span></span>:<br/>Translation Requests - <a href="4-tr.html#SP4_1">§4.1</a><br/>New Use Option Requests - <a href="4-nuor.html#SP3_2">§3.2</a><br/>New Verb Requests - <a href="4-nvr.html#SP5_1">§5.1</a><br/>Instances - <a href="6-ins.html#SP5_3">§5.3</a><br/>Nonlocal Variables - <a href="6-nv.html#SP6_3">§6.3</a><br/>Relations - <a href="7-rlt.html#SP28">§28</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP4">§4</a><br/>Conditions - <a href="14-cn.html#SP11">§11</a><br/>Properties - <a href="15-pr.html#SP4_8">§4.8</a><br/>Measurement Adjectives - <a href="15-ma.html#SP10_4">§10.4</a>, <a href="15-ma.html#SP13">§13</a><br/>Table Columns - <a href="19-tc.html#SP3">§3</a><br/>Tables - <a href="19-tb.html#SP17_7">§17.7</a><br/>Equations - <a href="20-eq.html#SP8_1_3">§8.1.3</a><br/>Rules - <a href="21-rl.html#SP4_1">§4.1</a><br/>Rulebooks - <a href="21-rl2.html#SP9">§9</a><br/>Focus and Outcome - <a href="21-fao.html#SP9">§9</a><br/>Activities - <a href="21-ac.html#SP4">§4</a><br/>Phrases as Values - <a href="22-pav.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Projects::get_language_of_syntax</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::project</span></a><span class="plain-syntax">());</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Resources in a Blorb file have unique ID numbers which are positive integers,
|
|
but these are not required to start from 1, nor to be contiguous. For Inform,
|
|
ID number 1 is reserved for the cover image (whether or not any cover image
|
|
is provided: it is legal for there to be figures but no cover, and vice versa).
|
|
Other figures, and sound effects, then mix freely as needed from ID number 3
|
|
on upwards. We skip 2 so that it can be guaranteed that no sound resource
|
|
has ID 1 or 2: this is to help people trying to play sounds in the Z-machine,
|
|
where operand 1 or 2 in the <span class="extract"><span class="extract-syntax">@sound</span></span> opcode signifies not a sound resource
|
|
number but a long or short beep. If a genuine sound effect had resource ID
|
|
1 or 2, therefore, it would be unplayable on the Z-machine.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::get_next_free_blorb_resource_ID</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">next_resource_number</span><span class="plain-syntax">++;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>This seed is ordinarily 0, causing no fix to occur, but can be set to
|
|
a non-zero value to make testing Inform easier.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::rng_seed</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Task::rng_seed</span></span>:<br/>Assertions - <a href="5-ass.html#SP6_3_41_2_2_1">§6.3.41.2.2.1</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP26">§26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">fix_rng</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>These functions are for steps on the production line which involve
|
|
referring something back up to Inbuild.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::make_built_in_kind_constructors</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Task::make_built_in_kind_constructors</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Projects::load_built_in_kind_constructors</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::begin_execution_at_to_begin</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Task::begin_execution_at_to_begin</span></span>:<br/>Phrases - <a href="22-ph.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Projects::Main_defined</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Project-related files and file paths. </b>An Inform compilation can touch dozens of different files, and the rest
|
|
of this section is a tour through the ones which are associated with the
|
|
project itself. (Common resources, used for all compilations, or optional
|
|
add-ins such as extensions are the business of Inbuild.)
|
|
</p>
|
|
|
|
<p class="commentary">If a project is called, say, Wuthering Heights, and is a "bundle" as created
|
|
and compiled by the Inform app, then:
|
|
</p>
|
|
|
|
<ul class="items"><li>(a) The project path will be <span class="extract"><span class="extract-syntax">Wuthering Heights.inform</span></span>. This looks opaque
|
|
on MacOS, as if a file, but on all platforms it is in fact a directory.
|
|
</li><li>(b) Within it is <span class="extract"><span class="extract-syntax">Wuthering Heights.inform/Build</span></span>, the "build folder".
|
|
</li><li>(c) Alongside it is <span class="extract"><span class="extract-syntax">Wuthering Heights.materials</span></span>. This is also a directory,
|
|
but is openly accessible even on MacOS.
|
|
</li></ul>
|
|
<p class="commentary">If Inform is working on a single source text file, not a bundle, then the
|
|
project will be the current working directory, but now the build folder will
|
|
be the Inbuild transient area, and materials (if present) will again be
|
|
alongside.
|
|
</p>
|
|
|
|
<p class="commentary">To begin: what's in the project area? <span class="extract"><span class="extract-syntax">story.ni</span></span> and <span class="extract"><span class="extract-syntax">auto.inf</span></span>, neither
|
|
one very helpfully named, are defined in Inbuild rather than here: these
|
|
are the I7 source text and its compilation down to I6, respectively.
|
|
In addition we have:
|
|
</p>
|
|
|
|
<p class="commentary">The UUID file records an ISBN-like identifying number for the project. This
|
|
is read-only for us.
|
|
</p>
|
|
|
|
<p class="commentary">The iFiction record, manifest and blurb file are all files that we generate
|
|
to give instructions to the releasing agent Inblorb. This means that they
|
|
have no purpose unless Inform is in a release run (with <span class="extract"><span class="extract-syntax">-release</span></span> set on
|
|
the command line), but they take no time to generate so we make them anyway.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::uuid_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"uuid.txt"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::ifiction_record_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Metadata.iFiction"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::manifest_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"manifest.plist"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::blurb_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Release.blurb"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>The build folder for a project contains all of the working files created
|
|
during the compilation process. The debugging log and Inform problems report
|
|
(its HTML file of error messages) are both written there: see the Main Routine
|
|
section for details. In addition we have:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::cblorb_report_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">build</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"StatusCblorb.html"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::parse_tree_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">build</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Parse tree.txt"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>The name of the unblorbed story file is chosen for us by Inbuild, so
|
|
we have to extract it from the build graph:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::storyfile_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">unblorbed_vertex</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"project graph not ready"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_file</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>Deeper inside the<span class="extract"><span class="extract-syntax">Build</span></span> subfolder is an (also ephemeral) <span class="extract"><span class="extract-syntax">Index</span></span> subfolder,
|
|
which holds the mini-website of the Index for a project.
|
|
</p>
|
|
|
|
<p class="commentary">The main index files (<span class="extract"><span class="extract-syntax">Phrasebook.html</span></span> and so on) live at the top level,
|
|
details on actions live in the subfolder <span class="extract"><span class="extract-syntax">Details</span></span>: see below.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::index_path</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Task::index_path</span></span>:<br/><a href="1-wtc.html#SP14">§14</a>, <a href="1-wtc.html#SP15">§15</a>, <a href="1-wtc.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">build</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </b>An oddity in the Index folder is an XML file recording where the headings
|
|
are in the source text: this is for the benefit of the user interface
|
|
application, if it wants it, but is not linked to or used by the HTML of
|
|
the index as seen by the user.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::xml_headings_file</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Task::xml_headings_file</span></span>:<br/>Headings - <a href="8-hdn.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP13" class="function-link"><span class="function-syntax">Task::index_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Headings.xml"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b>Within the Index is a deeper level, into the weeds as it were, called
|
|
<span class="extract"><span class="extract-syntax">Details</span></span>.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::index_details_path</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Task::index_details_path</span></span>:<br/><a href="1-wtc.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP13" class="function-link"><span class="function-syntax">Task::index_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Details"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b>And the following routine determines the filename for a page in this
|
|
mini-website. Filenames down in the <span class="extract"><span class="extract-syntax">Details</span></span> area have the form
|
|
<span class="extract"><span class="extract-syntax">N_S</span></span> where <span class="extract"><span class="extract-syntax">N</span></span> is an integer supplied and <span class="extract"><span class="extract-syntax">S</span></span> the leafname; for instance,
|
|
<span class="extract"><span class="extract-syntax">21_A.html</span></span> provides details page number 21 about actions, derived from the
|
|
leafname <span class="extract"><span class="extract-syntax">A.html</span></span>.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::index_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sub</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sub</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">full_leafname</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">full_leafname</span><span class="plain-syntax">, </span><span class="string-syntax">"%d_%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sub</span><span class="plain-syntax">, </span><span class="identifier-syntax">leafname</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP15" class="function-link"><span class="function-syntax">Task::index_details_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">full_leafname</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">full_leafname</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP13" class="function-link"><span class="function-syntax">Task::index_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">leafname</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b>That's it for the project folder, but other project-related stuff is in
|
|
the materials folder, which we turn to next.
|
|
</p>
|
|
|
|
<p class="commentary">Inform is occasionally run in a mode where it performs a release on an
|
|
existing story file (for example a 1980s Infocom one) rather than on one
|
|
that it has newly generated. This is the filename such a story file would
|
|
have by default, if so.
|
|
</p>
|
|
|
|
<p class="commentary">By default the story file will be called something like <span class="extract"><span class="extract-syntax">story.z8</span></span>, but
|
|
its leafname is actually declared from the source text of the Inform
|
|
project created to do this wrapping-up. So we need a way to set as well
|
|
as read this filename. Whatever the leafname, though, it lives in the top
|
|
level of materuals.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Task::wraps_existing_storyfile</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Task::wraps_existing_storyfile</span></span>:<br/>Index Physical World - <a href="6-ipw.html#SP2">§2</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP6">§6</a><br/>Text Literals - <a href="17-tl.html#SP13_1">§13.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">existing_storyfile</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Task::set_existing_storyfile</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"story.%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TargetVMs::get_unblorbed_extension</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::vm</span></a><span class="plain-syntax">()));</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">existing_storyfile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">existing_storyfile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::existing_storyfile_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">existing_storyfile</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. </b>Materials is also where cover art lives: it could have either the file
|
|
extension <span class="extract"><span class="extract-syntax">.jpg</span></span> or <span class="extract"><span class="extract-syntax">.png</span></span>, and we generate both sets of filenames, even
|
|
though at most one will actually work. This is also where we generate the EPS
|
|
file of the map, if so requested; a bit anomalously, it's the only file in
|
|
Materials but outside Release which we write to.
|
|
</p>
|
|
|
|
<p class="commentary">This is also where the originals (not the released copies) of the Figures
|
|
and Sounds, if any, live: in their own subfolders.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::large_cover_art_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">JPEG</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">JPEG</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Cover.jpg"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Cover.png"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::epsmap_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform Map.eps"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::figures_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::sounds_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>On a release run, Inblorb will populate the Release subfolder of Materials;
|
|
figures and sounds will be copied into the relevant subfolders. The principle
|
|
is that everything in Release can always be thrown away without loss, because
|
|
it can all be generated again.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::release_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"there is no current task"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">materials</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Release"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_figures_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Figures"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_sounds_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sounds"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::released_interpreter_path</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP19" class="function-link"><span class="function-syntax">Task::release_path</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"interpreter"</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<nav role="progress"><div class="progresscontainer">
|
|
<ul class="progressbar"><li class="progressprev"><a href="1-cm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresscurrent">wtc</li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-bv.html">3</a></li><li class="progresschapter"><a href="4-dlr.html">4</a></li><li class="progresschapter"><a href="5-rpt.html">5</a></li><li class="progresschapter"><a href="6-lp.html">6</a></li><li class="progresschapter"><a href="7-am.html">7</a></li><li class="progresschapter"><a href="8-ptu.html">8</a></li><li class="progresschapter"><a href="9-ef.html">9</a></li><li class="progresschapter"><a href="10-its.html">10</a></li><li class="progresschapter"><a href="11-tc.html">11</a></li><li class="progresschapter"><a href="12-terr.html">12</a></li><li class="progresschapter"><a href="13-kak.html">13</a></li><li class="progresschapter"><a href="14-sp.html">14</a></li><li class="progresschapter"><a href="15-pr.html">15</a></li><li class="progresschapter"><a href="16-is.html">16</a></li><li class="progresschapter"><a href="17-tl.html">17</a></li><li class="progresschapter"><a href="18-lc.html">18</a></li><li class="progresschapter"><a href="19-tc.html">19</a></li><li class="progresschapter"><a href="20-eq.html">20</a></li><li class="progresschapter"><a href="21-rl.html">21</a></li><li class="progresschapter"><a href="22-itp.html">22</a></li><li class="progresschapter"><a href="23-ad.html">23</a></li><li class="progresschapter"><a href="24-lv.html">24</a></li><li class="progresschapter"><a href="25-in.html">25</a></li><li class="progresschapter"><a href="26-fc.html">26</a></li><li class="progresschapter"><a href="27-hr.html">27</a></li><li class="progressnext"><a href="1-htc.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|