mirror of
https://github.com/ganelson/inform.git
synced 2024-07-18 06:54:26 +03:00
90 lines
7.6 KiB
HTML
90 lines
7.6 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>1/im</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 '2/ifi' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">if</a></li><li><a href="index.html#2">Chapter 2: Bibliographic Data</a></li><li><b>Interactive Fiction ID</b></li></ul><p class="purpose">Computes and makes available the IFID (Interactive Fiction ID) number for an Inform-generated work of IF, in compliance with the Treaty of Babel.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The Interactive Fiction ID number for an Inform 7-compiled work is the
|
|
same as the UUID unique ID generated by the Inform 7 application.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">UUIDs are not generated here, but by the user interface application: we expect
|
|
to read them in the form of the <code class="display"><span class="extract">uuid.txt</span></code> file placed in the project bundle
|
|
by that application. After some agonising, I decided that the Treaty did not
|
|
actually oblige me to crash out if this file did not exist: but in such
|
|
cases the UUID is empty.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAX_UUID_LENGTH</span><span class="plain"> 128 </span> <span class="comment">the UUID is truncated to this if necessary</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">uuid_text</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">uuid_read</span><span class="plain"> = -1;</span>
|
|
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">PL::Bibliographic::IFID::read_uuid</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">uuid_read</span><span class="plain"> >= 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">uuid_text</span><span class="plain">;</span>
|
|
<span class="identifier">uuid_text</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">uuid_read</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">xf</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">filename_of_uuid</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">xf</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">uuid_text</span><span class="plain">; </span> <span class="comment">the UUID is the empty string if the file is missing</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (((</span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">fgetc</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">)) != </span><span class="identifier">EOF</span><span class="plain">) </span> <span class="comment">the UUID file is plain text, not Unicode</span>
|
|
<span class="plain">&& (</span><span class="identifier">uuid_read</span><span class="plain">++ < </span><span class="constant">MAX_UUID_LENGTH</span><span class="plain">-1))</span>
|
|
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">uuid_text</span><span class="plain">, </span><span class="identifier">Characters::toupper</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">));</span>
|
|
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">xf</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">uuid_text</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::Bibliographic::IFID::read_uuid is used in <a href="#SP3">§3</a>, 2/bd (<a href="2-bd.html#SP13">§13</a>), 2/ri (<a href="2-ri.html#SP11_1_1">§11.1.1</a>, <a href="2-ri.html#SP14_2_5">§14.2.5</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The IFID is written into the compiled story file, too, both in order
|
|
that it can be printed by the VERSION command and to brand the file so
|
|
that it can still be identified even if it loses touch with its iFiction
|
|
record. We store the IFID in plain text, with a "magic string" identifier
|
|
around it, in byte-accessible memory.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Bibliographic::IFID::define_UUID</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">uuid</span><span class="plain"> = </span><span class="functiontext">PL::Bibliographic::IFID::read_uuid</span><span class="plain">();</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">UUID_array_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">UUID_ARRAY_HL</span><span class="plain">);</span>
|
|
<span class="identifier">Emit::named_string_constant</span><span class="plain">(</span><span class="identifier">UUID_array_iname</span><span class="plain">, </span><span class="identifier">uuid</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Bibliographic::IFID::UUID</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">UUID_ARRAY_HL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::Bibliographic::IFID::define_UUID appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function PL::Bibliographic::IFID::UUID appears nowhere else.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><i>(This section begins Chapter 2: Bibliographic Data.)</i></li><li><a href="2-bd.html">Continue with 'Bibliographic Data'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|