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
Graham Nelson 1268a0f40e Colonised
2020-04-14 17:56:54 +01:00

254 lines
36 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Links and Auxiliary Files</title>
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-src/Figures/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="index.html"><span class="selectedlink">inblorb</span></a></li>
<li><a href="../indoc/index.html">indoc</a></li>
<li><a href="../inpolicy/index.html">inpolicy</a></li>
<li><a href="../inrtps/index.html">inrtps</a></li>
</ul><h2>Foundation</h2><ul>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Links and Auxiliary Files' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">inblorb</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 doesn't create that,
Inform 7 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<button class="popup" onclick="togglePopup('usagePopup74')">...<span class="popuptext" id="usagePopup74">Usage of <b>Links::create_auxiliary_file</b>:<br>Blurb Parser - <a href="1-bp.html#SP7_2">&#167;7.2</a></span></button></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">-&gt;</span><span class="element">description</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">description</span><span class="plain">);</span>
<span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">aux_subfolder</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></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"><a href="#SP2">Links::get_extension_from_textual_filename</a></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"><a href="#SP3">Links::get_leafname_from_textual_filename</a></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"><a href="4-sm.html#SP13">Str::get_first_char</a></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">-&gt;</span><span class="element">full_filename</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">);</span>
<span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP24">Str::delete_first_character</a></span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="identifier">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">-&gt;</span><span class="element">format</span><span class="plain">)</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put</a></span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="functiontext"><a href="4-chr.html#SP1">Characters::tolower</a></span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></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">-&gt;</span><span class="element">full_filename</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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">-&gt;</span><span class="element">aux_leafname</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></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;\n"</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<button class="popup" onclick="togglePopup('usagePopup75')">...<span class="popuptext" id="usagePopup75">Usage of <b>Links::get_extension_from_textual_filename</b>:<br>none</span></button></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"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">) - </span><span class="constant">1</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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP16">Str::copy_tail</a></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="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<button class="popup" onclick="togglePopup('usagePopup76')">...<span class="popuptext" id="usagePopup76">Usage of <b>Links::get_leafname_from_textual_filename</b>:<br><a href="#SP2">&#167;2</a></span></button></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"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">) - </span><span class="constant">1</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"><a href="4-sm.html#SP13">Str::get_at</a></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"><a href="4-sm.html#SP16">Str::copy_tail</a></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="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<button class="popup" onclick="togglePopup('usagePopup77')">...<span class="popuptext" id="usagePopup77">Usage of <b>Links::expand_AUXILIARY_variable</b>:<br>Placeholders - <a href="3-plc.html#SP7">&#167;7</a></span></button></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"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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"><a href="#SP6">Links::download_link</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">description</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">full_filename</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">aux_leafname</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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"><a href="3-rls.html#SP10">Requests::add_links_to_requested_resources</a></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="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<button class="popup" onclick="togglePopup('usagePopup78')">...<span class="popuptext" id="usagePopup78">Usage of <b>Links::expand_DOWNLOAD_variable</b>:<br>Placeholders - <a href="3-plc.html#SP7">&#167;7</a></span></button></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"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="functiontext"><a href="3-plc.html#SP3">Placeholders::read</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"STORYFILE"</span><span class="plain">));</span>
<span class="functiontext"><a href="#SP6">Links::download_link</a></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"><a href="3-plc.html#SP3">Placeholders::read</a></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="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<button class="popup" onclick="togglePopup('usagePopup79')">...<span class="popuptext" id="usagePopup79">Usage of <b>Links::download_link</b>:<br><a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, Releaser - <a href="3-rls.html#SP10">&#167;10</a></span></button></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"><a href="4-sm.html#SP21">Str::eq_wide_string</a></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=\"%S\"&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"><a href="3-wm.html#SP4">Websites::open_style</a></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"><a href="4-sm.html#SP21">Str::eq_wide_string</a></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"><a href="6-bf.html#SP7">BinaryFiles::size</a></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"><a href="3-wm.html#SP4">Websites::close_style</a></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="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">text_stream</span><span class="plain"> *</span><span class="identifier">units</span><span class="plain"> = </span><span class="identifier">I</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"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> &gt; </span><span class="constant">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"> % </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="identifier">I</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; </span><span class="constant">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"> % </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="identifier">I</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; </span><span class="constant">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"> % </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="identifier">I</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; </span><span class="constant">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"> % </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">size</span><span class="plain"> /= </span><span class="constant">1024</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">units</span><span class="plain"> = </span><span class="identifier">I</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; </span><span class="constant">100</span><span class="identifier">L</span><span class="plain">) &amp;&amp; (</span><span class="identifier">remainder</span><span class="plain"> &gt;= </span><span class="constant">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<button class="popup" onclick="togglePopup('usagePopup80')">...<span class="popuptext" id="usagePopup80">Usage of <b>Links::expand_COVER_variable</b>:<br>Placeholders - <a href="3-plc.html#SP7">&#167;7</a></span></button></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=\"Cover.%s\"&gt;&lt;img src=\"Small Cover.%s\" border=\"1\"&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="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<button class="popup" onclick="togglePopup('usagePopup81')">...<span class="popuptext" id="usagePopup81">Usage of <b>Links::request_copy_of_auxiliaries</b>:<br>Releaser - <a href="3-rls.html#SP5">&#167;5</a></span></button></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"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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;\n"</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">full_filename</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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">-&gt;</span><span class="element">full_filename</span><span class="plain">);</span>
<span class="functiontext"><a href="3-rls.html#SP4">Requests::request_copy</a></span><span class="plain">(</span><span class="identifier">as_text</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">aux_leafname</span><span class="plain">, </span><span class="identifier">aux</span><span class="plain">-&gt;</span><span class="element">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>
<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-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>