mirror of
https://github.com/ganelson/inform.git
synced 2024-07-16 22:14:23 +03:00
1001 lines
113 KiB
HTML
1001 lines
113 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>2/bw</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '3/rls' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">inblorb 4</a></li><li><a href="index.html#3">Chapter 3: Other Material</a></li><li><b>Releaser</b></li></ul><p class="purpose">To manage requests to release material other than a Blorb file.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Requests</a></li><li><a href="#SP3">§3. Receiving requests</a></li><li><a href="#SP5">§5. Any Last Requests</a></li><li><a href="#SP6">§6. Carrying out requests</a></li><li><a href="#SP7">§7. The Extras file for a website template</a></li><li><a href="#SP8">§8. The Manifest file for an interpreter</a></li><li><a href="#SP11">§11. Blorb relocation</a></li><li><a href="#SP12">§12. Reporting the release</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Requests. </b>If the previous chapter, which wrote blorb files, was the Lord High Executioner,
|
|
then this one is the Lord High Everything Else: it keeps track of requests
|
|
to write all kinds of interesting things which are not blorb files,
|
|
and then sees that they are carried out. The requests divide as follows:
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">enum</span> <span class="constant">COPY_REQ</span><span class="definitionkeyword"> from </span><span class="constant">0</span> <span class="comment">a miscellaneous file</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">IFICTION_REQ</span><span class="plain"> </span> <span class="comment">the iFiction record of a project</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">RELEASE_FILE_REQ</span><span class="plain"> </span> <span class="comment">a template file</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">RELEASE_SOURCE_REQ</span><span class="plain"> </span> <span class="comment">the source text in HTML form</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">SOLUTION_REQ</span><span class="plain"> </span> <span class="comment">a solution file generated from the skein</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">SOURCE_REQ</span><span class="plain"> </span> <span class="comment">the source text of a project</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">WEBSITE_REQ</span><span class="plain"> </span> <span class="comment">a whole website</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">INTERPRETER_REQ</span><span class="plain"> </span> <span class="comment">an in-browser interpreter</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">BASE64_REQ</span><span class="plain"> </span> <span class="comment">a base64-encoded copy of a binary file</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">INSTRUCTION_REQ</span><span class="plain"> </span> <span class="comment">a release instruction copied to inblorb for reporting only</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">ALTERNATIVE_REQ</span><span class="plain"> </span> <span class="comment">an unused release instruction copied to inblorb for reporting only</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">website_requested</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">; </span> <span class="comment">has a <code class="display"><span class="extract">WEBSITE_REQ</span></code> been made?</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Each request produces an instance of:
|
|
</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">request</span><span class="plain"> {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">what_is_requested</span><span class="plain">; </span> <span class="comment">one of the <code class="display"><span class="extract">*_REQ</span></code> values above</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details1</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details2</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details3</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">private</span><span class="plain">; </span> <span class="comment">is this request private, i.e., not to contribute to a website?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">outcome_data</span><span class="plain">; </span> <span class="comment">e.g. number of bytes copied</span>
|
|
<span class="constant">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">request</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure request is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Receiving requests. </b>These can have from 0 to 3 textual details attached:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="functiontext">Requests::request_0</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">privacy</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">request</span><span class="plain">);</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain"> = </span><span class="identifier">kind</span><span class="plain">;</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>private</span><span class="plain"> = </span><span class="identifier">privacy</span><span class="plain">;</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kind</span><span class="plain"> == </span><span class="constant">WEBSITE_REQ</span><span class="plain">) </span><span class="identifier">website_requested</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="functiontext">Requests::request_1</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">privacy</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="functiontext">Requests::request_0</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain">, </span><span class="identifier">privacy</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, </span><span class="identifier">text1</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="functiontext">Requests::request_2</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">privacy</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="functiontext">Requests::request_0</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain">, </span><span class="identifier">privacy</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, </span><span class="identifier">text1</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">, </span><span class="identifier">text2</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="functiontext">Requests::request_3</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text3</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">privacy</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="functiontext">Requests::request_0</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain">, </span><span class="identifier">privacy</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, </span><span class="identifier">text1</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">, </span><span class="identifier">text2</span><span class="plain">);</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">, </span><span class="identifier">text3</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::request_0 appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Requests::request_1 is used in 1/bp (<a href="1-bp.html#SP7_2">§7.2</a>).</p>
|
|
|
|
<p class="endnote">The function Requests::request_2 is used in 1/bp (<a href="1-bp.html#SP7_2">§7.2</a>).</p>
|
|
|
|
<p class="endnote">The function Requests::request_3 is used in <a href="#SP4">§4</a>, 1/bp (<a href="1-bp.html#SP7_2">§7.2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>A convenient abbreviation:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">subfolder</span><span class="plain">) {</span>
|
|
<span class="functiontext">Requests::request_3</span><span class="plain">(</span><span class="constant">COPY_REQ</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">subfolder</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::request_copy is used in <a href="#SP5">§5</a>, 3/laaf (<a href="3-laaf.html#SP8">§8</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Any Last Requests. </b>Most of the requests are made as the parser reads commands from the blurb
|
|
script. At the end of that process, though, the following routine may add
|
|
further requests as consequences:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::any_last_requests</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Links::request_copy_of_auxiliaries</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">default_cover_used</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">BIGCOVER</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BIGCOVER"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">BIGCOVER</span><span class="plain">) > 0) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cover_is_in_JPEG_format</span><span class="plain">)</span>
|
|
<span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="identifier">BIGCOVER</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.jpg"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="identifier">BIGCOVER</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cover.png"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">website_requested</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">SMALLCOVER</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SMALLCOVER"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">SMALLCOVER</span><span class="plain">) > 0) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cover_is_in_JPEG_format</span><span class="plain">)</span>
|
|
<span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="identifier">SMALLCOVER</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Small Cover.jpg"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">Requests::request_copy</span><span class="plain">(</span><span class="identifier">SMALLCOVER</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Small Cover.png"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::any_last_requests is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Carrying out requests. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::create_requested_material</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_folder</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Release folder: <%p>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">release_folder</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">blorb_file_size</span><span class="plain"> > 0) </span><span class="functiontext">Requests::declare_where_blorb_should_be_copied</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">);</span>
|
|
<span class="functiontext">Requests::any_last_requests</span><span class="plain">();</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">) {</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ALTERNATIVE_REQ</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="constant">BASE64_REQ</span><span class="plain">: </span><<span class="cwebmacro">Copy a base64-encoded file across</span> <span class="cwebmacronumber">6.5</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="constant">COPY_REQ</span><span class="plain">: </span><<span class="cwebmacro">Copy a file into the release folder</span> <span class="cwebmacronumber">6.4</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="constant">IFICTION_REQ</span><span class="plain">: </span><<span class="cwebmacro">Create an iFiction file</span> <span class="cwebmacronumber">6.3</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="constant">INSTRUCTION_REQ</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="constant">INTERPRETER_REQ</span><span class="plain">: </span><<span class="cwebmacro">Create an in-browser interpreter</span> <span class="cwebmacronumber">6.8</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="constant">RELEASE_FILE_REQ</span><span class="plain">: </span><<span class="cwebmacro">Release a file into the release folder</span> <span class="cwebmacronumber">6.6</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="constant">RELEASE_SOURCE_REQ</span><span class="plain">: </span><<span class="cwebmacro">Release source text as HTML into the release folder</span> <span class="cwebmacronumber">6.7</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="constant">SOLUTION_REQ</span><span class="plain">: </span><<span class="cwebmacro">Create a Solution::walkthrough file</span> <span class="cwebmacronumber">6.1</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="constant">SOURCE_REQ</span><span class="plain">: </span><<span class="cwebmacro">Create a plain text source file</span> <span class="cwebmacronumber">6.2</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="constant">WEBSITE_REQ</span><span class="plain">: </span><<span class="cwebmacro">Create a website</span> <span class="cwebmacronumber">6.9</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::create_requested_material is used in 1/mn (<a href="1-mn.html#SP3">§3</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create a Solution::walkthrough file</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">Skein_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">project_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Skein.skein"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">solution_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"solution.txt"</span><span class="plain">);</span>
|
|
<span class="functiontext">Solution::walkthrough</span><span class="plain">(</span><span class="identifier">Skein_filename</span><span class="plain">, </span><span class="identifier">solution_filename</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_2"></a><b>§6.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create a plain text source file</span> <span class="cwebmacronumber">6.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">Source</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">project_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Source"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">source_text_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Source</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"story.ni"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"source.txt"</span><span class="plain">);</span>
|
|
<span class="functiontext">BinaryFiles::copy</span><span class="plain">(</span><span class="identifier">source_text_filename</span><span class="plain">, </span><span class="identifier">write_to</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_3"></a><b>§6.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create an iFiction file</span> <span class="cwebmacronumber">6.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">iFiction_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">project_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Metadata.iFiction"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"iFiction.xml"</span><span class="plain">);</span>
|
|
<span class="functiontext">BinaryFiles::copy</span><span class="plain">(</span><span class="identifier">iFiction_filename</span><span class="plain">, </span><span class="identifier">write_to</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_4"></a><b>§6.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Copy a file into the release folder</span> <span class="cwebmacronumber">6.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">release_folder</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"--"</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">size</span><span class="plain"> = </span><span class="functiontext">BinaryFiles::copy</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">write_to</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain"> = </span><span class="identifier">size</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">size</span><span class="plain"> == -1)</span>
|
|
<span class="functiontext">BlorbErrors::errorf_1S</span><span class="plain">(</span>
|
|
<span class="string">"You asked to release along with a file called '%S', which ought "</span>
|
|
<span class="string">"to be in the Materials folder for the project. But I can't find "</span>
|
|
<span class="string">"it there."</span><span class="plain">, </span><span class="functiontext">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_5"></a><b>§6.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Copy a base64-encoded file across</span> <span class="cwebmacronumber">6.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Base64::encode</span><span class="plain">(</span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">), </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">),</span>
|
|
<span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BASESIXTYFOURTOP"</span><span class="plain">), </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BASESIXTYFOURTAIL"</span><span class="plain">));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_6"></a><b>§6.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Release a file into the release folder</span> <span class="cwebmacronumber">6.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_7"></a><b>§6.7. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Release source text as HTML into the release folder</span> <span class="cwebmacronumber">6.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCEPREFIX"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"source"</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCELOCATION"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">, 0);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">HTML_template</span><span class="plain"> = </span><span class="functiontext">Templates::find_file_in_specific_template</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">HTML_template</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="functiontext">BlorbErrors::error_1S</span><span class="plain">(</span><span class="string">"can't find HTML template file"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Web page %f from template %s\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">HTML_template</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">);</span>
|
|
<span class="functiontext">Websites::web_copy_source</span><span class="plain">(</span><span class="identifier">HTML_template</span><span class="plain">, </span><span class="identifier">release_folder</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_8"></a><b>§6.8. </b>Interpreters are copied, not made. They're really just like website
|
|
templates, except that they have a manifest file instead of an extras file,
|
|
and that they're copied into an <code class="display"><span class="extract">interpreter</span></code> subfolder of the release folder,
|
|
which is assumed already to exist. (It isn't copied because folder creation
|
|
is tiresome to do in a cross-platform way, since Windows doesn't follow POSIX.
|
|
The necessary code exists in Inform already, so we'll do it there.)
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Create an in-browser interpreter</span> <span class="cwebmacronumber">6.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETER"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, 0);</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETER"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="functiontext">Templates::find_file_in_specific_template</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"(manifest).txt"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">) { </span> <span class="comment">i.e., if the "(manifest).txt" file exists</span>
|
|
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"can't open (manifest) file"</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="functiontext">Requests::read_requested_ifile</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_9"></a><b>§6.9. </b>We copy the CSS file, if we need one; make the home page; and make any
|
|
other pages demanded by public released material. After that, it's up to
|
|
the template to add more if it wants to.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Create a website</span> <span class="cwebmacronumber">6.9</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">, 0);</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use_css_code_styles</span><span class="plain">) {</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="functiontext">Templates::find_file_in_specific_template</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"style.css"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">) {</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">CSS_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">release_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"style.css"</span><span class="plain">);</span>
|
|
<span class="functiontext">BinaryFiles::copy</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">CSS_filename</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"index.html"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>private</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INTERPRETER_REQ</span><span class="plain">:</span>
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"play.html"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">NULL</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="constant">SOURCE_REQ</span><span class="plain">:</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCEPREFIX"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"source"</span><span class="plain">, 0);</span>
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">Source</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">project_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Source"</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">story</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Source</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"story.ni"</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">source_text</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">source_text</span><span class="plain">, </span><span class="string">"%f"</span><span class="plain">, </span><span class="identifier">story</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCELOCATION"</span><span class="plain">, </span><span class="identifier">source_text</span><span class="plain">, 0);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">source_text</span><span class="plain">);</span>
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"source.html"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<<span class="cwebmacro">Add further material as requested by the template</span> <span class="cwebmacronumber">6.9.1</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_9_1"></a><b>§6.9.1. </b>Most templates do not request extra files, but they have the option by
|
|
including a manifest called "(extras).txt":
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add further material as requested by the template</span> <span class="cwebmacronumber">6.9.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="functiontext">Templates::find_file_in_specific_template</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"(extras).txt"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">) { </span> <span class="comment">i.e., if the "(extras).txt" file exists</span>
|
|
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"can't open (extras) file"</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="functiontext">Requests::read_requested_file</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP6_9">§6.9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. The Extras file for a website template. </b>When parsing "(extras).txt", <code class="display"><span class="extract">Requests::read_requested_file</span></code> is called for each line.
|
|
We trim white space and expect the result to be a filename of something
|
|
within the template.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::read_requested_file</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">filename</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
|
<span class="functiontext">Str::trim_white_space</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain">,</span>
|
|
<span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::read_requested_file is used in <a href="#SP6_9_1">§6.9.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. The Manifest file for an interpreter. </b>When parsing "(manifest).txt", we do almost the same thing. Like a website
|
|
template, an interpreter is stored in a single folder, and the manifest can
|
|
list files which need to be copied into the Release in order to piece together
|
|
a working copy of the interpreter.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">However, this is more expressive than the "(extras).txt" file because it
|
|
also has the ability to set placeholders in Inblorb. We use this mechanism
|
|
because it allows each interpreter to provide some metadata about its own
|
|
identity and exactly how it wants to be interfaced with the website which
|
|
Inblorb will generate. This isn't the place to document what those metadata
|
|
placeholders are and what they mean, since (except for a consistency check
|
|
below) Inblorb doesn't know anything about them — it's the Standard
|
|
website template which they need to match up to. Anyway, the best way
|
|
to get an idea of this is to read the manifest file for the default,
|
|
Parchment, interpreter.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Placeholders are set thus:
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain">[INTERPRETERVERSION]</span>
|
|
<span class="plain">Parchment for Inform 7</span>
|
|
<span class="plain">[]</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph">where the opening line names the placeholder, then one or more lines give
|
|
the contents, and the box line ends the definition.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">We're in the mode if <code class="display"><span class="extract">current_placeholder</span></code> is a non-empty text, and
|
|
if so, then it's the name of the one being set. Thus the code to handle
|
|
the opening and closing lines can be identical.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">current_placeholder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cp_written</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::read_requested_ifile</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">manifestline</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cp_written</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) { </span><span class="identifier">cp_written</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="identifier">current_placeholder</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">(); }</span>
|
|
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">manifestline</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *(%c*?) *"</span><span class="plain">)) </span><span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">manifestline</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">manifestline</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[(%c+)%]"</span><span class="plain">))</span>
|
|
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">) == 0)</span>
|
|
<<span class="cwebmacro">We're outside placeholder mode, so it's a comment or a manifested filename</span> <span class="cwebmacronumber">8.1</span>>
|
|
<span class="reserved">else</span>
|
|
<<span class="cwebmacro">We're inside placeholder mode, so it's content to be spooled into the named placeholder</span> <span class="cwebmacronumber">8.2</span>><span class="plain">;</span>
|
|
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::read_requested_ifile is used in <a href="#SP6_8">§6.8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b>Outside of placeholders, blank lines and lines introduced by the comment
|
|
character <code class="display"><span class="extract">!</span></code> are skipped.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">We're outside placeholder mode, so it's a comment or a manifested filename</span> <span class="cwebmacronumber">8.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">manifestline</span><span class="plain">) == 0) || (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">manifestline</span><span class="plain">) == </span><span class="character">'!'</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="identifier">manifestline</span><span class="plain">, </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETER"</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"interpreter"</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>Line breaks are included between lines, though not at the end of the final
|
|
line, so that a one-line definition like the example above contains no line
|
|
break. White space is stripped out at the left and right hand edges of
|
|
each line.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">We're inside placeholder mode, so it's content to be spooled into the named placeholder</span> <span class="cwebmacronumber">8.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"INTERPRETERVM"</span><span class="plain">) == 0)</span>
|
|
<<span class="cwebmacro">Check the value being given against the actual VM we're blorbing up</span> <span class="cwebmacronumber">8.2.1</span>><span class="character">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">))</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">current_placeholder</span><span class="plain">, </span><span class="identifier">manifestline</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_1"></a><b>§8.2.1. </b>Perhaps it's clumsy to do it here, but at some point Inblorb needs to
|
|
make sure we aren't trying to release a Z-machine game along with a
|
|
Glulx interpreter, or vice versa. The manifest file for the interpreter
|
|
is required to declare which virtual machines it implements, by giving a
|
|
value of the placeholder <code class="display"><span class="extract">INTERPRETERVM</span></code>. This declares whether the interpreter
|
|
can handle blorbed Z-machine files (<code class="display"><span class="extract">z</span></code>), blorbed Glulx files (<code class="display"><span class="extract">g</span></code>) or both
|
|
(<code class="display"><span class="extract">zg</span></code> or <code class="display"><span class="extract">gz</span></code>). No other values are legal; note lower case. Inblorb then
|
|
checks this against its own placeholder <code class="display"><span class="extract">INTERPRETERVMIS</span></code>, which stores
|
|
what the actual format of the blorb being released is.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Check the value being given against the actual VM we're blorbing up</span> <span class="cwebmacronumber">8.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">vm_used</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETERVMIS"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">capable</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">manifestline</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">vm_used</span><span class="plain">))</span>
|
|
<span class="identifier">capable</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">capable</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"Z-machine"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">vm_used</span><span class="plain">) == </span><span class="character">'g'</span><span class="plain">) </span><span class="identifier">format</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"Glulx"</span><span class="plain">;</span>
|
|
<span class="functiontext">BlorbErrors::errorf_2S</span><span class="plain">(</span>
|
|
<span class="string">"You asked to release along with a copy of the '%S' in-browser "</span>
|
|
<span class="string">"interpreter, but this can't handle story files which use the "</span>
|
|
<span class="string">"%S story file format. (The format can be changed on Inform's "</span>
|
|
<span class="string">"Settings panel for a project.)"</span><span class="plain">,</span>
|
|
<span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETER"</span><span class="plain">), </span><span class="identifier">format</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_2">§8.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>There are really three cases when we release something from a website
|
|
template. We can copy it verbatim as a binary file, we can expand placeholders
|
|
but otherwise copy as a single item, or we can use it to make a mass
|
|
generation of source pages.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::release_file_into_website</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sub</span><span class="plain">) {</span>
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">release_folder</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sub</span><span class="plain">) </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">sub</span><span class="plain">);</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="functiontext">Templates::find_file_in_specific_template</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="functiontext">BlorbErrors::error_1S</span><span class="plain">(</span><span class="string">"unable to find file in website template"</span><span class="plain">, </span><span class="identifier">name</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="functiontext">Filenames::guess_format</span><span class="plain">(</span><span class="identifier">write_to</span><span class="plain">) == </span><span class="constant">FORMAT_PERHAPS_HTML</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Release an HTML page from the template into the website</span> <span class="cwebmacronumber">9.1</span>>
|
|
<span class="reserved">else</span>
|
|
<<span class="cwebmacro">Release a binary file from the template into the website</span> <span class="cwebmacronumber">9.2</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::release_file_into_website is used in <a href="#SP6_6">§6.6</a>, <a href="#SP6_9">§6.9</a>, <a href="#SP7">§7</a>, <a href="#SP8_1">§8.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_1"></a><b>§9.1. </b>"Source.html" is a special case, as it expands into a whole suite of
|
|
pages automagically. Otherwise we work out the filenames and then hand over
|
|
to the experts.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Release an HTML page from the template into the website</span> <span class="cwebmacronumber">9.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, 0);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Web page %S from template %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"source.html"</span><span class="plain">))</span>
|
|
<span class="functiontext">Websites::web_copy_source</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">release_folder</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">Websites::web_copy</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">write_to</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9_2"></a><b>§9.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Release a binary file from the template into the website</span> <span class="cwebmacronumber">9.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Binary file %S from template %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
|
|
<span class="functiontext">BinaryFiles::copy</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">write_to</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>The home page will need links to any public released resources, and this
|
|
is where those are added (to the other links already present, that is).
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::add_links_to_requested_resources</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>private</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">WEBSITE_REQ</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="constant">INTERPRETER_REQ</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Play In-Browser"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"play.html"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</li>"</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="constant">SOURCE_REQ</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Source Text"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"source.html"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</li>"</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="constant">SOLUTION_REQ</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Solution"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"solution.txt"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</li>"</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="constant">IFICTION_REQ</span><span class="plain">:</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Links::download_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Library Card"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"iFiction.xml"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</li>"</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::add_links_to_requested_resources is used in 3/laaf (<a href="3-laaf.html#SP4">§4</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Blorb relocation. </b>This is a little dodge used to make the process of releasing games in
|
|
Inform 7 more seamless: see the manual for an explanation.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::declare_where_blorb_should_be_copied</span><span class="plain">(</span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leaf</span><span class="plain"> = </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"STORYFILE"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">leaf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">leaf</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"Story"</span><span class="plain">;</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">path</span><span class="plain">, </span><span class="identifier">leaf</span><span class="plain">);</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Copy blorb to: [[%f]]\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::declare_where_blorb_should_be_copied is used in <a href="#SP6">§6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Reporting the release. </b>Inform normally asks Inblorb to generate an HTML page reporting what it has
|
|
done, and if things have gone well then this typically contains a list of
|
|
what has been released. (That's easy for us to produce, since we just have to
|
|
look through the requests.) Rather than attempt to write to the file here,
|
|
we copy the necessary HTML into the placeholder <code class="display"><span class="extract">ph</span></code>.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Requests::report_requested_material</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ph</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">release_folder</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">this should never happen</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">launch_website</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">launch_play</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<ul>"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Itemise the blorb file, possibly mentioning pictures and sounds</span> <span class="cwebmacronumber">12.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise the website, mentioning how many pages it has</span> <span class="cwebmacronumber">12.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise the interpreter</span> <span class="cwebmacronumber">12.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise the library card</span> <span class="cwebmacronumber">12.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise the solution file</span> <span class="cwebmacronumber">12.5</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise the source text</span> <span class="cwebmacronumber">12.6</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Itemise auxiliary files in a sub-list</span> <span class="cwebmacronumber">12.7</span>><span class="plain">;</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</ul>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">launch_website</span><span class="plain">) || (</span><span class="identifier">launch_play</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Give a centred line of links to the main web pages produced</span> <span class="cwebmacronumber">12.8</span>><span class="plain">;</span>
|
|
|
|
<<span class="cwebmacro">Add in links to release instructions from Inform source text</span> <span class="cwebmacronumber">12.9</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Add in advertisements for features Inform would like to offer</span> <span class="cwebmacronumber">12.10</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::report_requested_material is used in 1/mn (<a href="1-mn.html#SP6_1">§6.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_1"></a><b>§12.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the blorb file, possibly mentioning pictures and sounds</span> <span class="cwebmacronumber">12.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">no_pictures_included</span><span class="plain"> > 1) || (</span><span class="identifier">no_sounds_included</span><span class="plain"> > 0))</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">,</span>
|
|
<span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"<li>The blorb file <b>[STORYFILE]</b> ([BLORBFILESIZE]K in size, "</span>
|
|
<span class="identifier">L</span><span class="string">"including [BLORBFILEPICTURES] figures(s) and [BLORBFILESOUNDS] "</span>
|
|
<span class="identifier">L</span><span class="string">"sound(s))</li>"</span><span class="plain">));</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>The blorb file <b>[STORYFILE]</b> ([BLORBFILESIZE]K in size)</li>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_2"></a><b>§12.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the website, mentioning how many pages it has</span> <span class="cwebmacronumber">12.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">WEBSITE_REQ</span><span class="plain">) > 0) {</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>A website (generated from the [TEMPLATE] template) of "</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">, </span><span class="string">"%d page%s"</span><span class="plain">, </span><span class="identifier">HTML_pages_created</span><span class="plain">, (</span><span class="identifier">HTML_pages_created</span><span class="plain">!=1)?</span><span class="string">"s"</span><span class="plain">:</span><span class="string">""</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</li>"</span><span class="plain">);</span>
|
|
<span class="identifier">launch_website</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_3"></a><b>§12.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the interpreter</span> <span class="cwebmacronumber">12.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">INTERPRETER_REQ</span><span class="plain">) > 0) {</span>
|
|
<span class="identifier">launch_play</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>A play-in-browser page (generated from the [INTERPRETER] interpreter)</li>"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_4"></a><b>§12.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the library card</span> <span class="cwebmacronumber">12.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">IFICTION_REQ</span><span class="plain">) > 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>The library card (stored as an iFiction record)</li>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_5"></a><b>§12.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the solution file</span> <span class="cwebmacronumber">12.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">SOLUTION_REQ</span><span class="plain">) > 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>A solution file</li>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_6"></a><b>§12.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise the source text</span> <span class="cwebmacronumber">12.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">SOURCE_REQ</span><span class="plain">) > 0) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">source_HTML_pages_created</span><span class="plain"> > 0) {</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>The source text (as plain text and as "</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">, </span><span class="string">"%d web page%s"</span><span class="plain">,</span>
|
|
<span class="identifier">source_HTML_pages_created</span><span class="plain">, (</span><span class="identifier">source_HTML_pages_created</span><span class="plain">!=1)?</span><span class="string">"s"</span><span class="plain">:</span><span class="string">""</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">")</li>"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">pcount</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">RELEASE_SOURCE_REQ</span><span class="plain">) > 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>The source text (as part of the website)</li>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_7"></a><b>§12.7. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Itemise auxiliary files in a sub-list</span> <span class="cwebmacronumber">12.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="constant">COPY_REQ</span><span class="plain">) > 0) {</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>The following additional file(s):<ul>"</span><span class="plain">);</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain"> == </span><span class="constant">COPY_REQ</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain"> = </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details2</span><span class="plain">;</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain"> >= 4096) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">filesize</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">filesize</span><span class="plain">, </span><span class="string">" (%dK)"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain">/1024);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">filesize</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">filesize</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">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain"> >= 0) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">filesize</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">filesize</span><span class="plain">, </span><span class="string">" (%d byte%s)"</span><span class="plain">,</span>
|
|
<span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain">, (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>outcome_data</span><span class="plain">!=1)?</span><span class="string">"s"</span><span class="plain">:</span><span class="string">""</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">filesize</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">filesize</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"--"</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" to subfolder "</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details3</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</li>"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</ul></li>"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_8"></a><b>§12.8. </b>These two links are handled by means of LAUNCH icons which, if clicked,
|
|
open the relevant pages not in the Inform application but using an external
|
|
web browser (e.g., Safari on most Mac OS X installations). We can only
|
|
achieve this effect using a Javascript function provided by the Inform
|
|
application, called <code class="display"><span class="extract">openUrl</span></code>.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give a centred line of links to the main web pages produced</span> <span class="cwebmacronumber">12.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<p><center>"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">launch_website</span><span class="plain">) {</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">,</span>
|
|
<span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"<a href=\</span><span class="plain">"</span><span class="string">[JAVASCRIPTPRELUDE]"</span>
|
|
<span class="string">"openUrl('file://[**MATERIALSFOLDERPATHOPEN]/Release/index.html')\</span><span class="plain">"</span><span class="string">>"</span>
|
|
<span class="string">"<img src='inform:/outcome_images/browse.png' border=0></a> home page"</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">launch_website</span><span class="plain">) && (</span><span class="identifier">launch_play</span><span class="plain">))</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" : "</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">launch_play</span><span class="plain">)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">,</span>
|
|
<span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"<a href=\</span><span class="plain">"</span><span class="string">[JAVASCRIPTPRELUDE]"</span>
|
|
<span class="identifier">L</span><span class="string">"openUrl('file://[**MATERIALSFOLDERPATHOPEN]/Release/play.html')\</span><span class="plain">"</span><span class="string">>"</span>
|
|
<span class="identifier">L</span><span class="string">"<img src='inform:/outcome_images/browse.png' border=0></a> play-in-browser page"</span><span class="plain">));</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</center></p>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_9"></a><b>§12.9. </b>Since Inblorb has no knowledge of what the Inform source text producing
|
|
this blorb was, it can't finish the status report from its own knowledge —
|
|
it must rely on details supplied to it by Inform via blurb commands. First,
|
|
Inform gives it source-text links for any "Release along with..." sentences,
|
|
which have by now become <code class="display"><span class="extract">INSTRUCTION_REQ</span></code> requests:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add in links to release instructions from Inform source text</span> <span class="cwebmacronumber">12.9</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain"> == </span><span class="constant">INSTRUCTION_REQ</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> == 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">,</span>
|
|
<span class="identifier">I</span><span class="string">"<p>The source text gives release instructions "</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" and "</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" here"</span><span class="plain">);</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".</p>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12_10"></a><b>§12.10. </b>And secondly, Inform gives it adverts for other fancy services on offer,
|
|
complete with links to the Inform documentation (which, again, Inblorb
|
|
doesn't itself know about); and these have by now become <code class="display"><span class="extract">ALTERNATIVE_REQ</span></code>
|
|
requests.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add in advertisements for features Inform would like to offer</span> <span class="cwebmacronumber">12.10</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain"> == </span><span class="constant">ALTERNATIVE_REQ</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> == 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">,</span>
|
|
<span class="identifier">I</span><span class="string">"<p>Here are some other possibilities you might want to consider:<p><ul>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"<li>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>details1</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</li>"</span><span class="plain">);</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > 0)</span>
|
|
<span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"</ul></p>"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP12">§12</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>A convenient way to see if we've received requests of any given type:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Requests::count_requests_of_type</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">) {</span>
|
|
<span class="reserved">request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">request</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">req</span><span class="plain">-</span><span class="element">>what_is_requested</span><span class="plain"> == </span><span class="identifier">t</span><span class="plain">)</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">count</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Requests::count_requests_of_type is used in <a href="#SP12_2">§12.2</a>, <a href="#SP12_3">§12.3</a>, <a href="#SP12_4">§12.4</a>, <a href="#SP12_5">§12.5</a>, <a href="#SP12_6">§12.6</a>, <a href="#SP12_7">§12.7</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><i>(This section begins Chapter 3: Other Material.)</i></li><li><a href="3-sd.html">Continue with 'Solution Deviser'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave: 631 lines from a web of 13919-->
|
|
</body>
|
|
</html>
|
|
|