<!--Weave of 'What To Compile' generated by Inweb-->
<divclass="breadcrumbs">
<ulclass="crumbs"><li><ahref="../index.html">Home</a></li><li><ahref="../compiler.html">Inform7 Modules</a></li><li><ahref="index.html">core</a></li><li><ahref="index.html#1">Chapter 1: Configuration and Control</a></li><li><b>What To Compile</b></li></ul></div>
<pclass="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>
<pclass="commentary firstcommentary"><aid="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 <spanclass="extract"><spanclass="extract-syntax">Task::carry_out</span></span>. By
this point Inbuild will have set up an <spanclass="extract"><spanclass="extract-syntax">inform_project</span></span> structure to
<pclass="commentary">Something we will never do is attempt to make <spanclass="extract"><spanclass="extract-syntax">inform7</span></span> thread-safe in the
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"cannot re-enter with new task"</span><spanclass="plain-syntax">);</span>
<spanclass="reserved-syntax">void</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::issue_problems_arising</span><buttonclass="popup"onclick="togglePopup('usagePopup1')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup1">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::issue_problems_arising</span></span>:<br/><ahref="1-wtc.html#SP2">§2</a></span></button><spanclass="plain-syntax">(</span><spanclass="identifier-syntax">build_vertex</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">V</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="identifier-syntax">LOG</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"Issue from copy of %X at %08x\n"</span><spanclass="plain-syntax">,</span>
<spanclass="reserved-syntax">void</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::advance_stage_to</span><buttonclass="popup"onclick="togglePopup('usagePopup2')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup2">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::advance_stage_to</span></span>:<br/>How To Compile - <ahref="1-htc.html#SP2">§2</a>, <ahref="1-htc.html#SP2_3">§2.3</a>, <ahref="1-htc.html#SP2_4">§2.4</a>, <ahref="1-htc.html#SP2_5">§2.5</a>, <ahref="1-htc.html#SP2_6">§2.6</a>, <ahref="1-htc.html#SP2_7">§2.7</a>, <ahref="1-htc.html#SP2_8">§2.8</a>, <ahref="1-htc.html#SP2_9">§2.9</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">stage</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">text_stream</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">name</span><spanclass="plain-syntax">, </span><spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">X</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">stage</span><spanclass="plain-syntax"><= </span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax">-></span><spanclass="element-syntax">stage_of_compilation</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"not an advance"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">stage</span><spanclass="plain-syntax">>= </span><spanclass="constant-syntax">20</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"went too far"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::is_during_stage</span><buttonclass="popup"onclick="togglePopup('usagePopup3')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup3">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::is_during_stage</span></span>:<br/>Inferences - <ahref="16-in.html#SP7">§7</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">stage</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="identifier-syntax">inform_project</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Task::project</span><buttonclass="popup"onclick="togglePopup('usagePopup4')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup4">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::project</span></span>:<br/>Natural Languages - <ahref="3-nl.html#SP1">§1</a><br/>Adjective Meanings - <ahref="4-am.html#SP41">§41</a>, <ahref="4-am.html#SP42">§42</a><br/>Instances - <ahref="5-ins.html#SP14">§14</a>, <ahref="5-ins.html#SP25">§25</a>, <ahref="5-ins.html#SP26">§26</a><br/>Index Physical World - <ahref="5-ipw.html#SP3_3_1">§3.3.1</a>, <ahref="5-ipw.html#SP3_3_1_1">§3.3.1.1</a><br/>New Verbs - <ahref="6-nv.html#SP22">§22</a><br/>Test Scripts - <ahref="26-ts.html#SP11">§11</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="identifier-syntax">target_vm</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Task::vm</span><buttonclass="popup"onclick="togglePopup('usagePopup5')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup5">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::vm</span></span>:<br/><ahref="1-wtc.html#SP16">§16</a><br/>Literal Patterns - <ahref="5-lp.html#SP12_2">§12.2</a>, <ahref="5-lp.html#SP18_3">§18.3</a><br/>Relations - <ahref="6-rlt.html#SP14">§14</a><br/>Runtime Support for Kinds - <ahref="13-rsfk.html#SP18_1">§18.1</a>, <ahref="13-rsfk.html#SP20">§20</a>, <ahref="13-rsfk.html#SP26">§26</a><br/>Text Substitutions - <ahref="17-ts.html#SP11_1">§11.1</a><br/>Compile Invocations Inline - <ahref="25-cii.html#SP3_5_8_3">§3.5.8.3</a><br/>Fundamental Constants - <ahref="26-fc.html#SP3">§3</a><br/>Use Options - <ahref="26-uo.html#SP18">§18</a><br/>Routines - <ahref="26-rt.html#SP4">§4</a><br/>Emitting Inter - <ahref="27-em.html#SP2">§2</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::rng_seed</span><buttonclass="popup"onclick="togglePopup('usagePopup7')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup7">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::rng_seed</span></span>:<br/>Make Assertions - <ahref="9-ma.html#SP3_3_41_2_2_1">§3.3.41.2.2.1</a><br/>Runtime Support for Kinds - <ahref="13-rsfk.html#SP24">§24</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="reserved-syntax">void</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::load_types</span><buttonclass="popup"onclick="togglePopup('usagePopup8')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup8">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::load_types</span></span>:<br/>How To Compile - <ahref="1-htc.html#SP2_3">§2.3</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::begin_execution_at_to_begin</span><buttonclass="popup"onclick="togglePopup('usagePopup9')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup9">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::begin_execution_at_to_begin</span></span>:<br/>Phrases - <ahref="22-ph.html#SP13">§13</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<pclass="commentary firstcommentary"><aid="SP9"></a><b>§9. Project-related files and file paths. </b>An Inform compilation can touch dozens of different files, and the rest
<ulclass="items"><li>(a) The project path will be <spanclass="extract"><spanclass="extract-syntax">Wuthering Heights.inform</span></span>. This looks opaque
<pclass="commentary">To begin: what's in the project area? <spanclass="extract"><spanclass="extract-syntax">story.ni</span></span> and <spanclass="extract"><spanclass="extract-syntax">auto.inf</span></span>, neither
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="identifier-syntax">filename</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Task::parse_tree_file</span><buttonclass="popup"onclick="togglePopup('usagePopup10')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup10">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::parse_tree_file</span></span>:<br/>Parse Tree Usage - <ahref="7-ptu.html#SP15">§15</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<pclass="commentary">The main index files (<spanclass="extract"><spanclass="extract-syntax">Phrasebook.html</span></span> and so on) live at the top level,
details on actions live in the subfolder <spanclass="extract"><spanclass="extract-syntax">Details</span></span>: see below.
<spanclass="identifier-syntax">pathname</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Task::index_path</span><buttonclass="popup"onclick="togglePopup('usagePopup11')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup11">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::index_path</span></span>:<br/><ahref="1-wtc.html#SP13">§13</a>, <ahref="1-wtc.html#SP14">§14</a>, <ahref="1-wtc.html#SP15">§15</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="identifier-syntax">pathname</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Task::index_details_path</span><buttonclass="popup"onclick="togglePopup('usagePopup13')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup13">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::index_details_path</span></span>:<br/><ahref="1-wtc.html#SP15">§15</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<pclass="commentary firstcommentary"><aid="SP15"></a><b>§15. </b>And the following routine determines the filename for a page in this
mini-website. Filenames down in the <spanclass="extract"><spanclass="extract-syntax">Details</span></span> area have the form
<spanclass="extract"><spanclass="extract-syntax">N_S</span></span> where <spanclass="extract"><spanclass="extract-syntax">N</span></span> is an integer supplied and <spanclass="extract"><spanclass="extract-syntax">S</span></span> the leafname; for instance,
<spanclass="extract"><spanclass="extract-syntax">21_A.html</span></span> provides details page number 21 about actions, derived from the
<pclass="commentary">By default the story file will be called something like <spanclass="extract"><spanclass="extract-syntax">story.z8</span></span>, but
<spanclass="reserved-syntax">int</span><spanclass="plain-syntax"></span><spanclass="function-syntax">Task::wraps_existing_storyfile</span><buttonclass="popup"onclick="togglePopup('usagePopup14')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup14">Usage of <spanclass="code-font"><spanclass="function-syntax">Task::wraps_existing_storyfile</span></span>:<br/>Index Physical World - <ahref="5-ipw.html#SP2">§2</a><br/>Runtime Support for Kinds - <ahref="13-rsfk.html#SP5">§5</a><br/>Text Literals - <ahref="17-tl.html#SP14_1">§14.1</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">void</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<pclass="commentary firstcommentary"><aid="SP17"></a><b>§17. </b>Materials is also where cover art lives: it could have either the file
extension <spanclass="extract"><spanclass="extract-syntax">.jpg</span></span> or <spanclass="extract"><spanclass="extract-syntax">.png</span></span>, and we generate both sets of filenames, even
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">inform7_task</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"there is no current task"</span><spanclass="plain-syntax">);</span>