mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 01:54:21 +03:00
1674 lines
205 KiB
HTML
1674 lines
205 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Release Instructions</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>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="../core-module/index.html">core</a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Shared Modules</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of 'Release Instructions' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">if</a></li><li><a href="index.html#2">Chapter 2: Bibliographic Data</a></li><li><b>Release Instructions</b></li></ul><p class="purpose">To write the iFiction record for the work of IF compiled, its release instructions and its picture manifest, if any.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</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>Much of this section is best understood by reference to the Treaty of
|
|
Babel, a cross-IF-system standard for bibliographic data and packaging
|
|
agreed between the major IF design systems in 2006. Inform aims to comply
|
|
fully with the Treaty and the code below should be maintained as such.
|
|
</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The following somewhat miscellaneous variables hold the instructions given
|
|
in the source text for how to release the story file — the content of
|
|
any "Release along with..." sentences, in fact.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with a website?</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">website_template_leafname</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"Standard"</span><span class="plain">; </span><span class="comment"> If so, the template name for it</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_interpreter</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with an interpreter?</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="comment"> If so, the template name for it</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_booklet</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with introductory booklet?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_postcard</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with Zarf's IF card?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_cover</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with cover art?</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">cover_filename_sentence</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="comment"> Where this was requested</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_alt_text</span><span class="plain"> = -1; </span><span class="comment"> ALT text in case cover is displayed in HTML</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_solution</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with a solution?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_source</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with the source text?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">release_card</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Release along with the iFiction card?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">solution_public</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> If released, will this be linked on a website?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">source_public</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="comment"> If released, will this be linked on a website?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">card_public</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> If released, will this be linked on a website?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">create_Materials</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="comment"> Create a Materials folder if one doesn't exist already</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>Auxiliary files are not really files to us at all: simply names passed along.
|
|
They are the auxiliary files included in the iFiction record generated
|
|
for a released project, if the source asks to do so: they might for instance
|
|
be maps or booklets which the author intends to accompany the final story
|
|
file. (Because they are treated only as names and are never opened, the
|
|
following structure contains no file handles.)
|
|
</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="identifier">filename</span><span class="plain"> *</span><span class="identifier">name_of_original_file</span><span class="plain">; </span><span class="comment"> e.g., "Collegio.pdf"</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">folder_to_release_to</span><span class="plain">; </span><span class="comment"> e.g., "Sounds"</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">brief_description</span><span class="plain">; </span><span class="comment"> e.g., "Collegio Magazine"</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from_payload</span><span class="plain">;</span>
|
|
<span class="identifier">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 private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>A sentence like this allows for a shopping list of release ingredients:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Release along with a public source text and a website.</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">The object noun phrase is an articled list, and each entry must match this.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">privacy</span><span class="plain">-</span><span class="identifier">indicator</span><span class="plain">> <</span><span class="identifier">exposed</span><span class="plain">-</span><span class="identifier">innards</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]; <<</span><span class="identifier">privacy</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="identifier">privacy</span><span class="plain">-</span><span class="identifier">indicator</span><span class="plain">> ... | ==> </span><<span class="cwebmacro">Issue PM_NoSuchPublicRelease problem</span> <span class="cwebmacronumber">5.1</span>>
|
|
<span class="plain"><</span><span class="identifier">exposed</span><span class="plain">-</span><span class="identifier">innards</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">privacy</span><span class="plain">>> = </span><span class="identifier">NOT_APPLICABLE</span>
|
|
<span class="identifier">cover</span><span class="plain"> </span><span class="identifier">art</span><span class="plain"> ( <</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">> ) | ==> </span><span class="constant">COVER_ART_PAYLOAD</span><span class="plain">; <<</span><span class="identifier">alttext</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1];</span>
|
|
<span class="identifier">cover</span><span class="plain"> </span><span class="identifier">art</span><span class="plain"> | ==> </span><span class="constant">COVER_ART_PAYLOAD</span><span class="plain">; <<</span><span class="identifier">alttext</span><span class="plain">>> = -1;</span>
|
|
<span class="identifier">existing</span><span class="plain"> </span><span class="identifier">story</span><span class="plain"> </span><span class="identifier">file</span><span class="plain"> | ==> </span><span class="constant">EXISTING_STORY_FILE_PAYLOAD</span>
|
|
<span class="identifier">existing</span><span class="plain"> </span><span class="identifier">story</span><span class="plain"> </span><span class="identifier">file</span><span class="plain"> </span><span class="identifier">called</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">NAMED_EXISTING_STORY_FILE_PAYLOAD</span>
|
|
<span class="identifier">file</span><span class="plain"> </span><span class="identifier">of</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">called</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">AUXILIARY_FILE_PAYLOAD</span>
|
|
<span class="identifier">file</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">in</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">HIDDEN_FILE_IN_PAYLOAD</span>
|
|
<span class="identifier">file</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">HIDDEN_FILE_PAYLOAD</span>
|
|
<span class="identifier">style</span><span class="plain"> </span><span class="identifier">sheet</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">CSS_PAYLOAD</span>
|
|
<span class="identifier">javascript</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} | ==> </span><span class="constant">JAVASCRIPT_PAYLOAD</span>
|
|
<span class="identifier">introductory</span><span class="plain"> </span><span class="identifier">booklet</span><span class="plain"> | ==> </span><span class="constant">BOOKLET_PAYLOAD</span>
|
|
<span class="identifier">introductory</span><span class="plain"> </span><span class="identifier">postcard</span><span class="plain"> | ==> </span><span class="constant">POSTCARD_PAYLOAD</span>
|
|
<span class="identifier">website</span><span class="plain"> | ==> </span><span class="constant">WEBSITE_PAYLOAD</span>
|
|
<span class="identifier">separate</span><span class="plain"> </span><span class="identifier">figures</span><span class="plain"> | ==> </span><span class="constant">SEPARATE_FIGURES_PAYLOAD</span>
|
|
<span class="identifier">separate</span><span class="plain"> </span><span class="identifier">sounds</span><span class="plain"> | ==> </span><span class="constant">SEPARATE_SOUNDS_PAYLOAD</span>
|
|
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">website</span><span class="plain"> | ==> </span><span class="constant">THEMED_WEBSITE_PAYLOAD</span>
|
|
<span class="identifier">interpreter</span><span class="plain"> | ==> </span><span class="constant">INTERPRETER_PAYLOAD</span>
|
|
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">interpreter</span><span class="plain"> ==> </span><span class="constant">THEMED_INTERPRETER_PAYLOAD</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_NoSuchPublicRelease problem</span> <span class="cwebmacronumber">5.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">BOOKLET_PAYLOAD</span><span class="plain">; </span><span class="comment"> to recover harmlessly</span>
|
|
<span class="identifier">Problems::quote_wording_as_source</span><span class="plain">(1, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_NoSuchPublicRelease</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"I don't know how to release along with %1: the only features of "</span>
|
|
<span class="string">"a release which can be marked as public or private are the 'source "</span>
|
|
<span class="string">"text', 'solution' and 'library card'."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>Three of the secret ingredients of a project which can be released, and can
|
|
optionally be marked "public" (they appear on any website about it) or
|
|
"private" (they don't).
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">privacy</span><span class="plain">-</span><span class="identifier">indicator</span><span class="plain">> ::=</span>
|
|
<span class="identifier">private</span><span class="plain"> |</span>
|
|
<span class="identifier">public</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">exposed</span><span class="plain">-</span><span class="identifier">innards</span><span class="plain">> ::=</span>
|
|
<span class="identifier">solution</span><span class="plain"> |</span>
|
|
<span class="identifier">source</span><span class="plain"> </span><span class="identifier">text</span><span class="plain"> |</span>
|
|
<span class="identifier">library</span><span class="plain"> </span><span class="identifier">card</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>And here is the handling code which uses the grammar above:
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::release_along_with_SMF<button class="popup" onclick="togglePopup('usagePopup16')">...<span class="popuptext" id="usagePopup16">Usage of <b>PL::Bibliographic::Release::release_along_with_SMF</b>:<br><a href="#SP8">§8</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">task</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">NPs</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = (</span><span class="identifier">NPs</span><span class="plain">)?(</span><span class="identifier">NPs</span><span class="plain">[1]):</span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">task</span><span class="plain">) { </span><span class="comment"> "Use American dialect."</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ACCEPT_SMFT:</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">verb_id_ANNOT</span><span class="plain">, </span><span class="identifier">SPECIAL_MEANING_VB</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">articled</span><span class="plain">-</span><span class="identifier">list</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="identifier">V</span><span class="plain">-></span><span class="element">next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TRAVERSE1_SMFT:</span>
|
|
<span class="functiontext"><a href="#SP8">PL::Bibliographic::Release::handle_release_declaration_inner</a></span><span class="plain">(</span><span class="identifier">V</span><span class="plain">-></span><span class="element">next</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::visit_to_quote<button class="popup" onclick="togglePopup('usagePopup17')">...<span class="popuptext" id="usagePopup17">Usage of <b>PL::Bibliographic::Release::visit_to_quote</b>:<br><a href="#SP14_2_10">§14.2.10</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">parse_node</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">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">SENTENCE_NT</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">)) {</span>
|
|
<span class="identifier">verb_meaning</span><span class="plain"> *</span><span class="identifier">vm</span><span class="plain"> = </span><span class="identifier">ParseTree::get_verb_meaning</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rev</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">special_meaning_fn</span><span class="plain"> </span><span class="identifier">soa</span><span class="plain"> = </span><span class="identifier">VerbMeanings::get_special_meaning</span><span class="plain">(</span><span class="identifier">vm</span><span class="plain">, &</span><span class="identifier">rev</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">soa</span><span class="plain"> == </span><span class="functiontext"><a href="#SP7">PL::Bibliographic::Release::release_along_with_SMF</a></span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">Index::link_to</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)), </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status instruction ||"</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::handle_release_declaration<button class="popup" onclick="togglePopup('usagePopup18')">...<span class="popuptext" id="usagePopup18">Usage of <b>PL::Bibliographic::Release::handle_release_declaration</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="functiontext"><a href="#SP8">PL::Bibliographic::Release::handle_release_declaration_inner</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">-></span><span class="element">next</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::handle_release_declaration_inner<button class="popup" onclick="togglePopup('usagePopup19')">...<span class="popuptext" id="usagePopup19">Usage of <b>PL::Bibliographic::Release::handle_release_declaration_inner</b>:<br><a href="#SP7">§7</a></span></button></span><span class="plain">(</span><span class="identifier">parse_node</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">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">AND_NT</span><span class="plain">) {</span>
|
|
<span class="functiontext"><a href="#SP8">PL::Bibliographic::Release::handle_release_declaration_inner</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP8">PL::Bibliographic::Release::handle_release_declaration_inner</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">-></span><span class="element">next</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">current_sentence</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">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)))</span>
|
|
<<span class="cwebmacro">Respond to an individual release instruction</span> <span class="cwebmacronumber">8.1</span>>
|
|
<span class="reserved">else</span>
|
|
<<span class="cwebmacro">Issue a bad release instruction problem message</span> <span class="cwebmacronumber">8.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b>The items to release are called "payloads".
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">SOLUTION_PAYLOAD</span><span class="plain"> </span><span class="constant">0</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SOURCE_TEXT_PAYLOAD</span><span class="plain"> </span><span class="constant">1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LIBRARY_CARD_PAYLOAD</span><span class="plain"> </span><span class="constant">2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">COVER_ART_PAYLOAD</span><span class="plain"> </span><span class="constant">3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">EXISTING_STORY_FILE_PAYLOAD</span><span class="plain"> </span><span class="constant">4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">AUXILIARY_FILE_PAYLOAD</span><span class="plain"> </span><span class="constant">5</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">BOOKLET_PAYLOAD</span><span class="plain"> </span><span class="constant">6</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">POSTCARD_PAYLOAD</span><span class="plain"> </span><span class="constant">7</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">WEBSITE_PAYLOAD</span><span class="plain"> </span><span class="constant">8</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">THEMED_WEBSITE_PAYLOAD</span><span class="plain"> </span><span class="constant">9</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">INTERPRETER_PAYLOAD</span><span class="plain"> </span><span class="constant">10</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">THEMED_INTERPRETER_PAYLOAD</span><span class="plain"> </span><span class="constant">11</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">HIDDEN_FILE_PAYLOAD</span><span class="plain"> </span><span class="constant">12</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">HIDDEN_FILE_IN_PAYLOAD</span><span class="plain"> </span><span class="constant">13</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SEPARATE_FIGURES_PAYLOAD</span><span class="plain"> </span><span class="constant">14</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SEPARATE_SOUNDS_PAYLOAD</span><span class="plain"> </span><span class="constant">15</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CSS_PAYLOAD</span><span class="plain"> </span><span class="constant">16</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">JAVASCRIPT_PAYLOAD</span><span class="plain"> </span><span class="constant">17</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NAMED_EXISTING_STORY_FILE_PAYLOAD</span><span class="plain"> </span><span class="constant">18</span>
|
|
</pre>
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Respond to an individual release instruction</span> <span class="cwebmacronumber">8.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">payload</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">payload</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SOLUTION_PAYLOAD:</span>
|
|
<span class="identifier">release_solution</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">privacy</span><span class="plain">>> != </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) </span><span class="identifier">solution_public</span><span class="plain"> = <<</span><span class="identifier">privacy</span><span class="plain">>>;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SOURCE_TEXT_PAYLOAD:</span>
|
|
<span class="identifier">release_source</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">privacy</span><span class="plain">>> != </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) </span><span class="identifier">source_public</span><span class="plain"> = <<</span><span class="identifier">privacy</span><span class="plain">>>;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LIBRARY_CARD_PAYLOAD:</span>
|
|
<span class="identifier">release_card</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">privacy</span><span class="plain">>> != </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) </span><span class="identifier">card_public</span><span class="plain"> = <<</span><span class="identifier">privacy</span><span class="plain">>>;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COVER_ART_PAYLOAD:</span>
|
|
<span class="identifier">release_cover</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">cover_alt_text</span><span class="plain"> = <<</span><span class="identifier">alttext</span><span class="plain">>>;</span>
|
|
<span class="identifier">cover_filename_sentence</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXISTING_STORY_FILE_PAYLOAD:</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NAMED_EXISTING_STORY_FILE_PAYLOAD:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TargetVMs::is_16_bit</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span><span class="comment"> not usefully testable</span>
|
|
<span class="string">"existing story files can only be used with the Z-machine"</span><span class="plain">,</span>
|
|
<span class="string">"not with the Glulx setting."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">payload</span><span class="plain"> == </span><span class="constant">NAMED_EXISTING_STORY_FILE_PAYLOAD</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">SW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">SW</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">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">SW</span><span class="plain">));</span>
|
|
<span class="identifier">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">Task::set_existing_storyfile</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">AUXILIARY_FILE_PAYLOAD:</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">DW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">LW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">2</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">DW</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">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP9">PL::Bibliographic::Release::create_aux_file</a></span><span class="plain">(</span><span class="identifier">A</span><span class="plain">,</span>
|
|
<span class="identifier">Task::release_path</span><span class="plain">(),</span>
|
|
<span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">DW</span><span class="plain">)),</span>
|
|
<span class="identifier">payload</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CSS_PAYLOAD:</span><span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">JAVASCRIPT_PAYLOAD:</span><span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">HIDDEN_FILE_PAYLOAD:</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">LW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</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">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP9">PL::Bibliographic::Release::create_aux_file</a></span><span class="plain">(</span><span class="identifier">A</span><span class="plain">,</span>
|
|
<span class="identifier">Task::release_path</span><span class="plain">(),</span>
|
|
<span class="identifier">L</span><span class="string">"--"</span><span class="plain">,</span>
|
|
<span class="identifier">payload</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HIDDEN_FILE_IN_PAYLOAD:</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">LW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">FW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">2</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">FW</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">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">LW</span><span class="plain">));</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Inbuild::materials</span><span class="plain">(), </span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">FW</span><span class="plain">));</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">Task::release_path</span><span class="plain">(), </span><span class="identifier">folder</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">folder</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP9">PL::Bibliographic::Release::create_aux_file</a></span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"--"</span><span class="plain">, </span><span class="identifier">payload</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BOOKLET_PAYLOAD:</span><span class="plain"> </span><span class="identifier">release_booklet</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">POSTCARD_PAYLOAD:</span><span class="plain"> </span><span class="identifier">release_postcard</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WEBSITE_PAYLOAD:</span><span class="plain"> </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">THEMED_WEBSITE_PAYLOAD:</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">TW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
|
<span class="identifier">website_template_leafname</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
|
<span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INTERPRETER_PAYLOAD:</span>
|
|
<span class="identifier">release_interpreter</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">THEMED_INTERPRETER_PAYLOAD:</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">TW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">release</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>, </span><span class="constant">1</span><span class="plain">);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
|
<span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">interpreter_template_leafname</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">TW</span><span class="plain">));</span>
|
|
<span class="identifier">release_interpreter</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">release_website</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SEPARATE_FIGURES_PAYLOAD:</span>
|
|
<span class="identifier">PL::Figures::write_copy_commands</span><span class="plain">();</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SEPARATE_SOUNDS_PAYLOAD:</span>
|
|
<span class="identifier">PL::Sounds::write_copy_commands</span><span class="plain">();</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_2"></a><b>§8.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue a bad release instruction problem message</span> <span class="cwebmacronumber">8.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">p</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ReleaseAlong</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"I don't know how to release along with %1: the only forms I can "</span>
|
|
<span class="string">"accept are - 'Release along with cover art', '...a website', "</span>
|
|
<span class="string">"'the solution', 'the library card', 'the introductory booklet', "</span>
|
|
<span class="string">"'the source text', 'an existing story file' or '...a file of "</span>
|
|
<span class="string">"\"Something Useful\" called \"Something.pdf\"'."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="functiontext">PL::Bibliographic::Release::create_aux_file<button class="popup" onclick="togglePopup('usagePopup20')">...<span class="popuptext" id="usagePopup20">Usage of <b>PL::Bibliographic::Release::create_aux_file</b>:<br><a href="#SP8_1">§8.1</a></span></button></span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">,</span>
|
|
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">fold</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">desc</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">payload</span><span class="plain">) {</span>
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</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">af</span><span class="plain">-></span><span class="element">name_of_original_file</span><span class="plain"> = </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="identifier">af</span><span class="plain">-></span><span class="element">folder_to_release_to</span><span class="plain"> = </span><span class="identifier">fold</span><span class="plain">;</span>
|
|
<span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain">, </span><span class="string">"%w"</span><span class="plain">, </span><span class="identifier">desc</span><span class="plain">);</span>
|
|
<span class="identifier">af</span><span class="plain">-></span><span class="element">from_payload</span><span class="plain"> = </span><span class="identifier">payload</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">af</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>So much for taking down instructions; now we must act on them. In this
|
|
routine we combine writing the iFiction record and the release instructions —
|
|
done together since they have so much in common, being essentially two ways
|
|
of writing the same thing.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">LENGTH_OF_STORY_FILE_HEADER</span><span class="plain"> </span><span class="constant">0x40</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">zbyte</span><span class="plain"> </span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">char</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::write_ifiction_and_blurb<button class="popup" onclick="togglePopup('usagePopup21')">...<span class="popuptext" id="usagePopup21">Usage of <b>PL::Bibliographic::Release::write_ifiction_and_blurb</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Decide whether we need to create a Materials folder</span> <span class="cwebmacronumber">10.1</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_picture_number</span><span class="plain"> = (</span><span class="identifier">release_cover</span><span class="plain">)?1:0;</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">cover_art_format</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">height</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Check cover art image if any</span> <span class="cwebmacronumber">10.2</span>><span class="plain">;</span>
|
|
|
|
<span class="constant">zbyte</span><span class="plain"> </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">LENGTH_OF_STORY_FILE_HEADER</span><span class="plain">]; </span><span class="comment"> a sequence of bytes, not a C string</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) </span><<span class="cwebmacro">Read header of existing story file if present</span> <span class="cwebmacronumber">10.3</span>>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><<span class="cwebmacro">Finally, write out our three metadata files</span> <span class="cwebmacronumber">10.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b>Until March 2010, Materials folders weren't needed for very simple releases;
|
|
but they were needed for absolutely everything else. In the end we simplified
|
|
matters by always releasing to a Materials folder, though the advent of
|
|
application sandboxing in Mac OS X in 2012 may force us to revisit this.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Decide whether we need to create a Materials folder</span> <span class="cwebmacronumber">10.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">create_Materials</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="comment"> thus making the next condition irrelevant</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">release_website</span><span class="plain">) || (</span><span class="identifier">release_interpreter</span><span class="plain">) || (</span><span class="identifier">release_booklet</span><span class="plain">) || (</span><span class="identifier">release_postcard</span><span class="plain">) ||</span>
|
|
<span class="plain">(</span><span class="identifier">release_cover</span><span class="plain">) || (</span><span class="identifier">release_source</span><span class="plain">) || (</span><span class="identifier">release_card</span><span class="plain">) || (</span><span class="identifier">release_solution</span><span class="plain">) ||</span>
|
|
<span class="plain">(</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) || (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="identifier">blorb_figure</span><span class="plain">) > </span><span class="constant">1</span><span class="plain">)) {</span>
|
|
<span class="identifier">create_Materials</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">create_Materials</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Create the Materials folder if not already present</span> <span class="cwebmacronumber">10.1.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Create the Release subfolder if not already present</span> <span class="cwebmacronumber">10.1.2</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_interpreter</span><span class="plain">) </span><<span class="cwebmacro">Create the Interpreter subfolder if not already present</span> <span class="cwebmacronumber">10.1.3</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_1_1"></a><b>§10.1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create the Materials folder if not already present</span> <span class="cwebmacronumber">10.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<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">Inbuild::materials</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"In order to release the story file along with other "</span>
|
|
<span class="string">"resources, I tried to create a folder alongside this "</span>
|
|
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
|
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
|
<span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_1">§10.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_1_2"></a><b>§10.1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create the Release subfolder if not already present</span> <span class="cwebmacronumber">10.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<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">Task::release_path</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"In order to release the story file along with other "</span>
|
|
<span class="string">"resources, I tried to create a folder alongside this "</span>
|
|
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
|
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
|
<span class="identifier">Task::release_path</span><span class="plain">());</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</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="identifier">Pathnames::create_in_file_system</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">-></span><span class="element">folder_to_release_to</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"In order to release the story file along with other "</span>
|
|
<span class="string">"resources, I tried to create a folder alongside this "</span>
|
|
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
|
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
|
<span class="identifier">af</span><span class="plain">-></span><span class="element">folder_to_release_to</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_1">§10.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_1_3"></a><b>§10.1.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create the Interpreter subfolder if not already present</span> <span class="cwebmacronumber">10.1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<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">Task::released_interpreter_path</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem_path</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"In order to release the story file along with an "</span>
|
|
<span class="string">"interpreter, I tried to create a folder alongside this "</span>
|
|
<span class="string">"Inform project, but was unable to do so. The folder "</span>
|
|
<span class="string">"was to have been called"</span><span class="plain">,</span>
|
|
<span class="identifier">Task::released_interpreter_path</span><span class="plain">());</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_1">§10.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2"></a><b>§10.2. </b>Using the utility routines above, we find out the format of the cover
|
|
art and see that its dimensions conform to Treaty of Babel requirements.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Check cover art image if any</span> <span class="cwebmacronumber">10.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">) {</span>
|
|
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">cover_filename_sentence</span><span class="plain">;</span>
|
|
<span class="identifier">cover_art_format</span><span class="plain"> = </span><span class="string">""</span><span class="plain">;</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">COVER_FILE</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">cover_filename</span><span class="plain">, </span><span class="string">"rb"</span><span class="plain"> );</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">COVER_FILE</span><span class="plain">) </span><<span class="cwebmacro">The cover seems to be a JPEG</span> <span class="cwebmacronumber">10.2.1</span>>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">cover_filename</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">COVER_FILE</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">cover_filename</span><span class="plain">, </span><span class="string">"rb"</span><span class="plain"> );</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">COVER_FILE</span><span class="plain">) </span><<span class="cwebmacro">The cover seems to be a PNG</span> <span class="cwebmacronumber">10.2.2</span>>
|
|
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">There seems to be no cover at all</span> <span class="cwebmacronumber">10.2.3</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<<span class="cwebmacro">Check that the pixel height and width are sensible</span> <span class="cwebmacronumber">10.2.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_1"></a><b>§10.2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">The cover seems to be a JPEG</span> <span class="cwebmacronumber">10.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">cover_art_format</span><span class="plain"> = </span><span class="string">"jpg"</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">ImageFiles::get_JPEG_dimensions</span><span class="plain">(</span><span class="identifier">COVER_FILE</span><span class="plain">, &</span><span class="identifier">width</span><span class="plain">, &</span><span class="identifier">height</span><span class="plain">);</span>
|
|
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">COVER_FILE</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"The cover image seems not to be a JPEG despite the name"</span><span class="plain">,</span>
|
|
<span class="identifier">cover_filename</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_2"></a><b>§10.2.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">The cover seems to be a PNG</span> <span class="cwebmacronumber">10.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">cover_art_format</span><span class="plain"> = </span><span class="string">"png"</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">ImageFiles::get_PNG_dimensions</span><span class="plain">(</span><span class="identifier">COVER_FILE</span><span class="plain">, &</span><span class="identifier">width</span><span class="plain">, &</span><span class="identifier">height</span><span class="plain">);</span>
|
|
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">COVER_FILE</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"The cover image seems not to be a PNG despite the name"</span><span class="plain">,</span>
|
|
<span class="identifier">cover_filename</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_3"></a><b>§10.2.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">There seems to be no cover at all</span> <span class="cwebmacronumber">10.2.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::Issue::release_problem_at_sentence</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"The release instructions said that there is a cover image "</span>
|
|
<span class="string">"to attach to the story file, but I was unable to find it, "</span>
|
|
<span class="string">"having looked for both 'Cover.png' and 'Cover.jpg' in the "</span>
|
|
<span class="string">"'.materials' folder for this project"</span><span class="plain">, </span><span class="identifier">cover_filename</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_2_4"></a><b>§10.2.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Check that the pixel height and width are sensible</span> <span class="cwebmacronumber">10.2.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">width</span><span class="plain"> < </span><span class="constant">120</span><span class="plain">) || (</span><span class="identifier">width</span><span class="plain"> > </span><span class="constant">1200</span><span class="plain">) || (</span><span class="identifier">height</span><span class="plain"> < </span><span class="constant">120</span><span class="plain">) || (</span><span class="identifier">height</span><span class="plain"> > </span><span class="constant">1200</span><span class="plain">)) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"The height and width of the cover image, in pixels, must be "</span>
|
|
<span class="string">"between 120 and 1024 inclusive"</span><span class="plain">,</span>
|
|
<span class="identifier">cover_filename</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">width</span><span class="plain"> > </span><span class="constant">2</span><span class="plain">*</span><span class="identifier">height</span><span class="plain">) || (</span><span class="identifier">height</span><span class="plain"> > </span><span class="constant">2</span><span class="plain">*</span><span class="identifier">width</span><span class="plain">)) {</span>
|
|
<span class="identifier">Problems::Issue::release_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">),</span>
|
|
<span class="string">"We recommend a square cover image, but at any rate it is "</span>
|
|
<span class="string">"required to be no more rectangular than twice as wide as it "</span>
|
|
<span class="string">"is high (or vice versa)"</span><span class="plain">,</span>
|
|
<span class="identifier">cover_filename</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_3"></a><b>§10.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Read header of existing story file if present</span> <span class="cwebmacronumber">10.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inbuild::currently_releasing</span><span class="plain">() == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Issue a problem if this isn't a Release run</span> <span class="cwebmacronumber">10.3.1</span>><span class="character">;</span>
|
|
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">STORYF</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">(), </span><span class="string">"rb"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STORYF</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::unlocated_problem_on_file</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(),</span>
|
|
<span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">), </span><span class="comment"> i.e., not testable by intest</span>
|
|
<span class="string">"The instruction 'Release along with an existing story file' "</span>
|
|
<span class="string">"means that I need to bind up a story file called '%1', in "</span>
|
|
<span class="string">"the .materials folder for this project. But it doesn't seem "</span>
|
|
<span class="string">"to be there."</span><span class="plain">, </span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">());</span>
|
|
<span class="reserved">return</span><span class="plain">;</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="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="constant">LENGTH_OF_STORY_FILE_HEADER</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">fgetc</span><span class="plain">(</span><span class="identifier">STORYF</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="identifier">EOF</span><span class="plain">) </span><span class="identifier">header</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">header</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = (</span><span class="constant">zbyte</span><span class="plain">) </span><span class="identifier">c</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">STORYF</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_3_1"></a><b>§10.3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue a problem if this isn't a Release run</span> <span class="cwebmacronumber">10.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::Issue::unlocated_problem</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnreleasedRelease</span><span class="plain">),</span>
|
|
<span class="string">"This is supposed to be a source text which only contains "</span>
|
|
<span class="string">"release instructions to bind up an existing story file "</span>
|
|
<span class="string">"(for instance, one produced using Inform 6). That's because "</span>
|
|
<span class="string">"the instruction 'Release along with an existing story file' "</span>
|
|
<span class="string">"is present. So the only way to build the project is to use "</span>
|
|
<span class="string">"the Release option - not, for instance, Go or Replay, because "</span>
|
|
<span class="string">"it would make no sense to translate the source text into "</span>
|
|
<span class="string">"something to play. (Of course, you can play the released "</span>
|
|
<span class="string">"story file using an interpreter such as Zoom or Windows "</span>
|
|
<span class="string">"Frotz, etc.: just not here, within Inform.)"</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_3">§10.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_4"></a><b>§10.4. </b>That's it for the preliminaries: time to do some actual work.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Finally, write out our three metadata files</span> <span class="cwebmacronumber">10.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Write iFiction record</span> <span class="cwebmacronumber">10.4.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write release blurb</span> <span class="cwebmacronumber">10.4.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write manifest file</span> <span class="cwebmacronumber">10.4.3</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_4_1"></a><b>§10.4.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write iFiction record</span> <span class="cwebmacronumber">10.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</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">Task::ifiction_record_file</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open metadata file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
|
<span class="identifier">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
|
|
<span class="identifier">COMPILATION_MODE_ENTER</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP11">PL::Bibliographic::Release::write_ifiction_record</a></span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
|
|
<span class="identifier">END_COMPILATION_MODE</span><span class="plain">;</span>
|
|
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_4">§10.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_4_2"></a><b>§10.4.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write release blurb</span> <span class="cwebmacronumber">10.4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::blurb_file</span><span class="plain">();</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open blurb file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP14">PL::Bibliographic::Release::write_release_blurb</a></span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_4">§10.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10_4_3"></a><b>§10.4.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write manifest file</span> <span class="cwebmacronumber">10.4.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Task::manifest_file</span><span class="plain">();</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">xf_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = &</span><span class="identifier">xf_struct</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">UTF8_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open manifest file"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
|
<span class="identifier">PL::Figures::write_picture_manifest</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">, </span><span class="identifier">release_cover</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP10_4">§10.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>For the format of this file, see the Treaty of Babel.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::write_ifiction_record<button class="popup" onclick="togglePopup('usagePopup22')">...<span class="popuptext" id="usagePopup22">Usage of <b>PL::Bibliographic::Release::write_ifiction_record</b>:<br><a href="#SP10_4_1">§10.4.1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="constant">zbyte</span><span class="plain"> *</span><span class="identifier">header</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">cover_art_format</span><span class="plain">,</span>
|
|
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">, </span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ifindex version=\"1.0\" "</span>
|
|
<span class="string">"xmlns=\"http://babel.ifarchive.org/protocol/iFiction/\">\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<story>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write the body of the iFiction record</span> <span class="cwebmacronumber">11.1</span>><span class="plain">;</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</story>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</ifindex>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1"></a><b>§11.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the body of the iFiction record</span> <span class="cwebmacronumber">11.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">story_format</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_iFiction_format</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
|
|
|
<<span class="cwebmacro">Write the identification tag of the iFiction record</span> <span class="cwebmacronumber">11.1.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write the bibliographic tag of the iFiction record</span> <span class="cwebmacronumber">11.1.2</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">auxiliary_file</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Write the resources tag of the iFiction record</span> <span class="cwebmacronumber">11.1.3</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Write the cover tag of the iFiction record</span> <span class="cwebmacronumber">11.1.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write the releases tag of the iFiction record</span> <span class="cwebmacronumber">11.1.5</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write the colophon tag of the iFiction record</span> <span class="cwebmacronumber">11.1.6</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<%S>\n"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write the format-specific tag of the iFiction record</span> <span class="cwebmacronumber">11.1.7</span>><span class="plain">;</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</%S>\n"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11">§11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_1"></a><b>§11.1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the identification tag of the iFiction record</span> <span class="cwebmacronumber">11.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<identification>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ifid>%S</ifid>\n"</span><span class="plain">, </span><span class="functiontext"><a href="2-ifi.html#SP2">PL::Bibliographic::IFID::read_uuid</a></span><span class="plain">());</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ifid>ZCODE-%d-%c%c%c%c%c%c"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[2]*256+</span><span class="identifier">header</span><span class="plain">[3],</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x13</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x14</span><span class="plain">],</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x15</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x16</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x17</span><span class="plain">]);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">] != </span><span class="character">'8'</span><span class="plain">) || (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">])))</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-%04x"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x1c</span><span class="plain">]*256 + </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x1d</span><span class="plain">]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</ifid>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<format>%S</format>\n"</span><span class="plain">, </span><span class="identifier">story_format</span><span class="plain">);</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</identification>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_2"></a><b>§11.1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the bibliographic tag of the iFiction record</span> <span class="cwebmacronumber">11.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<bibliographic>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<title>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_title_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Untitled"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</title>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<author>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_author_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Anonymous"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</author>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<headline>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_headline_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"An Interactive Fiction"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</headline>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<genre>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_genre_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Fiction"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</genre>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<firstpublished>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_creation_year_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">FALSE</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="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">)+1900);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</firstpublished>\n"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_description_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<description>"</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_description_VAR</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</description>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<language>"</span><span class="plain">);</span>
|
|
<span class="identifier">Languages::write_ISO_code</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Projects::get_language_of_play</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</language>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<group>Inform</group>\n"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">episode_number</span><span class="plain"> >= </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<seriesnumber>%d</seriesnumber>\n"</span><span class="plain">, </span><span class="identifier">episode_number</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<series>%w</series>\n"</span><span class="plain">, </span><span class="identifier">series_name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</bibliographic>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_3"></a><b>§11.1.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the resources tag of the iFiction record</span> <span class="cwebmacronumber">11.1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<resources>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<auxiliary>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<leafname>"</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-></span><span class="element">name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
|
<span class="identifier">HTMLFiles::write_xml_safe_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</leafname>\n"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<description>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTMLFiles::write_xml_safe_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</description>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</auxiliary>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</resources>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_4"></a><b>§11.1.4. </b>The <code class="display"><span class="extract"><description></span></code> key here was added in version 8 of the Treaty of Babel,
|
|
in February 2014.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write the cover tag of the iFiction record</span> <span class="cwebmacronumber">11.1.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<cover>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<format>%s</format>\n"</span><span class="plain">, </span><span class="identifier">cover_art_format</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<height>%d</height>\n"</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<width>%d</width>\n"</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cover_alt_text</span><span class="plain"> >= </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">cover_alt_text</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<description>%N</description>\n"</span><span class="plain">, </span><span class="identifier">cover_alt_text</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<description>%w</description>\n"</span><span class="plain">, </span><span class="identifier">PL::Figures::description_of_cover_art</span><span class="plain">());</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</cover>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_5"></a><b>§11.1.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the releases tag of the iFiction record</span> <span class="cwebmacronumber">11.1.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<releases>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<attached>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<release>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) </span><<span class="cwebmacro">Write release data for an existing story file</span> <span class="cwebmacronumber">11.1.5.1</span>>
|
|
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">Write release data for an Inform 7 project</span> <span class="cwebmacronumber">11.1.5.2</span>><span class="plain">;</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</release>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</attached>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</releases>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_5_1"></a><b>§11.1.5.1. </b>ZILCH was Infocom's in-house compiler of Z-machine story files, and prior
|
|
to Inform the only one to exist. Inform differs from it in using the last four
|
|
bytes of the header to store its own version number.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">(The following code will be incorrect on 1 January 2080.)
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write release data for an existing story file</span> <span class="cwebmacronumber">11.1.5.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<releasedate>%s%c%c-%c%c-%c%c</releasedate>\n"</span><span class="plain">,</span>
|
|
<span class="plain">((</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">])) &&</span>
|
|
<span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">] != </span><span class="character">'8'</span><span class="plain">) && (</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">] != </span><span class="character">'9'</span><span class="plain">))?</span><span class="string">"20"</span><span class="plain">:</span><span class="string">"19"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x13</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x14</span><span class="plain">],</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x15</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x16</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x17</span><span class="plain">]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<version>%d</version>\n"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[2]*256+</span><span class="identifier">header</span><span class="plain">[3]);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3c</span><span class="plain">])) &&</span>
|
|
<span class="plain">((</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">])) || (</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">] == </span><span class="character">'.'</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3e</span><span class="plain">])) && (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3f</span><span class="plain">]))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">] == </span><span class="character">'.'</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Inform 6</compiler>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compilerversion>%c%c%c%c</compilerversion>\n"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3c</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3e</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3f</span><span class="plain">]);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Inform 1-5</compiler>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compilerversion>%c%c%c%c</compilerversion>\n"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3c</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3e</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3f</span><span class="plain">]);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>ZILCH</compiler>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compilerversion>%d</compilerversion>\n"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x00</span><span class="plain">]);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1_5">§11.1.5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_5_2"></a><b>§11.1.5.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write release data for an Inform 7 project</span> <span class="cwebmacronumber">11.1.5.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<releasedate>%04d-%02d-%02d</releasedate>\n"</span><span class="plain">,</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">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain">)+1, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">story_release_number_VAR</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_release_number_VAR</span><span class="plain">))) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<version>"</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_release_number_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</version>\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<version>1</version>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Inform 7</compiler>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compilerversion>%B (build %B)</compilerversion>\n"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1_5">§11.1.5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_6"></a><b>§11.1.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the colophon tag of the iFiction record</span> <span class="cwebmacronumber">11.1.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<colophon>\n"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<generator>Inform 7</generator>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<generatorversion>%B (build %B)</generatorversion>\n"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<originated>20%02d-%02d-%02d</originated>\n"</span><span class="plain">,</span>
|
|
<span class="plain">(</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">)-100, (</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain">)+1, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">);</span>
|
|
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</colophon>\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11_1_7"></a><b>§11.1.7. </b>ZIL was Infocom's in-house language, a variant of MDL which in turn resembled
|
|
LISP.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write the format-specific tag of the iFiction record</span> <span class="cwebmacronumber">11.1.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">()) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<serial>%c%c%c%c%c%c</serial>\n"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x12</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x13</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x14</span><span class="plain">],</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x15</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x16</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x17</span><span class="plain">]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<release>%d</release>\n"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[2]*256+</span><span class="identifier">header</span><span class="plain">[3]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<checksum>%04x</checksum>\n"</span><span class="plain">, </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x1c</span><span class="plain">]*256 + </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x1d</span><span class="plain">]);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3c</span><span class="plain">])) &&</span>
|
|
<span class="plain">((</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">])) || (</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">] == </span><span class="character">'.'</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3e</span><span class="plain">])) && (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3f</span><span class="plain">]))) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Inform v%c%c%c%c</compiler>\n"</span><span class="plain">,</span>
|
|
<span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3c</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3d</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3e</span><span class="plain">], </span><span class="identifier">header</span><span class="plain">[</span><span class="constant">0x3f</span><span class="plain">]);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Infocom ZIL</compiler>\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<serial>%02d%02d%02d</serial>\n"</span><span class="plain">,</span>
|
|
<span class="plain">(</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">)-100, (</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain">)+1, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">story_release_number_VAR</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_release_number_VAR</span><span class="plain">))) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<release>"</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP12">PL::Bibliographic::Release::write_var_to_XML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_release_number_VAR</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</release>\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<release>1</release>\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<compiler>Inform %B (build %B)</compiler>\n"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<coverpicture>%d</coverpicture>\n"</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP11_1">§11.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::write_var_to_XML<button class="popup" onclick="togglePopup('usagePopup23')">...<span class="popuptext" id="usagePopup23">Usage of <b>PL::Bibliographic::Release::write_var_to_XML</b>:<br><a href="#SP11_1_2">§11.1.2</a>, <a href="#SP11_1_5_2">§11.1.5.2</a>, <a href="#SP11_1_7">§11.1.7</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">nlv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">desc_mode</span><span class="plain">) {</span>
|
|
<span class="identifier">NonlocalVariables::treat_as_plain_text_word</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nlv</span><span class="plain">) && (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">))) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain"> =</span>
|
|
<span class="identifier">NonlocalVariables::substitute_constants</span><span class="plain">(</span>
|
|
<span class="identifier">NonlocalVariables::get_initial_value</span><span class="plain">(</span>
|
|
<span class="identifier">nlv</span><span class="plain">));</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">NonlocalVariables::kind</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::is</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">UNKNOWN_NT</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_number</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"0"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_number</span><span class="plain">)) {</span>
|
|
<span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_DATA_VHMODE</span><span class="plain">);</span>
|
|
<span class="identifier">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain">(&</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">Holsters::unholster_pair</span><span class="plain">(&</span><span class="identifier">VH</span><span class="plain">, &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</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="identifier">inter_t</span><span class="plain">) </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="2-bd.html#SP15">PL::Bibliographic::compile_bibliographic_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
|
<span class="plain">}</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">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::write_var_to_text<button class="popup" onclick="togglePopup('usagePopup24')">...<span class="popuptext" id="usagePopup24">Usage of <b>PL::Bibliographic::Release::write_var_to_text</b>:<br><a href="#SP14_1">§14.1</a>, <a href="#SP14_2_5">§14.2.5</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">nlv</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nlv</span><span class="plain">) && (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">))) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain"> =</span>
|
|
<span class="identifier">NonlocalVariables::substitute_constants</span><span class="plain">(</span>
|
|
<span class="identifier">NonlocalVariables::get_initial_value</span><span class="plain">(</span>
|
|
<span class="identifier">nlv</span><span class="plain">));</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">NonlocalVariables::kind</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::is</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">UNKNOWN_NT</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_number</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"0"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_number</span><span class="plain">)) {</span>
|
|
<span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_DATA_VHMODE</span><span class="plain">);</span>
|
|
<span class="identifier">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain">(&</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">Holsters::unholster_pair</span><span class="plain">(&</span><span class="identifier">VH</span><span class="plain">, &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</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="identifier">inter_t</span><span class="plain">) </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="2-bd.html#SP15">PL::Bibliographic::compile_bibliographic_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">));</span>
|
|
<span class="plain">}</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">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>Releasing requires four programs to work together: this one, Inform 6
|
|
to turn our output into a story file, a releasing agent called "Inblorb"
|
|
which binds up the result into a blorbed file, and lastly the user interface,
|
|
which calls the other three in the right sequence.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Although the user interface looks as if it's in charge, in fact we are
|
|
pulling the strings, because we write a "blurb file" of instructions
|
|
telling Inblorb exactly what to do. The format for this is an extension of
|
|
the "blurb" format documented in the "Inform Designer's Manual",
|
|
fourth edition (the "DM4"); see the published source code for Inblorb.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Note that the code below does not generate an <code class="display"><span class="extract">author</span></code> blurb instruction,
|
|
which would lead to an AUTH chunk in the final blorb. This is partly
|
|
because the AUTH chunk is now obsolete in the wake of the Treaty of
|
|
Babel, but also because it avoids problems with Unicode: an AUTH can
|
|
only contain plainest ASCII, whereas the author's name known to Inform
|
|
may very well use characters not representable in ASCII. There is no
|
|
good way round this: so, farewell AUTH.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Similarly, we do not supply a release number. The release number of a blorb
|
|
has a different meaning from that of the story file embedded in it: the
|
|
number refers to the release of the picture and sound resources found
|
|
in the blorb, and we know nothing about that. (It's a feature provided
|
|
for archival re-releases of 1980s IF.)
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">BIBLIOGRAPHIC_TEXT_TRUNCATION</span><span class="plain"> </span><span class="constant">31</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::Release::write_release_blurb<button class="popup" onclick="togglePopup('usagePopup25')">...<span class="popuptext" id="usagePopup25">Usage of <b>PL::Bibliographic::Release::write_release_blurb</b>:<br><a href="#SP10_4_2">§10.4.2</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">cover_art_format</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Compose the blorbed story filename into the TEMP stream</span> <span class="cwebmacronumber">14.1</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"! Blurb file created by Inform %B (build %B)\n\n"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Write the body of the Blurb file</span> <span class="cwebmacronumber">14.2</span>><span class="plain">;</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_1"></a><b>§14.1. </b>Note that we truncate the title if it becomes vastly long, to make sure
|
|
the Blorb-file's filename won't be too long for the file system.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Compose the blorbed story filename into the TEMP stream</span> <span class="cwebmacronumber">14.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">story_title_VAR</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_title_VAR</span><span class="plain">))) {</span>
|
|
<span class="identifier">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
|
|
<span class="identifier">COMPILATION_MODE_ENTER</span><span class="plain">(</span><span class="identifier">TRUNCATE_TEXT_CMODE</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="identifier">story_title_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">END_COMPILATION_MODE</span><span class="plain">;</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">TEMP</span><span class="plain">, </span><span class="string">"story"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TEMP</span><span class="plain">, </span><span class="string">".%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">()));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14">§14</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2"></a><b>§14.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the body of the Blurb file</span> <span class="cwebmacronumber">14.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Tell Inblorb where to write its report to</span> <span class="cwebmacronumber">14.2.1</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Identification\n\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Tell Inblorb where the project and release folders are</span> <span class="cwebmacronumber">14.2.2</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Blorb instructions\n\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Tell Inblorb where the story file and iFiction files are</span> <span class="cwebmacronumber">14.2.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Give instructions about the cover image</span> <span class="cwebmacronumber">14.2.4</span>><span class="plain">;</span>
|
|
<span class="identifier">PL::Figures::write_blurb_commands</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">PL::Sounds::write_blurb_commands</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Placeholder variables\n\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Write numerous placeholder variables</span> <span class="cwebmacronumber">14.2.5</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Other material to release\n\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Give instructions about source text, solution and library card</span> <span class="cwebmacronumber">14.2.6</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Give instructions about auxiliary files</span> <span class="cwebmacronumber">14.2.7</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_interpreter</span><span class="plain">) </span><<span class="cwebmacro">Give instructions to release with an interpreter for Web play</span> <span class="cwebmacronumber">14.2.8</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_website</span><span class="plain">) </span><<span class="cwebmacro">Give instructions to construct a website around the release</span> <span class="cwebmacronumber">14.2.9</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Give hints to Inblorb for its HTML status page</span> <span class="cwebmacronumber">14.2.10</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14">§14</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_1"></a><b>§14.2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Tell Inblorb where to write its report to</span> <span class="cwebmacronumber">14.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status \"%f\" \"%f\"\n\n"</span><span class="plain">,</span>
|
|
<span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">CBLORB_REPORT_MODEL_IRES</span><span class="plain">),</span>
|
|
<span class="identifier">Task::cblorb_report_file</span><span class="plain">());</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_2"></a><b>§14.2.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Tell Inblorb where the project and release folders are</span> <span class="cwebmacronumber">14.2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"project folder \"%p\"\n"</span><span class="plain">, </span><span class="identifier">Projects::path</span><span class="plain">(</span><span class="identifier">Task::project</span><span class="plain">()));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">create_Materials</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release to \"%p\"\n"</span><span class="plain">, </span><span class="identifier">Task::release_path</span><span class="plain">());</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_3"></a><b>§14.2.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Tell Inblorb where the story file and iFiction files are</span> <span class="cwebmacronumber">14.2.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile leafname \""</span><span class="plain">); </span><span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Task::wraps_existing_storyfile</span><span class="plain">())</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \"%f\" include\n"</span><span class="plain">, </span><span class="identifier">Task::existing_storyfile_file</span><span class="plain">());</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"storyfile \"%f\" include\n"</span><span class="plain">, </span><span class="identifier">Task::storyfile_file</span><span class="plain">());</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"ifiction \"%f\" include\n"</span><span class="plain">, </span><span class="identifier">Task::ifiction_record_file</span><span class="plain">());</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_4"></a><b>§14.2.4. </b>A controversial point here is that if the author supplies no cover art, we
|
|
supply it for him, and if necessary copy a suitable image into any website
|
|
released along with the work.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give instructions about the cover image</span> <span class="cwebmacronumber">14.2.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain">) {</span>
|
|
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">large</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">strcmp</span><span class="plain">(</span><span class="identifier">cover_art_format</span><span class="plain">, </span><span class="string">"jpg"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
|
|
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">large</span><span class="plain"> = </span><span class="identifier">Task::large_cover_art_file</span><span class="plain">(</span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cover \"%f\"\n"</span><span class="plain">, </span><span class="identifier">large</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"picture %d \"%f\"\n"</span><span class="plain">, </span><span class="identifier">cover_picture_number</span><span class="plain">, </span><span class="identifier">large</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cover \"%f\"\n"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"picture %d \"%f\"\n"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_website</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \"%f\"\n"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">LARGE_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"release file \"%f\"\n"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">SMALL_DEFAULT_COVER_ART_IRES</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_5"></a><b>§14.2.5. </b>This will be recognisable as yet another form of the Library Card information.
|
|
"Placeholders" are the only data structure in the primitive blurb language, and
|
|
are in effect strings, whose names appear in block capitals within square
|
|
brackets [THUS].
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write numerous placeholder variables</span> <span class="cwebmacronumber">14.2.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [IFID] = \"%S\"\n"</span><span class="plain">, </span><span class="functiontext"><a href="2-ifi.html#SP2">PL::Bibliographic::IFID::read_uuid</a></span><span class="plain">());</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_release_number_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [RELEASE] = \""</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_release_number_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [RELEASE] = \"1\"\n"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
|
|
<span class="identifier">COMPILATION_MODE_ENTER</span><span class="plain">(</span><span class="identifier">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_creation_year_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [YEAR] = \""</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_creation_year_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [YEAR] = \"%d\"\n"</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="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_title_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">NonlocalVariables::treat_as_plain_text_word</span><span class="plain">(</span><span class="identifier">story_title_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [TITLE] = \""</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_title_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [TITLE] = \"Untitled\"\n"</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_author_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">NonlocalVariables::treat_as_plain_text_word</span><span class="plain">(</span><span class="identifier">story_author_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [AUTHOR] = \""</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_author_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [AUTHOR] = \"Anonymous\"\n"</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NonlocalVariables::has_initial_value_set</span><span class="plain">(</span><span class="identifier">story_description_VAR</span><span class="plain">)) {</span>
|
|
<span class="identifier">NonlocalVariables::treat_as_plain_text_word</span><span class="plain">(</span><span class="identifier">story_description_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [BLURB] = \""</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP13">PL::Bibliographic::Release::write_var_to_text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">story_description_VAR</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [BLURB] = \"A work of interactive fiction.\"\n"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">END_COMPILATION_MODE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_6"></a><b>§14.2.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Give instructions about source text, solution and library card</span> <span class="cwebmacronumber">14.2.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_source</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">source_public</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"source public\n"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"source\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_solution</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">solution_public</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"solution public\n"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"solution\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_card</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">card_public</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"ifiction public\n"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"ifiction\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_7"></a><b>§14.2.7. </b>The Introduction booklet and the Postcard are both squirreled away inside
|
|
a standard Inform installation. Under the Creative Commons licence terms for
|
|
the Postcard, we have to credit its authors here; but the booklet contains its
|
|
own credits.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give instructions about auxiliary files</span> <span class="cwebmacronumber">14.2.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">, </span><span class="reserved">auxiliary_file</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">Pathnames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-></span><span class="element">folder_to_release_to</span><span class="plain">, </span><span class="identifier">Task::release_path</span><span class="plain">());</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \"%f\" \"%S\" \"%S\"\n"</span><span class="plain">,</span>
|
|
<span class="identifier">af</span><span class="plain">-></span><span class="element">name_of_original_file</span><span class="plain">,</span>
|
|
<span class="plain">(</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">)?(</span><span class="identifier">af</span><span class="plain">-></span><span class="element">brief_description</span><span class="plain">):</span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">,</span>
|
|
<span class="plain">(</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">)?</span><span class="identifier">rel:I</span><span class="string">"--"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_booklet</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \"%f\" \"Introduction to IF\" \"--\"\n"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">INTRO_BOOKLET_IRES</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_postcard</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"auxiliary \"%f\" \"IF Postcard\" \"--\"\n"</span><span class="plain">, </span><span class="identifier">Inbuild::file_from_installation</span><span class="plain">(</span><span class="identifier">INTRO_POSTCARD_IRES</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [OTHERCREDITS] = \"The postcard was written by Andrew Plotkin "</span>
|
|
<span class="string">"and designed by Lea Albaugh.\"\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_8"></a><b>§14.2.8. </b>Facilities for a Javascript interpreter to play a base64-encoded story
|
|
file online.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give instructions to release with an interpreter for Web play</span> <span class="cwebmacronumber">14.2.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Website instructions\n\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [ENCODEDSTORYFILE] = \""</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".js\"\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Tell Inblorb where to find the website templates</span> <span class="cwebmacronumber">14.2.8.1</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">interpreter_template_leafname</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
|
|
<span class="identifier">interpreter_template_leafname</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_default_interpreter</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain"> = </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">Task::vm</span><span class="plain">());</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"placeholder [INTERPRETERSCRIPTS] = \" "</span><span class="plain">);</span>
|
|
<span class="reserved">auxiliary_file</span><span class="plain"> *</span><span class="identifier">af</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</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="identifier">af</span><span class="plain">-></span><span class="element">from_payload</span><span class="plain"> == </span><span class="constant">JAVASCRIPT_PAYLOAD</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-></span><span class="element">name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<script src='%S'></script>"</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">af</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="identifier">af</span><span class="plain">-></span><span class="element">from_payload</span><span class="plain"> == </span><span class="constant">CSS_PAYLOAD</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">Filenames::to_text_relative</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">, </span><span class="identifier">af</span><span class="plain">-></span><span class="element">name_of_original_file</span><span class="plain">, </span><span class="identifier">Inbuild::materials</span><span class="plain">());</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<link rel='stylesheet' href='%S' type='text/css' media='all'></link>"</span><span class="plain">, </span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rel</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"interpreter \"%S\" \"%c\"\n"</span><span class="plain">, </span><span class="identifier">interpreter_template_leafname</span><span class="plain">, </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"base64 \"%f\" to \"%p%c"</span><span class="plain">,</span>
|
|
<span class="identifier">Task::storyfile_file</span><span class="plain">(), </span><span class="identifier">Task::released_interpreter_path</span><span class="plain">(), </span><span class="identifier">FOLDER_SEPARATOR</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_COPY</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">TEMP</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".js\"\n"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_9"></a><b>§14.2.9. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Give instructions to construct a website around the release</span> <span class="cwebmacronumber">14.2.9</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n! Website instructions\n\n"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Tell Inblorb where to find the website templates</span> <span class="cwebmacronumber">14.2.8.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">website_template_leafname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Classic"</span><span class="plain">) != </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"css\n"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"website \"%w\"\n"</span><span class="plain">, </span><span class="identifier">website_template_leafname</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_8_1"></a><b>§14.2.8.1. </b>The order here is significant, since Inblorb searches the folders in order,
|
|
with the earliest quoted searched first.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Tell Inblorb where to find the website templates</span> <span class="cwebmacronumber">14.2.8.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">inbuild_nest</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
|
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Inbuild::nest_list</span><span class="plain">();</span>
|
|
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">inbuild_nest</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"template path \"%p\"\n"</span><span class="plain">, </span><span class="identifier">TemplateManager::path_within_nest</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2_8">§14.2.8</a>, <a href="#SP14_2_9">§14.2.9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_2_10"></a><b>§14.2.10. </b>Inblorb reports its progress, or lack of it, with an HTML page, just as we do.
|
|
This page however includes some hints on what the user might have chosen
|
|
instead of what he actually did choose, and we'll write those hints now, for
|
|
Inblorb to copy out later.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give hints to Inblorb for its HTML status page</span> <span class="cwebmacronumber">14.2.10</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">ParseTree::traverse_with_stream</span><span class="plain">(</span><span class="identifier">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext"><a href="#SP8">PL::Bibliographic::Release::visit_to_quote</a></span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_cover</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with cover art', to "</span>
|
|
<span class="string">"provide something more distinctive than the default artwork above"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_cover"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_website</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with a website'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_website"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_interpreter</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with an interpreter', "</span>
|
|
<span class="string">"for in-browser play on your website"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_interpreter"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">auxiliary_file</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with a file of "</span>
|
|
<span class="string">"\"Such-and-Such\" called \"whatever.pdf\"', perhaps to add a "</span>
|
|
<span class="string">"manual, or a welcoming note"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_files"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_source</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with the source text'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_source"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_solution</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with a solution'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_solution"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_card</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with the library card'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_card"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_booklet</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with the introductory booklet'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_booklet"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_postcard</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"status alternative ||Using 'Release along with the introductory postcard'"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::DocReferences::link_to</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"release_postcard"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"||\n"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14_2">§14.2</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="2-bd.html">Back to 'Bibliographic Data'</a></li><li><i>(This section ends Chapter 2: Bibliographic Data.)</i></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>
|
|
|