mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
428 lines
46 KiB
HTML
428 lines
46 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>1/bsc</title>
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
<nav role="navigation">
|
|
<h1><a href="../webs.html">Sources</a></h1>
|
|
<ul>
|
|
<li><a href="../compiler.html">compiler</a></li>
|
|
<li><a href="../other.html"><b>other tools</b></a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul>
|
|
<h2>Other Tools</h2>
|
|
<ul>
|
|
<li><a href="../inblorb/index.html">inblorb</a></li>
|
|
<li><a href="../indoc/index.html">indoc</a></li>
|
|
<li><a href="../inpolicy/index.html">inpolicy</a></li>
|
|
<li><a href="../inrtps/index.html">inrtps</a></li>
|
|
</ul>
|
|
<h2>Foundation</h2>
|
|
<ul>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
</ul>
|
|
|
|
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of '1/mn' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">inblorb</a></li><li><a href="index.html#1">Chapter 1: Blurbs</a></li><li><b>Main</b></li></ul><p class="purpose">To parse command-line arguments, then start the Blurb interpreter, then report back to the user.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Some globals</a></li><li><a href="#SP3">§3. Main</a></li><li><a href="#SP5">§5. Opening and closing banners</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Some globals. </b>The following variables record HTML and Javascript-related points where
|
|
Inblorb needs to behave differently on the different platforms. The default
|
|
values here aren't actually correct for any platform as they stand: in the
|
|
<code class="display"><span class="extract">main</span></code> routine below, we set them as needed.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">FONT_TAG</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"size=2"</span><span class="plain">; </span> <span class="comment">contents of a <code class="display"><span class="extract"><font></span></code> tag</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">JAVASCRIPT_PRELUDE</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"javascript:window.Project."</span><span class="plain">; </span> <span class="comment">calling prefix</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">escape_openUrl</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">escape_fileUrl</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">reverse_slash_openUrl</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">reverse_slash_fileUrl</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Some global variables:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">error_count</span><span class="plain"> = 0; </span> <span class="comment">number of error messages produced so far</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbose_mode</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">; </span> <span class="comment">print diagnostics to <code class="display"><span class="extract">stdout</span></code> while running?</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">current_year_AD</span><span class="plain"> = 0; </span> <span class="comment">e.g., 2008</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">blorb_file_size</span><span class="plain"> = 0; </span> <span class="comment">size in bytes of the blorb file written</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_pictures_included</span><span class="plain"> = 0; </span> <span class="comment">number of picture resources included in the blorb</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_sounds_included</span><span class="plain"> = 0; </span> <span class="comment">number of sound resources included in the blorb</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">HTML_pages_created</span><span class="plain"> = 0; </span> <span class="comment">number of pages created in the website, if any</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">source_HTML_pages_created</span><span class="plain"> = 0; </span> <span class="comment">number of those holding source</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sound_resource_num</span><span class="plain"> = 3; </span> <span class="comment">current sound resource number we're working on</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">picture_resource_num</span><span class="plain"> = 1; </span> <span class="comment">current picture resource number we're working on</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">use_css_code_styles</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">; </span> <span class="comment">use <code class="display"><span class="extract"><span class="X"></span></code> markings when setting code</span>
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">project_folder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">pathname of I7 project folder, if any</span>
|
|
<span class="reserved">pathname</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="comment">pathname of folder for website to write, if any</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">status_template</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">filename of report HTML page template, if any</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">status_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">filename of report HTML page to write, if any</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_exists</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">; </span> <span class="comment">an image is specified as cover art</span>
|
|
<span class="reserved">int</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="comment">but it's only the default supplied by Inform</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cover_is_in_JPEG_format</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span> <span class="comment">as opposed to <code class="display"><span class="extract">PNG</span></code> format</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Main. </b>Like most programs, this one parses command-line arguments, sets things up,
|
|
reads the input and then writes the output.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">That's a little over-simplified, though, because it also produces auxiliary
|
|
outputs along the way, in the course of parsing the blurb file. The blorb
|
|
file is only the main output — there might also be a web page and a solution
|
|
file, for instance.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">blurb_filename</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">blorb_filename</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="functiontext">main</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">argv</span><span class="plain">[]) {</span>
|
|
<span class="functiontext">Foundation::start</span><span class="plain">();</span>
|
|
<span class="functiontext">Basics::register_mreasons</span><span class="plain">();</span>
|
|
<span class="identifier">blurb_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release.blurb"</span><span class="plain">);</span>
|
|
<span class="identifier">blorb_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"story.zblorb"</span><span class="plain">);</span>
|
|
|
|
<<span class="cwebmacro">Make the default settings</span> <span class="cwebmacronumber">3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Parse command-line arguments</span> <span class="cwebmacronumber">3.3</span>><span class="plain">;</span>
|
|
|
|
<span class="functiontext">Placeholders::initialise</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">blurb_filename</span><span class="plain">) {</span>
|
|
<span class="functiontext">Main::print_banner</span><span class="plain">();</span>
|
|
<span class="functiontext">Parser::parse_blurb_file</span><span class="plain">(</span><span class="identifier">blurb_filename</span><span class="plain">);</span>
|
|
<span class="functiontext">Writer::write_blorb_file</span><span class="plain">(</span><span class="identifier">blorb_filename</span><span class="plain">);</span>
|
|
<span class="functiontext">Requests::create_requested_material</span><span class="plain">();</span>
|
|
<span class="functiontext">Main::print_report</span><span class="plain">();</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="functiontext">Foundation::end</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">error_count</span><span class="plain"> > 0) </span><span class="reserved">return</span><span class="plain"> 1;</span>
|
|
<span class="reserved">return</span><span class="plain"> 0;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function main is used in 3/rls (<a href="3-rls.html#SP12">§12</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Make the default settings</span> <span class="cwebmacronumber">3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">release_folder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">project_folder</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">status_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">status_template</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="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_2"></a><b>§3.2. </b>We use Foundation's standard command-line routines.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">enum</span> <span class="constant">VERBOSE_CLSW</span>
|
|
<span class="definitionkeyword">enum</span> <span class="constant">PROJECT_CLSW</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP3_3"></a><b>§3.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Parse command-line arguments</span> <span class="cwebmacronumber">3.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Read the command-line switches</span> <span class="cwebmacronumber">3.3.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Set platform-dependent HTML and Javascript variables</span> <span class="cwebmacronumber">3.3.3</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">"! Blurb in: <%f>\</span><span class="plain">n</span><span class="string">! Blorb out: <%f>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">blurb_filename</span><span class="plain">, </span><span class="identifier">blorb_filename</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_3_1"></a><b>§3.3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Read the command-line switches</span> <span class="cwebmacronumber">3.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">CommandLine::declare_heading</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"inblorb: a releaser and packager for IF story files\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span>
|
|
<span class="identifier">L</span><span class="string">"usage: inblorb [-options] [blurbfile [blorbfile]]\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
|
|
<span class="functiontext">CommandLine::declare_boolean_switch</span><span class="plain">(</span><span class="constant">VERBOSE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"verbose"</span><span class="plain">, 1,</span>
|
|
<span class="identifier">L</span><span class="string">"print running notes on what's happening"</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
<span class="functiontext">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PROJECT_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"project"</span><span class="plain">, 2,</span>
|
|
<span class="identifier">L</span><span class="string">"work within Inform project X"</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bare_words</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">CommandLine::read</span><span class="plain">(</span><span class="identifier">argc</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">, &</span><span class="identifier">bare_words</span><span class="plain">, &</span><span class="functiontext">Main::switch</span><span class="plain">, &</span><span class="functiontext">Main::bareword</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project_folder</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bare_words</span><span class="plain"> > 0) </span><span class="functiontext">Errors::fatal</span><span class="plain">(</span><span class="string">"if -project is used, no other filenames should be given"</span><span class="plain">);</span>
|
|
<span class="identifier">blurb_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">"Release.blurb"</span><span class="plain">);</span>
|
|
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">Build</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">"Build"</span><span class="plain">);</span>
|
|
<span class="identifier">blorb_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">Build</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"output.zblorb"</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">bare_words</span><span class="plain"> == 0) </span><span class="identifier">blurb_filename</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">This code is used in <a href="#SP3_3">§3.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_3_2"></a><b>§3.3.2. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::switch</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">switch</span><span class="plain"> (</span><span class="identifier">id</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VERBOSE_CLSW</span><span class="plain">: </span><span class="identifier">verbose_mode</span><span class="plain"> = </span><span class="identifier">val</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">PROJECT_CLSW</span><span class="plain">: </span><span class="identifier">project_folder</span><span class="plain"> = </span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented switch"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::bareword</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</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">int</span><span class="plain"> *</span><span class="identifier">bare_words</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
|
<span class="plain">(*</span><span class="identifier">bare_words</span><span class="plain">)++;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (*</span><span class="identifier">bare_words</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 1: </span><span class="identifier">blurb_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 2: </span><span class="identifier">blorb_filename</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">default</span><span class="plain">: </span><span class="functiontext">Errors::fatal</span><span class="plain">(</span><span class="string">"bad command line usage (see -help)"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Main::switch is used in <a href="#SP3_3_1">§3.3.1</a>.</p>
|
|
|
|
<p class="endnote">The function Main::bareword is used in <a href="#SP3_3_1">§3.3.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_3_3"></a><b>§3.3.3. </b>Now let's set the platform-dependent variables.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Inblorb generates quite a variety of HTML, for instance to create websites,
|
|
but the tricky points below affect only one special page not browsed by
|
|
the general public: the results page usually called <code class="display"><span class="extract">StatusCblorb.html</span></code>
|
|
(though this depends on how the <code class="display"><span class="extract">status</span></code> command is used in the blurb).
|
|
The results page is intended only for viewing within the Inform user
|
|
interface, and it expects to have two Javascript functions available,
|
|
<code class="display"><span class="extract">openUrl</span></code> and <code class="display"><span class="extract">fileUrl</span></code>. Because the object structure has needed to be
|
|
different for the Windows and OS X user interface implementations of
|
|
Javascript, we abstract the prefix for these function calls into the
|
|
<code class="display"><span class="extract">JAVASCRIPT_PRELUDE</span></code>. Thus
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><a href="***openUrl">...</a></span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph">causes a link, when clicked, to call the <code class="display"><span class="extract">openUrl</span></code> function, where <code class="display"><span class="extract">***</span></code>
|
|
is the prelude; similarly for <code class="display"><span class="extract">fileUrl</span></code>. The first opens a URL in the local
|
|
operating system's default web browser, the second opens a file (identified
|
|
by a <code class="display"><span class="extract">file:...</span></code> URL) in the local operating system. These two URLs may
|
|
need treatment to handle special characters:
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<ul class="items"><li>(a) "escaping", where spaces in the URL are escaped to <code class="display"><span class="extract">%2520</span></code>, which
|
|
within a Javascript string literal produces <code class="display"><span class="extract">%20</span></code>, the standard way to
|
|
represent a space in a web URL;
|
|
</li></ul>
|
|
<ul class="items"><li>(b) "reversing slashes", where backslashes are converted to forward
|
|
slashes — useful if the separation character is a backslash, as on Windows,
|
|
since backslashes are escape characters in Javascript literals.
|
|
</li></ul>
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Set platform-dependent HTML and Javascript variables</span> <span class="cwebmacronumber">3.3.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="constant">WINDOWS_JAVASCRIPT</span>
|
|
<span class="identifier">FONT_TAG</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"face=\</span><span class="plain">"</span><span class="string">lucida grande,geneva,arial,tahoma,verdana,helvetica,helv\</span><span class="plain">"</span><span class="string"> size=2"</span><span class="plain">;</span>
|
|
<span class="identifier">escape_openUrl</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span> <span class="comment">we want <code class="display"><span class="extract">openUrl</span></code> to escape, and <code class="display"><span class="extract">fileUrl</span></code> not to</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="constant">WINDOWS_JAVASCRIPT</span>
|
|
<span class="identifier">JAVASCRIPT_PRELUDE</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"javascript:external.Project."</span><span class="plain">;</span>
|
|
<span class="identifier">reverse_slash_openUrl</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="identifier">reverse_slash_fileUrl</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3_3">§3.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The placeholder variable [YEAR] is initialised to the year in which Inblorb
|
|
runs, according to the host operating system, at least. (It can of course then
|
|
be overridden by commands in the blurb file, and Inform always does this in
|
|
the blurb files it writes. But it leaves [DATESTAMP] and [TIMESTAMP] alone.)
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::initialise_time_variables</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">datestamp</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">infocom</span><span class="plain">);</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">timestamp</span><span class="plain">);</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">weekdays</span><span class="plain">[] = { </span><span class="string">"Sunday"</span><span class="plain">, </span><span class="string">"Monday"</span><span class="plain">, </span><span class="string">"Tuesday"</span><span class="plain">, </span><span class="string">"Wednesday"</span><span class="plain">,</span>
|
|
<span class="string">"Thursday"</span><span class="plain">, </span><span class="string">"Friday"</span><span class="plain">, </span><span class="string">"Saturday"</span><span class="plain"> };</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">months</span><span class="plain">[] = { </span><span class="string">"January"</span><span class="plain">, </span><span class="string">"February"</span><span class="plain">, </span><span class="string">"March"</span><span class="plain">, </span><span class="string">"April"</span><span class="plain">, </span><span class="string">"May"</span><span class="plain">, </span><span class="string">"June"</span><span class="plain">,</span>
|
|
<span class="string">"July"</span><span class="plain">, </span><span class="string">"August"</span><span class="plain">, </span><span class="string">"September"</span><span class="plain">, </span><span class="string">"October"</span><span class="plain">, </span><span class="string">"November"</span><span class="plain">, </span><span class="string">"December"</span><span class="plain"> };</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"YEAR"</span><span class="plain">, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">+1900);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">datestamp</span><span class="plain">, </span><span class="string">"%s %d %s %d"</span><span class="plain">, </span><span class="identifier">weekdays</span><span class="plain">[</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_wday</span><span class="plain">],</span>
|
|
<span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">, </span><span class="identifier">months</span><span class="plain">[</span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain">], </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">+1900);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">infocom</span><span class="plain">, </span><span class="string">"%02d%02d%02d"</span><span class="plain">,</span>
|
|
<span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_year</span><span class="plain">-100, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mon</span><span class="plain"> + 1, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_mday</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">timestamp</span><span class="plain">, </span><span class="string">"%02d:%02d.%02d"</span><span class="plain">, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_hour</span><span class="plain">,</span>
|
|
<span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_min</span><span class="plain">, </span><span class="identifier">the_present</span><span class="plain">-></span><span class="identifier">tm_sec</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"DATESTAMP"</span><span class="plain">, </span><span class="identifier">datestamp</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">"INFOCOMDATESTAMP"</span><span class="plain">, </span><span class="identifier">infocom</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">"TIMESTAMP"</span><span class="plain">, </span><span class="identifier">timestamp</span><span class="plain">, 0);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">datestamp</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">infocom</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">timestamp</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Main::initialise_time_variables is used in 3/plc (<a href="3-plc.html#SP2">§2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Opening and closing banners. </b>Note that Inblorb customarily prints informational messages with an initial
|
|
<code class="display"><span class="extract">!</span></code>, so that the piped output from Inblorb could be used as an <code class="display"><span class="extract">Include</span></code>
|
|
file in I6 code, where <code class="display"><span class="extract">!</span></code> is the comment character; that isn't in fact how
|
|
I7 uses Inblorb, but it's traditional for blorbing programs to do this.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::print_banner</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ver</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"inblorb [[Build Number]]"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fix_time_mode</span><span class="plain">) </span><span class="identifier">ver</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"inblorb 99.99"</span><span class="plain">;</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! %S [executing on %S at %S]\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">ver</span><span class="plain">, </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"DATESTAMP"</span><span class="plain">), </span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TIMESTAMP"</span><span class="plain">));</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! The blorb spell (safely protect a small object "</span><span class="plain">);</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"as though in a strong box).\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Main::print_banner is used in <a href="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>The concluding banner is much smaller — empty if all went well, a single
|
|
comment line if not. But we also generate the status report page (if that has
|
|
been requested) — a single HTML file generated from a template by expanding
|
|
placeholders in the template. All of the meat of the report is in those
|
|
placeholders, of course; the template contains only some fancy formatting.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::print_report</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">error_count</span><span class="plain"> > 0) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Completed: %d error(s)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">error_count</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Set a whole pile of placeholders which will be needed to generate the status page</span> <span class="cwebmacronumber">6.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">status_template</span><span class="plain">) </span><span class="functiontext">Websites::web_copy</span><span class="plain">(</span><span class="identifier">status_template</span><span class="plain">, </span><span class="identifier">status_file</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Main::print_report is used in <a href="#SP3">§3</a>, 1/be (<a href="1-be.html#SP2">§2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>If it isn't apparent what these placeholders do, take a look at
|
|
the template file called <code class="display"><span class="extract">CblorbModel.html</span></code> in the Inform application —
|
|
that's where they're used.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Set a whole pile of placeholders which will be needed to generate the status page</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">error_count</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">"CBLORBSTATUS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Failed"</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">"CBLORBSTATUSIMAGE"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inform:/outcome_images/cblorb_failed.png"</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">"CBLORBSTATUSTEXT"</span><span class="plain">,</span>
|
|
<span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Inform translated your source text as usual, to manufacture a 'story "</span>
|
|
<span class="identifier">L</span><span class="string">"file': all of that worked fine. But the Release then went wrong, for "</span>
|
|
<span class="identifier">L</span><span class="string">"the following reason:<p><ul>[CBLORBERRORS]</ul>"</span><span class="plain">), 0</span>
|
|
<span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"CBLORBERRORS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"No problems occurred"</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">"CBLORBSTATUS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Succeeded"</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">"CBLORBSTATUSIMAGE"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"file://[SMALLCOVER]"</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">"CBLORBSTATUSTEXT"</span><span class="plain">,</span>
|
|
<span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"All went well. I've put the released material into the 'Release' subfolder "</span>
|
|
<span class="identifier">L</span><span class="string">"of the Materials folder for the project: you can take a look with "</span>
|
|
<span class="identifier">L</span><span class="string">"the menu option <b>Release &gt; Open Materials Folder</b> or by clicking "</span>
|
|
<span class="identifier">L</span><span class="string">"the blue folders above.<p>"</span>
|
|
<span class="identifier">L</span><span class="string">"Releases can range in size from a single blorb file to a medium-sized website. "</span>
|
|
<span class="identifier">L</span><span class="string">"Here's what we currently have:<p>"</span><span class="plain">), 0</span>
|
|
<span class="plain">);</span>
|
|
<span class="functiontext">Requests::report_requested_material</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"CBLORBSTATUSTEXT"</span><span class="plain">);</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">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILESIZE"</span><span class="plain">, </span><span class="identifier">blorb_file_size</span><span class="plain">/1024);</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILEPICTURES"</span><span class="plain">, </span><span class="identifier">no_pictures_included</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILESOUNDS"</span><span class="plain">, </span><span class="identifier">no_sounds_included</span><span class="plain">);</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Completed: wrote blorb file with "</span><span class="plain">);</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%d picture(s), %d sound(s)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">no_pictures_included</span><span class="plain">, </span><span class="identifier">no_sounds_included</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILESIZE"</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILEPICTURES"</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLORBFILESOUNDS"</span><span class="plain">, 0);</span>
|
|
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Completed: no blorb output requested\</span><span class="plain">n</span><span class="string">"</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>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="1-bsc.html">Back to 'Basics'</a></li><li><a href="1-be.html">Continue with 'Blorb Errors'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|