mirror of
https://github.com/ganelson/inform.git
synced 2024-07-09 02:24:21 +03:00
518 lines
57 KiB
HTML
518 lines
57 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>1/pp</title>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
|
<meta http-equiv="Content-Language" content="en-gb">
|
||
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<!--Weave of '1/wtc' generated by 7-->
|
||
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>What To Compile</b></li></ul><p class="purpose">To receive an instruction to compile something from Inbuild, and then to sort out the many locations then used in the host filing system.</p>
|
||
|
|
||
|
<ul class="toc"><li><a href="#SP1">§1. Task data</a></li><li><a href="#SP7">§7. Project-related files and file paths</a></li></ul><hr class="tocbar">
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Task data. </b>When Inbuild (a copy of which is included in the Inform 7 executable) decides
|
||
|
that an Inform source text must be compiled, it calls <code class="display"><span class="extract">Task::carry_out</span></code>. By
|
||
|
this point Inbuild will have set up an <code class="display"><span class="extract">inform_project</span></code> structure to
|
||
|
represent the program we have to compile; but we will need additional data
|
||
|
about that compilation, and it's stored in the following.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">compile_task_data</span><span class="plain"> {</span>
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">build_step</span><span class="plain"> *</span><span class="identifier">task</span><span class="plain">;</span>
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">;</span>
|
||
|
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">;</span>
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">materials</span><span class="plain">;</span>
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">build</span><span class="plain">;</span>
|
||
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">existing_storyfile</span><span class="plain">;</span>
|
||
|
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage_of_compilation</span><span class="plain">;</span>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">next_resource_number</span><span class="plain">;</span>
|
||
|
|
||
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||
|
<span class="plain">} </span><span class="reserved">compile_task_data</span><span class="plain">;</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The structure compile_task_data is private to this section.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>An early and perhaps arguable design decision for inform7 was that it would
|
||
|
compile just one source text in its lifetime as a process: and because of that,
|
||
|
<code class="display"><span class="extract">Task::carry_out</span></code> can only in fact be called once, and Inbuild only does so
|
||
|
once. But the following routine allows in principle for multiple calls,
|
||
|
against the day when we change our minds about all this.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">Something we will never do is attempt to make <code class="display"><span class="extract">inform7</span></code> thread-safe in the
|
||
|
sense of being able to compile two source texts simultaneously. The global
|
||
|
<code class="display"><span class="extract">inform7_task</span></code> is null when nothing is being compiled, or set to the unique
|
||
|
thing which is being compiled when it is.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">compile_task_data</span><span class="plain"> *</span><span class="identifier">inform7_task</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||
|
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::carry_out</span><span class="plain">(</span><span class="identifier">build_step</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
|
||
|
<span class="identifier">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">ProjectBundleManager::from_copy</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">ProjectFileManager::from_copy</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||
|
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"cannot re-enter with new task"</span><span class="plain">);</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">compile_task_data</span><span class="plain">);</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>task</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-></span><span class="identifier">associated_copy</span><span class="plain">-></span><span class="identifier">location_if_path</span><span class="plain">;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain"> = </span><span class="identifier">Projects::build_pathname</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain"> = </span><span class="identifier">Inbuild::materials</span><span class="plain">();</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> = -1;</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>next_resource_number</span><span class="plain"> = 3;</span>
|
||
|
|
||
|
<span class="identifier">inform_language</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">NaturalLanguages::English</span><span class="plain">();</span>
|
||
|
<span class="identifier">Projects::set_language_of_syntax</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||
|
<span class="identifier">Projects::set_language_of_index</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||
|
<span class="identifier">Projects::set_language_of_play</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
|
||
|
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="functiontext">Sequence::carry_out</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">);</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::carry_out appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>We will keep track of how far along the process has advanced, in very
|
||
|
rough terms.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Task::advance_stage_to</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> <= </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not an advance"</span><span class="plain">);</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> = </span><span class="identifier">stage</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_before_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> < </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_during_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> == </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::is_after_stage</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>stage_of_compilation</span><span class="plain"> > </span><span class="identifier">stage</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::advance_stage_to is used in 1/htc (<a href="1-htc.html#SP2">§2</a>, <a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_4">§2.4</a>, <a href="1-htc.html#SP2_5">§2.5</a>, <a href="1-htc.html#SP2_6">§2.6</a>, <a href="1-htc.html#SP2_7">§2.7</a>, <a href="1-htc.html#SP2_8">§2.8</a>, <a href="1-htc.html#SP2_9">§2.9</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function Task::is_before_stage appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::is_during_stage is used in 16/in (<a href="16-in.html#SP7">§7</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function Task::is_after_stage appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The current project and the virtual machine we want to compile it for:
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">inform_project</span><span class="plain"> *</span><span class="functiontext">Task::project</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
|
||
|
<span class="identifier">target_vm</span><span class="plain"> *</span><span class="functiontext">Task::vm</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>task</span><span class="plain">-></span><span class="identifier">for_vm</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::project is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>, <a href="1-htc.html#SP2_3">§2.3</a>, <a href="1-htc.html#SP2_8">§2.8</a>), 3/nl (<a href="3-nl.html#SP3">§3</a>), 4/its (<a href="4-its.html#SP7">§7</a>), 4/am (<a href="4-am.html#SP42">§42</a>, <a href="4-am.html#SP43">§43</a>), 5/ins (<a href="5-ins.html#SP14">§14</a>, <a href="5-ins.html#SP25">§25</a>, <a href="5-ins.html#SP26">§26</a>), 5/ipw (<a href="5-ipw.html#SP3_3_1">§3.3.1</a>, <a href="5-ipw.html#SP3_3_1_1">§3.3.1.1</a>), 6/nv (<a href="6-nv.html#SP22">§22</a>), 26/ts (<a href="26-ts.html#SP11">§11</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function Task::vm is used in <a href="#SP14">§14</a>, 1/htc (<a href="1-htc.html#SP2_8">§2.8</a>), 5/lp (<a href="5-lp.html#SP12_2">§12.2</a>, <a href="5-lp.html#SP18_3">§18.3</a>), 6/rlt (<a href="6-rlt.html#SP14">§14</a>), 7/hdn (<a href="7-hdn.html#SP12">§12</a>), 8/ie (<a href="8-ie.html#SP9_1">§9.1</a>), 13/rsfk (<a href="13-rsfk.html#SP18_1">§18.1</a>, <a href="13-rsfk.html#SP20">§20</a>, <a href="13-rsfk.html#SP26">§26</a>), 17/ts (<a href="17-ts.html#SP11_1">§11.1</a>), 25/cii (<a href="25-cii.html#SP3_5_8_3">§3.5.8.3</a>), 26/fc (<a href="26-fc.html#SP3">§3</a>), 26/uo (<a href="26-uo.html#SP18">§18</a>), 26/rt (<a href="26-rt.html#SP4">§4</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Resources in a Blorb file have unique ID numbers which are positive integers,
|
||
|
but these are not required to start from 1, nor to be contiguous. For Inform,
|
||
|
ID number 1 is reserved for the cover image (whether or not any cover image
|
||
|
is provided: it is legal for there to be figures but no cover, and vice versa).
|
||
|
Other figures, and sound effects, then mix freely as needed from ID number 3
|
||
|
on upwards. We skip 2 so that it can be guaranteed that no sound resource
|
||
|
has ID 1 or 2: this is to help people trying to play sounds in the Z-machine,
|
||
|
where operand 1 or 2 in the <code class="display"><span class="extract">@sound</span></code> opcode signifies not a sound resource
|
||
|
number but a long or short beep. If a genuine sound effect had resource ID
|
||
|
1 or 2, therefore, it would be unplayable on the Z-machine.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::get_next_free_blorb_resource_ID</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>next_resource_number</span><span class="plain">++;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::get_next_free_blorb_resource_ID appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>This seed is ordinarily 0, causing no fix to occur, but can be set to
|
||
|
a non-zero value to make testing Inform easier.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::rng_seed</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">-></span><span class="identifier">fix_rng</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::rng_seed is used in 9/ma (<a href="9-ma.html#SP3_3_41_2_2_1">§3.3.41.2.2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Project-related files and file paths. </b>An Inform compilation can touch dozens of different files, and the rest
|
||
|
of this section is a tour through the ones which are associated with the
|
||
|
project itself. (Common resources, used for all compilations, or optional
|
||
|
add-ins such as extensions are the business of Inbuild.)
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">If a project is called, say, Wuthering Heights, and is a "bundle" as created
|
||
|
and compiled by the Inform app, then:
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<ul class="items"><li>(a) The project path will be <code class="display"><span class="extract">Wuthering Heights.inform</span></code>. This looks opaque
|
||
|
on MacOS, as if a file, but on all platforms it is in fact a directory.
|
||
|
</li><li>(b) Within it is <code class="display"><span class="extract">Wuthering Heights.inform/Build</span></code>, the "build folder".
|
||
|
</li><li>(c) Alongside it is <code class="display"><span class="extract">Wuthering Heights.materials</span></code>. This is also a directory,
|
||
|
but is openly accessible even on MacOS.
|
||
|
</li></ul>
|
||
|
<p class="inwebparagraph">If Inform is working on a single source text file, not a bundle, then the
|
||
|
project will be the current working directory, but now the build folder will
|
||
|
be the Inbuild transient area, and materials (if present) will again be
|
||
|
alongside.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">To begin: what's in the project area? <code class="display"><span class="extract">story.ni</span></code> and <code class="display"><span class="extract">auto.inf</span></code>, neither
|
||
|
one very helpfully named, are defined in Inbuild rather than here: these
|
||
|
are the I7 source text and its compilation down to I6, respectively.
|
||
|
In addition we have:
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">The UUID file records an ISBN-like identifying number for the project. This
|
||
|
is read-only for us.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">The iFiction record, manifest and blurb file are all files that we generate
|
||
|
to give instructions to the releasing agent Inblorb. This means that they
|
||
|
have no purpose unless Inform is in a release run (with <code class="display"><span class="extract">-release</span></code> set on
|
||
|
the command line), but they take no time to generate so we make them anyway.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::uuid_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"uuid.txt"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::ifiction_record_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Metadata.iFiction"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::manifest_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"manifest.plist"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::blurb_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>path</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release.blurb"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::uuid_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::ifiction_record_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::manifest_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::blurb_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>The build folder for a project contains all of the working files created
|
||
|
during the compilation process. The debugging log and Inform problems report
|
||
|
(its HTML file of error messages) are both written there: see the Main Routine
|
||
|
section for details. In addition we have:
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::cblorb_report_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StatusCblorb.html"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::parse_tree_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Parse tree.txt"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::cblorb_report_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::parse_tree_file is used in 7/ptu (<a href="7-ptu.html#SP18">§18</a>).</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>The name of the unblorbed story file is chosen for us by Inbuild, so
|
||
|
we have to extract it from the build graph:
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::storyfile_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="identifier">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>project</span><span class="plain">-></span><span class="identifier">unblorbed_vertex</span><span class="plain">;</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">V</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"project graph not ready"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">-></span><span class="identifier">buildable_if_internal_file</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::storyfile_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Deeper inside the<code class="display"><span class="extract">Build</span></code> subfolder is an (also ephemeral) <code class="display"><span class="extract">Index</span></code> subfolder,
|
||
|
which holds the mini-website of the Index for a project.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">The main index files (<code class="display"><span class="extract">Phrasebook.html</span></code> and so on) live at the top level,
|
||
|
details on actions live in the subfolder <code class="display"><span class="extract">Details</span></code>: see below.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::index_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Index"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::index_path is used in <a href="#SP11">§11</a>, <a href="#SP12">§12</a>, <a href="#SP13">§13</a>.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>An oddity in the Index folder is an XML file recording where the headings
|
||
|
are in the source text: this is for the benefit of the user interface
|
||
|
application, if it wants it, but is not linked to or used by the HTML of
|
||
|
the index as seen by the user.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::xml_headings_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Headings.xml"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::xml_headings_file is used in 7/hdn (<a href="7-hdn.html#SP35">§35</a>).</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>Within the Index is a deeper level, into the weeds as it were, called
|
||
|
<code class="display"><span class="extract">Details</span></code>.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::index_details_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Details"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::index_details_path is used in <a href="#SP13">§13</a>.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>And the following routine determines the filename for a page in this
|
||
|
mini-website. Filenames down in the <code class="display"><span class="extract">Details</span></code> area have the form
|
||
|
<code class="display"><span class="extract">N_S</span></code> where <code class="display"><span class="extract">N</span></code> is an integer supplied and <code class="display"><span class="extract">S</span></code> the leafname; for instance,
|
||
|
<code class="display"><span class="extract">21_A.html</span></code> provides details page number 21 about actions, derived from the
|
||
|
leafname <code class="display"><span class="extract">A.html</span></code>.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::index_file</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sub</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sub</span><span class="plain"> >= 0) {</span>
|
||
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">, </span><span class="string">"%d_%S"</span><span class="plain">, </span><span class="identifier">sub</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_details_path</span><span class="plain">(), </span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">full_leafname</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
|
||
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Task::index_path</span><span class="plain">(), </span><span class="identifier">leafname</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::index_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>That's it for the project folder, but other project-related stuff is in
|
||
|
the materials folder, which we turn to next.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">Inform is occasionally run in a mode where it performs a release on an
|
||
|
existing story file (for example a 1980s Infocom one) rather than on one
|
||
|
that it has newly generated. This is the filename such a story file would
|
||
|
have by default, if so.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">By default the story file will be called something like <code class="display"><span class="extract">story.z8</span></code>, but
|
||
|
its leafname is actually declared from the source text of the Inform
|
||
|
project created to do this wrapping-up. So we need a way to set as well
|
||
|
as read this filename. Whatever the leafname, though, it lives in the top
|
||
|
level of materuals.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Task::wraps_existing_storyfile</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">)?</span><span class="identifier">TRUE</span><span class="plain">:</span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">"story.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_unblorbed_extension</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">()));</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">leaf</span><span class="plain">);</span>
|
||
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
||
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||
|
<span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::existing_storyfile_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>existing_storyfile</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::wraps_existing_storyfile is used in 5/ipw (<a href="5-ipw.html#SP2">§2</a>), 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function Task::set_existing_storyfile appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::existing_storyfile_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b>Materials is also where cover art lives: it could have either the file
|
||
|
extension <code class="display"><span class="extract">.jpg</span></code> or <code class="display"><span class="extract">.png</span></code>, and we generate both sets of filenames, even
|
||
|
though at most one will actually work. This is also where we generate the EPS
|
||
|
file of the map, if so requested; a bit anomalously, it's the only file in
|
||
|
Materials but outside Release which we write to.
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph">This is also where the originals (not the released copies) of the Figures
|
||
|
and Sounds, if any, live: in their own subfolders.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::large_cover_art_file</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">JPEG</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">JPEG</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.jpg"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.png"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Task::epsmap_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Inform Map.eps"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::figures_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::sounds_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::large_cover_art_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::epsmap_file appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::figures_path appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::sounds_path appears nowhere else.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>On a release run, Inblorb will populate the Release subfolder of Materials;
|
||
|
figures and sounds will be copied into the relevant subfolders. The principle
|
||
|
is that everything in Release can always be thrown away without loss, because
|
||
|
it can all be generated again.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::release_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inform7_task</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"there is no current task"</span><span class="plain">);</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">inform7_task</span><span class="plain">-</span><span class="element">>materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_figures_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_sounds_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Task::released_interpreter_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Task::release_path</span><span class="plain">(), </span><span class="identifier">I</span><span class="string">"interpreter"</span><span class="plain">);</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function Task::release_path appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::released_figures_path appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::released_sounds_path appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function Task::released_interpreter_path appears nowhere else.</p>
|
||
|
|
||
|
<hr class="tocbar">
|
||
|
<ul class="toc"><li><a href="1-pp.html">Back to 'Progress Percentages'</a></li><li><a href="1-htc.html">Continue with 'How To Compile'</a></li></ul><hr class="tocbar">
|
||
|
<!--End of weave-->
|
||
|
</body>
|
||
|
</html>
|
||
|
|