mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 18:14:21 +03:00
818 lines
84 KiB
HTML
818 lines
84 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/wel' 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>Where Everything Lives</b></li></ul><p class="purpose">To configure the many locations used in the host filing system.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP5">§5. Command line settings</a></li><li><a href="#SP6">§6. Establishing the defaults</a></li><li><a href="#SP6_1">§6.1. Internal resources</a></li><li><a href="#SP6_2">§6.2. External resources</a></li><li><a href="#SP6_3">§6.3. Project resources</a></li><li><a href="#SP6_4">§6.4. Materials resources</a></li><li><a href="#SP7">§7. EILTs</a></li><li><a href="#SP8">§8. Location of extensions</a></li><li><a href="#SP10">§10. Location of index files</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>This section of the Inform source is intended to give a single description
|
|
of where everything lives in the filing system. Very early in Inform's run,
|
|
it works out the filenames of everything it will ever need to refer to, and
|
|
these are stored in the following globals. Explanations are given below,
|
|
not here. First, some "areas":
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_FS_AREAS</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MATERIALS_FS_AREA</span><span class="plain"> 0 </span> <span class="comment">must match <code class="display"><span class="extract">ORIGIN_WAS_*</span></code> constants minus 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">EXTERNAL_FS_AREA</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">INTERNAL_FS_AREA</span><span class="plain"> 2</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">AREA_NAME</span><span class="plain">[3] = { </span><span class="string">"from .materials"</span><span class="plain">, </span><span class="string">"installed"</span><span class="plain">, </span><span class="string">"built in"</span><span class="plain"> };</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Now for the folders:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_extensions</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_i6t_files</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_inter_resources</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_languages</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_website_templates</span><span class="plain">[</span><span class="constant">NO_FS_AREAS</span><span class="plain">] = { </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain"> };</span>
|
|
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_extension_docs</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_extension_docs_inner</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_HTML_models</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_materials_figures</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_materials_release</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_materials_sounds</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_project</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_project_index_details_folder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_project_index_folder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_released_figures</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_released_interpreter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_released_sounds</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_transient_census_data</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_transient_external_resources</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>And secondly, the files:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_blurb</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_cblorb_report</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_cblorb_report_model</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_compiled_i6_code</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_debugging_log</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_default_inter_pipeline</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_documentation_snippets</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_epsfile</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_existing_story_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_extensions_dictionary</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_headings</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_i7_source</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_ifiction_record</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_intro_booklet</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_intro_postcard</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_large_cover_art_jpeg</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_large_cover_art_png</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_large_default_cover_art</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_manifest</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_options</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_parse_tree</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_report</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_small_cover_art_jpeg</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_small_cover_art_png</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_small_default_cover_art</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_SR_module</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_story_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_telemetry</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">filename_of_uuid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Command line settings. </b>The following are called when the command line is parsed.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::set_project</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_project</span><span class="plain"> = </span><span class="identifier">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">loc</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::set_internal</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">] = </span><span class="identifier">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">loc</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::set_default_internal</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="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">] = </span><span class="identifier">P</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::set_external</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">] = </span><span class="identifier">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">loc</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::set_transient</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_transient_external_resources</span><span class="plain"> = </span><span class="identifier">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">loc</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Locations::set_I7_source</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">filename_of_i7_source</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="identifier">filename_of_i7_source</span><span class="plain"> = </span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">loc</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="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Locations::set_SR_module</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">loc</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">filename_of_SR_module</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="identifier">filename_of_SR_module</span><span class="plain"> = </span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">loc</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="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Locations::set_project is used in 1/mr (<a href="1-mr.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_internal is used in 1/mr (<a href="1-mr.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_default_internal is used in 1/mr (<a href="1-mr.html#SP4_4">§4.4</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_external is used in 1/mr (<a href="1-mr.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_transient is used in 1/mr (<a href="1-mr.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_I7_source is used in 1/mr (<a href="1-mr.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Locations::set_SR_module appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Establishing the defaults. </b>Inform's file access happens inside four different areas: the internal
|
|
resources area, usually inside the Inform application; the external resources
|
|
area, which is where the user (or the application acting on the user's behalf)
|
|
installs extensions; the project bundle, say <code class="display"><span class="extract">Example.inform</span></code>; and, alongside
|
|
that, the materials folder, <code class="display"><span class="extract">Example.materials</span></code>.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Inform can run in two modes: regular mode, when it's compiling source text,
|
|
and census mode, when it's scanning the file system for extensions.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Locations::set_defaults</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">census_mode</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Internal resources</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">External resources</span> <span class="cwebmacronumber">6.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Project resources</span> <span class="cwebmacronumber">6.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Materials resources</span> <span class="cwebmacronumber">6.4</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">census_mode</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">filename_of_i7_source</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
|
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"Except in census mode, source text must be supplied"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">census_mode</span><span class="plain">) && (</span><span class="identifier">filename_of_i7_source</span><span class="plain">))</span>
|
|
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"In census mode, no source text may be supplied"</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="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Locations::set_defaults is used in 1/mr (<a href="1-mr.html#SP4_5">§4.5</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. Internal resources. </b>Inform needs a whole pile of files to have been installed on the host computer
|
|
before it can run: everything from the Standard Rules to a PDF file explaining
|
|
what interactive fiction is. They're never written to, only read. They are
|
|
referred to as "internal" or "built-in", and they occupy a folder called the
|
|
"internal resources" folder.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Unfortunately we don't know where it is. Typically this compiler will be an
|
|
executable sitting somewhere inside a user interface application, and the
|
|
internal resources folder will be somewhere else inside it. But we don't
|
|
know how to find that folder, and we don't want to make any assumptions.
|
|
Inform therefore requires on every run that it be told via the <code class="display"><span class="extract">-internal</span></code>
|
|
switch where the internal resources folder is.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The main ingredients here are the "EILT" resources: extensions, I6T files,
|
|
language definitions, and website templates. The Standard Rules, for
|
|
example, live inside the Extensions part of this.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Internal resources</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"Did not set -internal when calling"</span><span class="plain">);</span>
|
|
|
|
<span class="functiontext">Locations::EILT_at</span><span class="plain">(</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">]);</span>
|
|
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">inter_resources</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Inter"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_default_inter_pipeline</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">inter_resources</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"default.interpipeline"</span><span class="plain">);</span>
|
|
|
|
<<span class="cwebmacro">Miscellaneous other stuff</span> <span class="cwebmacronumber">6.1.1</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1_1"></a><b>§6.1.1. </b>Most of these files are to help Inblorb to perform a release. The
|
|
documentation models are used when making extension documentation; the
|
|
leafname is platform-dependent so that Windows can use different models
|
|
from everybody else.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The documentation snippets file is generated by <code class="display"><span class="extract">indoc</span></code> and contains
|
|
brief specifications of phrases, extracted from the manual "Writing with
|
|
Inform". This is used to generate the Phrasebook index.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Miscellaneous other stuff</span> <span class="cwebmacronumber">6.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">misc</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Miscellany"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_large_default_cover_art</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">misc</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.jpg"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_small_default_cover_art</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">misc</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Small Cover.jpg"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_intro_postcard</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">misc</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Postcard.pdf"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_intro_booklet</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">misc</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"IntroductionToIF.pdf"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">pathname_of_HTML_models</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">INTERNAL_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"HTML"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_cblorb_report_model</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_HTML_models</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"CblorbModel.html"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_documentation_snippets</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">misc</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"definitions.html"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_1">§6.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2"></a><b>§6.2. External resources. </b>This is where the user can install downloaded extensions, new interpreters,
|
|
website templates and so on; so-called "permanent" external resources, since
|
|
the user expects them to stay put once installed. But there is also a
|
|
"transient" external resources area, for more ephemeral content, such as
|
|
the mechanically generated extension documentation. On most platforms the
|
|
permanent and transient external areas will be the same, but some mobile
|
|
operating systems are aggressive about wanting to delete ephemeral files
|
|
used by applications.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">The locations of the permanent and transient external folders can be set
|
|
using <code class="display"><span class="extract">-external</span></code> and <code class="display"><span class="extract">-transient</span></code> respectively. If no <code class="display"><span class="extract">-external</span></code> is
|
|
specified, the location depends on the platform settings: for example on
|
|
Mac OS X it will typically be
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain">/Library/Users/hclinton/Library/Inform</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph">If <code class="display"><span class="extract">-transient</span></code> is not specified, it's the same folder, i.e., Inform does
|
|
not distinguish between permanent and transient external resources.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">External resources</span> <span class="cwebmacronumber">6.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">] = </span><span class="identifier">home_path</span><span class="plain">;</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">subfolder_within</span><span class="plain"> = </span><span class="identifier">INFORM_FOLDER_RELATIVE_TO_HOME</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">subfolder_within</span><span class="plain">[0]) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">SF</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">SF</span><span class="plain">, </span><span class="string">"%s"</span><span class="plain">, </span><span class="identifier">subfolder_within</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">home_path</span><span class="plain">, </span><span class="identifier">SF</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">SF</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">] =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Inform"</span><span class="plain">);</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">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</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="cwebmacro">Permanent external resources</span> <span class="cwebmacronumber">6.2.1</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_transient_external_resources</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="identifier">pathname_of_transient_external_resources</span><span class="plain"> =</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</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">pathname_of_transient_external_resources</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="cwebmacro">Transient external resources</span> <span class="cwebmacronumber">6.2.2</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2_1"></a><b>§6.2.1. </b>The permanent resources are read-only as far as we are concerned. (The
|
|
user interface application, and the user directly, write to this area when
|
|
they (say) install new extensions. But the compiler only reads.)
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Once again we have a set of EILT resources, but we also have a curiosity:
|
|
a useful little file to add source text to everything Inform compiles,
|
|
generally to set use options.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Permanent external resources</span> <span class="cwebmacronumber">6.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Locations::EILT_at</span><span class="plain">(</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">]);</span>
|
|
<span class="identifier">filename_of_options</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">EXTERNAL_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Options.txt"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_2">§6.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2_2"></a><b>§6.2.2. </b>The transient resources are all written by us.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Transient external resources</span> <span class="cwebmacronumber">6.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Transient documentation</span> <span class="cwebmacronumber">6.2.2.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Transient telemetry</span> <span class="cwebmacronumber">6.2.2.2</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_2">§6.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2_2_1"></a><b>§6.2.2.1. </b>The documentation folder is in effect a little website of its own, generated
|
|
automatically by Inform. There'll be some files at the top level, and then
|
|
there are files on each extension, in suitable subfolders. The census data
|
|
subfolder is not browsable or linked to, but holds working files needed when
|
|
assembling all this.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Transient documentation</span> <span class="cwebmacronumber">6.2.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname_of_extension_docs</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_transient_external_resources</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Documentation"</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">pathname_of_extension_docs</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">pathname_of_transient_census_data</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_extension_docs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Census"</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">pathname_of_transient_census_data</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">filename_of_extensions_dictionary</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_transient_census_data</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Dictionary.txt"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">pathname_of_extension_docs_inner</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_extension_docs</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions"</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">pathname_of_extension_docs_inner</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_2_2">§6.2.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2_2_2"></a><b>§6.2.2.2. </b>Telemetry is not as sinister as it sounds: the app isn't sending data out
|
|
on the Internet, only (if requested) logging what it's doing to a local file.
|
|
This was provided for classroom use, so that teachers can see what their
|
|
students have been getting stuck on.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Transient telemetry</span> <span class="cwebmacronumber">6.2.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">pathname_of_telemetry_data</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_transient_external_resources</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Telemetry"</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">pathname_of_telemetry_data</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">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leafname_of_telemetry</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">this_month</span><span class="plain"> = </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain"> + 1;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">this_day</span><span class="plain"> = </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">this_year</span><span class="plain"> = </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain"> + 1900;</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leafname_of_telemetry</span><span class="plain">,</span>
|
|
<span class="string">"Telemetry %04d-%02d-%02d.txt"</span><span class="plain">, </span><span class="identifier">this_year</span><span class="plain">, </span><span class="identifier">this_month</span><span class="plain">, </span><span class="identifier">this_day</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_telemetry</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_telemetry_data</span><span class="plain">, </span><span class="identifier">leafname_of_telemetry</span><span class="plain">);</span>
|
|
<span class="identifier">Telemetry::locate_telemetry_file</span><span class="plain">(</span><span class="identifier">filename_of_telemetry</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leafname_of_telemetry</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_2_2">§6.2.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3"></a><b>§6.3. Project resources. </b>Although on some platforms it may look like a single file, an Inform project
|
|
is a folder whose name has the dot-extension <code class="display"><span class="extract">.inform</span></code>. We'll call this the
|
|
"project folder", and it contains a whole bundle of useful files.
|
|
</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>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Project resources</span> <span class="cwebmacronumber">6.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">The Source folder within the project</span> <span class="cwebmacronumber">6.3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">The Build folder within the project</span> <span class="cwebmacronumber">6.3.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">The Index folder within the project</span> <span class="cwebmacronumber">6.3.3</span>><span class="plain">;</span>
|
|
|
|
<span class="identifier">filename_of_uuid</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"uuid.txt"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_ifiction_record</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Metadata.iFiction"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_manifest</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"manifest.plist"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_blurb</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release.blurb"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_1"></a><b>§6.3.1. </b>This contains just the main source text for the project. Anachronistically,
|
|
this has the filename extension <code class="display"><span class="extract">.ni</span></code> for "natural Inform", which was the
|
|
working title for Inform 7 back in the early 2000s.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">The Source folder within the project</span> <span class="cwebmacronumber">6.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">filename_of_i7_source</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_project</span><span class="plain">)</span>
|
|
<span class="identifier">filename_of_i7_source</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Source"</span><span class="plain">),</span>
|
|
<span class="identifier">I</span><span class="string">"story.ni"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_2"></a><b>§6.3.2. </b>The build folder for a project contains all of the working files created
|
|
during the compilation process. The opening part here may be a surprise:
|
|
In extension census mode, Inform is running not to compile something but to
|
|
extract details of all the extensions installed. But it still needs somewhere
|
|
to write its temporary and debugging files, and there is no project bundle
|
|
to write into. To get round this, we use the census data area as if it
|
|
were indeed a project bundle.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Briefly: we aim to compile the source text to an Inform 6 program; we issue
|
|
an HTML report on our success or failure, listing problem messages if they
|
|
occurred; we track our progress in the debugging log. We don't produce the
|
|
story file ourselves, I6 will do that, but we do need to know what it's
|
|
called; and similarly for the report which the releasing tool Inblorb
|
|
will produce if this is a Release run.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">The Build folder within the project</span> <span class="cwebmacronumber">6.3.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">build_folder</span><span class="plain"> = </span><span class="identifier">pathname_of_transient_census_data</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">census_mode</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">build_folder</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Build"</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">build_folder</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="plain">}</span>
|
|
|
|
<span class="identifier">filename_of_report</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Problems.html"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_debugging_log</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Debug log.txt"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_parse_tree</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Parse tree.txt"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_compiled_i6_code</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"auto.inf"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">, </span><span class="string">"output.%S"</span><span class="plain">, </span><span class="identifier">story_filename_extension</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_story_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_cblorb_report</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"StatusCblorb.html"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3_3"></a><b>§6.3.3. </b>We're going to write into the Index folder, so we must ensure it exists.
|
|
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>
|
|
|
|
<p class="inwebparagraph">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>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">The Index folder within the project</span> <span class="cwebmacronumber">6.3.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname_of_project_index_folder</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Index"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_project_index_details_folder</span><span class="plain"> =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_project_index_folder</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">census_mode</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">pathname_of_project_index_folder</span><span class="plain">) == 0) ||</span>
|
|
<span class="plain">(</span><span class="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">pathname_of_project_index_details_folder</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">filename_of_headings</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_project_index_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Headings.xml"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_3">§6.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_4"></a><b>§6.4. Materials resources. </b>The materials folder sits alongside the project folder and has the same name,
|
|
but ending <code class="display"><span class="extract">.materials</span></code> instead of <code class="display"><span class="extract">.inform</span></code>.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">For the third and final time, there are EILT resources.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Materials resources</span> <span class="cwebmacronumber">6.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pathname_of_project</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">Pathnames::directory_name</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">));</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">)-1;</span>
|
|
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain">>0) && (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) != </span><span class="character">'.'</span><span class="plain">)) </span><span class="identifier">i</span><span class="plain">--;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">>0) {</span>
|
|
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">mf</span><span class="plain">, </span><span class="string">".materials"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">] =</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_project</span><span class="plain">-></span><span class="identifier">pathname_of_parent</span><span class="plain">, </span><span class="identifier">mf</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">mf</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">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</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="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">] = </span><span class="identifier">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inform.materials"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="functiontext">Locations::EILT_at</span><span class="plain">(</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">, </span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">]);</span>
|
|
|
|
<<span class="cwebmacro">Figures and sounds</span> <span class="cwebmacronumber">6.4.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">The Release folder</span> <span class="cwebmacronumber">6.4.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Existing story file</span> <span class="cwebmacronumber">6.4.3</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_4_1"></a><b>§6.4.1. </b>This is 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>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Figures and sounds</span> <span class="cwebmacronumber">6.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname_of_materials_figures</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_materials_sounds</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_large_cover_art_jpeg</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Cover.jpg"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_large_cover_art_png</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Cover.png"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_small_cover_art_jpeg</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Small Cover.jpg"</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_small_cover_art_png</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Small Cover.png"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">filename_of_epsfile</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Inform Map.eps"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_4">§6.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_4_2"></a><b>§6.4.2. </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>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">The Release folder</span> <span class="cwebmacronumber">6.4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">pathname_of_materials_release</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</span><span class="plain">], </span><span class="identifier">I</span><span class="string">"Release"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_released_interpreter</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_materials_release</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"interpreter"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_released_figures</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_materials_release</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_released_sounds</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_materials_release</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sounds"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_4">§6.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_4_3"></a><b>§6.4.3. </b>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="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Existing story file</span> <span class="cwebmacronumber">6.4.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<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">story_filename_extension</span><span class="plain">);</span>
|
|
<span class="identifier">filename_of_existing_story_file</span><span class="plain"> =</span>
|
|
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">pathname_of_area</span><span class="plain">[</span><span class="constant">MATERIALS_FS_AREA</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>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_4">§6.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. EILTs. </b>Each of the materials folder, the internal and external areas has a suite
|
|
of subfolders to hold I7 extensions (in an author tree: see below), I6
|
|
template files, language definitions and website templates.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Locations::EILT_at</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
|
<span class="identifier">pathname_of_extensions</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Extensions"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_i6t_files</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"I6T"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_languages</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Languages"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_website_templates</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Templates"</span><span class="plain">);</span>
|
|
<span class="identifier">pathname_of_inter_resources</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">] = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Inter"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Locations::EILT_at is used in <a href="#SP6_1">§6.1</a>, <a href="#SP6_2_1">§6.2.1</a>, <a href="#SP6_4">§6.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Location of extensions. </b>When Inform needs one of the EILT resources, it now has three places to look:
|
|
the internal resources folder, the external one, and the materials folder.
|
|
In fact, it checks them in reverse order, thus allowing the user to override
|
|
default resources.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">To take the E part, within an Extensions folder, the extensions are stored
|
|
within subfolders named for their authors:
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain">Extensions</span>
|
|
<span class="plain"> Emily Short</span>
|
|
<span class="plain"> Locksmith.i7x</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph">This is now very much deprecated, but at one time the filename extension
|
|
<code class="display"><span class="extract">.i7x</span></code> was optional.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Locations::of_extension</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">author</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i7x_flag</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="reserved">if</span><span class="plain"> (</span><span class="identifier">i7x_flag</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">"%S.i7x"</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">);</span>
|
|
<span class="reserved">else</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">"%S"</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">);</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">author</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="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Locations::of_extension is used in 3/rst (<a href="3-rst.html#SP6_1">§6.1</a>), 8/ec (<a href="8-ec.html#SP5_2_2_1">§5.2.2.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Documentation is similarly arranged:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="functiontext">Locations::of_extension_documentation</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">author</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">"%S.html"</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">);</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span>
|
|
<span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">pathname_of_extension_docs_inner</span><span class="plain">, </span><span class="identifier">author</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="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Locations::of_extension_documentation is used in 8/ed2 (<a href="8-ed2.html#SP3">§3</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. Location of index files. </b>Filenames within the <code class="display"><span class="extract">Index</span></code> subfolder. Filenames in <code class="display"><span class="extract">Details</span></code> have the form
|
|
<code class="display"><span class="extract">N_S</span></code> where <code class="display"><span class="extract">N</span></code> is the 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">Locations::in_index</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">pathname_of_project</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">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">leafname</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="identifier">pathname_of_project_index_details_folder</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="identifier">pathname_of_project_index_folder</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 Locations::in_index appears nowhere else.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="1-pp.html">Back to 'Progress Percentages'</a></li><li><i>(This section ends Chapter 1: Configuration and Control.)</i></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|