1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 10:04:21 +03:00
inform7/docs/inblorb/3-laaf.html
2019-03-17 12:40:57 +00:00

248 lines
33 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>3/sd</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 '3/laaf' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">inblorb 4</a></li><li><a href="index.html#3">Chapter 3: Other Material</a></li><li><b>Links and Auxiliary Files</b></li></ul><p class="purpose">To manage links to auxiliary files, and placeholder variables.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. </a></li><li><a href="#SP2">&#167;2. Registration</a></li><li><a href="#SP4">&#167;4. Linking</a></li><li><a href="#SP6">&#167;6. Links</a></li><li><a href="#SP7">&#167;7. Cover image</a></li><li><a href="#SP8">&#167;8. Releasing</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>Auxiliary files are for items bundled up with the release but which are
deliberately made accessible for the eventual player: things such as maps
or manuals. Inblorb needs to know about these only when releasing a website;
they are also recorded in an iFiction record, but Inblorb does not create
that (<code class="display"><span class="extract">ni</span></code> does).
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">auxiliary_file</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">full_filename</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">aux_leafname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">aux_subfolder</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">description</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain">; </span> <span class="comment">e.g., "jpg", "pdf"</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">auxiliary_file</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure auxiliary_file is accessed in 2/bw and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Registration. </b>The format text is set to a lower-case version of the filename extension,
and the URL to the filename itself; except when there is no extension, so
that the auxiliary resource is a mini-website in a subfolder of the release
website. In that case the format is <code class="display"><span class="extract">link</span></code> and the URL is to the index file
in the subfolder.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::create_auxiliary_file</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">description</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">subfolder</span><span class="plain">) {</span>
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">aux</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">auxiliary_file</span><span class="plain">);</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;description</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">description</span><span class="plain">);</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_subfolder</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">subfolder</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">);</span>
<span class="functiontext">Links::get_extension_from_textual_filename</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">, </span><span class="identifier">fn</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="functiontext">Links::get_leafname_from_textual_filename</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">) == </span><span class="character">'.'</span><span class="plain">) {</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;full_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">);</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">);</span>
<span class="functiontext">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain">)</span>
<span class="functiontext">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="functiontext">Characters::tolower</span><span class="plain">(</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">)));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;full_filename</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_leafname</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</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">ext</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="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Auxiliary file: &lt;%S&gt; = &lt;%S&gt;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">, </span><span class="identifier">description</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::get_extension_from_textual_filename</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">filename</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="functiontext">Str::len</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">) - 1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain">&gt;=0) &amp;&amp; ((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'.'</span><span class="plain">) || (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</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">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain">&gt;=0) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) != </span><span class="character">'.'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) != </span><span class="constant">FOLDER_SEPARATOR</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">&lt;0) || (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="constant">FOLDER_SEPARATOR</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="functiontext">Str::copy_tail</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::create_auxiliary_file is used in 1/bp (<a href="1-bp.html#SP7_2">&#167;7.2</a>).</p>
<p class="endnote">The function Links::get_extension_from_textual_filename appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::get_leafname_from_textual_filename</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">filename</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="functiontext">Str::len</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">) - 1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain">&gt;=0) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) != </span><span class="constant">FOLDER_SEPARATOR</span><span class="plain">)) </span><span class="identifier">i</span><span class="plain">--;</span>
<span class="functiontext">Str::copy_tail</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::get_leafname_from_textual_filename is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Linking. </b>The list of links to auxiliary resources is written using <code class="display"><span class="extract">&lt;li&gt;...&lt;/li&gt;</span></code>
list entry tags, for convenience of CSS styling.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::expand_AUXILIARY_variable</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">aux</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;description</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"--"</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;li&gt;"</span><span class="plain">);</span>
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;description</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;full_filename</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_leafname</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/li&gt;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext">Requests::add_links_to_requested_resources</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::expand_AUXILIARY_variable is used in 3/plc (<a href="3-plc.html#SP7">&#167;7</a>).</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>On some of the pages produced by Inblorb the story file itself looks like
another auxiliary resource, but it's produced thus:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::expand_DOWNLOAD_variable</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">eventual_Blorb_location</span><span class="plain"> =</span>
<span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"STORYFILE"</span><span class="plain">));</span>
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Story File"</span><span class="plain">, </span><span class="identifier">eventual_Blorb_location</span><span class="plain">,</span>
<span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"STORYFILE"</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"Blorb"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::expand_DOWNLOAD_variable is used in 3/plc (<a href="3-plc.html#SP7">&#167;7</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Links. </b>This routine, then, handles either kind of link.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">desc</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">relative_url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">form</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">size_up</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">form</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"link"</span><span class="plain">)) </span><span class="identifier">size_up</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;a href=\</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string">&gt;%S&lt;/a&gt; "</span><span class="plain">, </span><span class="identifier">relative_url</span><span class="plain">, </span><span class="identifier">desc</span><span class="plain">);</span>
<span class="functiontext">Websites::open_style</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"filetype"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(%S"</span><span class="plain">, </span><span class="identifier">form</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size_up</span><span class="plain">) {</span>
<span class="reserved">long</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">size</span><span class="plain"> = -1</span><span class="identifier">L</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">desc</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Story File"</span><span class="plain">)) </span><span class="identifier">size</span><span class="plain"> = (</span><span class="reserved">long</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">blorb_file_size</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">size</span><span class="plain"> = </span><span class="functiontext">BinaryFiles::size</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> != -1</span><span class="identifier">L</span><span class="plain">) </span>&lt;<span class="cwebmacro">Write a description of the rough file size</span> <span class="cwebmacronumber">6.1</span>&gt;
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="functiontext">Websites::close_style</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"filetype"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::download_link is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, 3/rls (<a href="3-rls.html#SP10">&#167;10</a>).</p>
<p class="inwebparagraph"><a id="SP6_1"></a><b>&#167;6.1. </b>We round down to the nearest KB, MB, GB, TB or byte, as appropriate. Although
this will describe a 1-byte auxiliary file as "1 bytes", the contingency seems
remote.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Write a description of the rough file size</span> <span class="cwebmacronumber">6.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">units</span><span class="plain"> = </span><span class="string">"&amp;nbsp;bytes"</span><span class="plain">;</span>
<span class="reserved">long</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">remainder</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> &gt; 1024</span><span class="identifier">L</span><span class="plain">) { </span><span class="identifier">remainder</span><span class="plain"> = </span><span class="identifier">size</span><span class="plain"> % 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="string">"KB"</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> &gt; 1024</span><span class="identifier">L</span><span class="plain">) { </span><span class="identifier">remainder</span><span class="plain"> = </span><span class="identifier">size</span><span class="plain"> % 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="string">"MB"</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> &gt; 1024</span><span class="identifier">L</span><span class="plain">) { </span><span class="identifier">remainder</span><span class="plain"> = </span><span class="identifier">size</span><span class="plain"> % 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="string">"GB"</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> &gt; 1024</span><span class="identifier">L</span><span class="plain">) { </span><span class="identifier">remainder</span><span class="plain"> = </span><span class="identifier">size</span><span class="plain"> % 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= 1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="string">"TB"</span><span class="plain">; }</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">",&amp;nbsp;%d"</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">size</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">size</span><span class="plain"> &lt; 100</span><span class="identifier">L</span><span class="plain">) &amp;&amp; (</span><span class="identifier">remainder</span><span class="plain"> &gt;= 103</span><span class="identifier">L</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".%d"</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">remainder</span><span class="plain">/103</span><span class="identifier">L</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">units</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Cover image. </b>Note that if the large cover image is a PNG, so is the small (thumbnail)
version, and vice versa &mdash; supplying "Cover.jpg" and "Small Cover.png"
will not work.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::expand_COVER_variable</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cover_exists</span><span class="plain">) {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"png"</span><span class="plain">; </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cover_is_in_JPEG_format</span><span class="plain">) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"jpg"</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;a href=\</span><span class="plain">"</span><span class="string">Cover.%s\</span><span class="plain">"</span><span class="string">&gt;&lt;img src=\</span><span class="plain">"</span><span class="string">Small Cover.%s\</span><span class="plain">"</span><span class="string"> border=\</span><span class="plain">"</span><span class="string">1\</span><span class="plain">"</span><span class="string">&gt;&lt;/a&gt;"</span><span class="plain">,</span>
<span class="identifier">format</span><span class="plain">, </span><span class="identifier">format</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::expand_COVER_variable is used in 3/plc (<a href="3-plc.html#SP7">&#167;7</a>).</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Releasing. </b>When we generate a website, we need to copy the auxiliary files into it
(though not mini-websites: the user will have to do that).
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Links::request_copy_of_auxiliaries</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">aux</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;format</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">)</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! COPY &lt;%f&gt; as &lt;%S&gt;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;full_filename</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_leafname</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">as_text</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">as_text</span><span class="plain">, </span><span class="string">"%f"</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;full_filename</span><span class="plain">);</span>
<span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="identifier">as_text</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_leafname</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-</span><span class="element">&gt;aux_subfolder</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">as_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Links::request_copy_of_auxiliaries is used in 3/rls (<a href="3-rls.html#SP5">&#167;5</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="3-sd.html">Back to 'Solution Deviser'</a></li><li><a href="3-plc.html">Continue with 'Placeholders'</a></li></ul><hr class="tocbar">
<!--End of weave: 165 lines from a web of 13919-->
</body>
</html>