1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 10:04:21 +03:00
inform7/docs/core-module/27-in.html

443 lines
63 KiB
HTML
Raw Normal View History

2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2019-04-17 20:19:03 +03:00
<title>27/pc</title>
2019-03-17 14:40:57 +02:00
<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 '27/in' generated by 7-->
2019-04-18 03:53:27 +03:00
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#27">Chapter 27: Bridge to Inter Module</a></li><li><b>Inter Namespace</b></li></ul><p class="purpose">To manage identifiers, which have names and positions in the Inter hierarchy.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Families</a></li><li><a href="#SP2">&#167;2. Printing inames</a></li><li><a href="#SP4">&#167;4. Making new inames</a></li><li><a href="#SP8">&#167;8. Conversion of inames to symbols</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Families. </b>Each inter name comes from a "generator". Some are one-shot, and produce just
one name before being discarded; others produce a numbered sequence of names
in a given pattern, counting upwards from 1 (<code class="display"><span class="extract">example_1</span></code>, <code class="display"><span class="extract">example_2</span></code>, ...);
and others still derive new names from existing ones (for example, turning
<code class="display"><span class="extract">fish</span></code> amd <code class="display"><span class="extract">rumour</span></code> into <code class="display"><span class="extract">fishmonger</span></code> and <code class="display"><span class="extract">rumourmonger</span></code>).
</p>
2019-03-17 14:40:57 +02:00
<pre class="definitions">
2019-04-18 03:53:27 +03:00
<span class="definitionkeyword">enum</span> <span class="constant">UNIQUE_INGEN</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">MULTIPLE_INGEN</span>
<span class="definitionkeyword">enum</span> <span class="constant">DERIVED_INGEN</span>
2019-03-17 14:40:57 +02:00
</pre>
<pre class="display">
2019-04-18 03:53:27 +03:00
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_generator</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ingen</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name_stem</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_generated</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">MULTIPLE_INGEN</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_prefix</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">DERIVED_INGEN</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_suffix</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">DERIVED_INGEN</span></code></span>
<span class="plain">} </span><span class="reserved">inter_name_generator</span><span class="plain">;</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">UNIQUE_INGEN</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;derived_prefix</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">F</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="functiontext">InterNames::multiple_use_generator</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prefix</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stem</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">suffix</span><span class="plain">) {</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain"> = </span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">stem</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">DERIVED_INGEN</span><span class="plain">;</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">prefix</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">Str::len</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">DERIVED_INGEN</span><span class="plain">;</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">MULTIPLE_INGEN</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">gen</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::single_use_generator is used in <a href="#SP5">&#167;5</a>.</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="endnote">The function InterNames::multiple_use_generator is used in 27/tr (<a href="27-tr.html#SP1">&#167;1</a>).</p>
<p class="endnote">The structure inter_name_generator is private to this section.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Printing inames. </b>Inter names are stored not in textual form, but in terms of what would be
required to generate that text. (The memo field, which in principle allows
any text to be stored, is used only for a small proportion of inames.)
</p>
<pre class="display">
2019-03-17 14:40:57 +02:00
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> {</span>
2019-04-18 11:51:47 +03:00
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">generated_by</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unique_number</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">;</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">location_in_hierarchy</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">memo</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">derived_from</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">inter_name</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
2019-04-18 11:51:47 +03:00
<p class="endnote">The structure inter_name is private to this section.</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>This implements the <code class="display"><span class="extract">%n</span></code> escape, which prints an iname:
</p>
2019-03-17 14:40:57 +02:00
<pre class="display">
2019-04-18 03:53:27 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format_string</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vI</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = (</span><span class="reserved">inter_name</span><span class="plain"> *) </span><span class="identifier">vI</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;no-inter-name&gt;"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
2019-04-18 11:51:47 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad inter_name"</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain">) {</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DERIVED_INGEN</span><span class="plain">:</span>
2019-04-18 11:51:47 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">format_string</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain">);</span>
2019-04-18 11:51:47 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">UNIQUE_INGEN</span><span class="plain">:</span>
2019-04-18 11:51:47 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MULTIPLE_INGEN</span><span class="plain">:</span>
2019-04-18 11:51:47 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> &gt;= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</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">"unknown ingen"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"_%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
</pre>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"></p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="endnote">The function InterNames::writer is used in 1/cm (<a href="1-cm.html#SP6_3">&#167;6.3</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Making new inames. </b>We can now make a new iname, which is easy unless there's a memo to attach.
For example, attaching the wording "printing the name of a dark room" to
an iname which would otherwise just be <code class="display"><span class="extract">V12</span></code> produces <code class="display"><span class="extract">V12_printing_the_name_of_a_da</span></code>.
Memos exist almost largely to make the Inter code easier for human eyes to read,
as in this case, but sometimes, as with kind names like <code class="display"><span class="extract">K2_thing</span></code>, they're
needed because template or explicit I6 inclusion code makes references to them.
</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph">Although most inter names are eventually used to create symbols in the
Inter hierarchy's symbols table, this does not happen immediately, and
for some inames it never will.
</p>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">);</span>
2019-04-18 11:51:47 +03:00
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 0;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> = </span><span class="identifier">R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Fill the memo with up to 28 characters of text from the given wording</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Ensure that the name, as now extended by the memo, is a legal Inter identifier</span> <span class="cwebmacronumber">4.2</span>&gt;<span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
</pre>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"></p>
2019-04-17 20:19:03 +03:00
2019-04-18 03:53:27 +03:00
<p class="endnote">The function InterNames::new is used in <a href="#SP5">&#167;5</a>, <a href="#SP6">&#167;6</a>.</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Fill the memo with up to 28 characters of text from the given wording</span> <span class="cwebmacronumber">4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="comment">identifier is at this point 32 chars or fewer in length: add at most 30 more</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; 0) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">" "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">)) &gt; 30)</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"etc"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 32) </span><span class="reserved">break</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, 28); </span> <span class="comment">it was at worst 62 chars in size, but is now truncated to 28</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_2"></a><b>&#167;4.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Ensure that the name, as now extended by the memo, is a legal Inter identifier</span> <span class="cwebmacronumber">4.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Identifiers::purify</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> &gt; 28) </span><span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) - (</span><span class="identifier">L</span><span class="plain"> - 28));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>That creation function should be called only by these, which in turn must
be called only from within the current chapter. First, the single-shot cases,
where the caller wants a single name with fixed wording (but possibly with
a memo to attach):
</p>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">), </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">);</span>
2019-04-17 20:19:03 +03:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::explicitly_named_with_memo is used in 27/hl (<a href="27-hl.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function InterNames::explicitly_named is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>, <a href="27-hl.html#SP2">&#167;2</a>), 27/pc (<a href="27-pc.html#SP7">&#167;7</a>, <a href="27-pc.html#SP7_1">&#167;7.1</a>, <a href="27-pc.html#SP8">&#167;8</a>).</p>
2019-04-17 20:19:03 +03:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Second, the generated or derived cases:
</p>
<pre class="display">
2019-04-18 11:51:47 +03:00
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">G</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no generator"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">G</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> == </span><span class="constant">UNIQUE_INGEN</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a generator name"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="identifier">G</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">G</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> != </span><span class="constant">DERIVED_INGEN</span><span class="plain">) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = ++</span><span class="identifier">G</span><span class="plain">-</span><span class="element">&gt;no_generated</span><span class="plain">;</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
2019-04-17 20:19:03 +03:00
<span class="plain">}</span>
2019-04-18 11:51:47 +03:00
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::generated</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="identifier">G</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fix</span><span class="plain"> != -1) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = </span><span class="identifier">fix</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 11:51:47 +03:00
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::derived</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">G</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> != </span><span class="constant">DERIVED_INGEN</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a derived generator"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="identifier">G</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
</pre>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::multiple appears nowhere else.</p>
<p class="endnote">The function InterNames::generated is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::derived is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
2019-04-18 11:51:47 +03:00
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
2019-04-18 03:53:27 +03:00
<pre class="display">
2019-04-18 11:51:47 +03:00
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">InterNames::location</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</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">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">;</span>
2019-04-18 03:53:27 +03:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2019-04-18 11:51:47 +03:00
<p class="endnote">The function InterNames::location is used in 27/pc (<a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP5">&#167;5</a>, <a href="27-pc.html#SP6">&#167;6</a>, <a href="27-pc.html#SP8">&#167;8</a>).</p>
2019-04-18 03:53:27 +03:00
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Conversion of inames to symbols. </b>The purpose of inames is not quite to represent identifier names occurring in
given packages inside the Inter hierarchy: it would be more accurate to say
that they represent potential identifiers, which may or may not be used.
At some point they will probably (but not certainly) undergo "conversion",
when they are matched up with actual symbols in the symbols tables of the
2019-04-18 11:51:47 +03:00
given packages.
2019-04-18 03:53:27 +03:00
</p>
<p class="inwebparagraph">Conversion is done on-demand, and thus left as late as possible. It happens
2019-04-18 11:51:47 +03:00
automatically in one of the following two functions:
2019-04-18 03:53:27 +03:00
</p>
<pre class="display">
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Packaging::scope</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::new_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 11:51:47 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::externalise_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">ext_iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"iname already converted"</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::extern</span><span class="plain">(</span><span class="identifier">ext_iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);;</span>
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">new_text</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::set_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">new_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::get_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::to_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</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">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">)-&gt;</span><span class="identifier">symbol_name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::define_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::destroy_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="plain">}</span>
2019-04-18 03:53:27 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</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">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Bang"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-04-17 20:19:03 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::set_flag</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">f</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::clear_flag</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::clear_flag</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">f</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::annotate_i</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::annotate_t</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_t</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::annotate_w</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_w</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterNames::read_annotation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::holster</span><span class="plain">(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Holsters::data_acceptable</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
<span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Emit::IRS</span><span class="plain">();</span>
<span class="functiontext">InterNames::to_ival</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">current_package</span><span class="plain">, &amp;</span><span class="identifier">v1</span><span class="plain">, &amp;</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">Holsters::holster_pair</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::to_ival</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val2</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) { </span><span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = 0;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterNames::defined</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</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">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
2019-04-17 20:19:03 +03:00
</pre>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="inwebparagraph"></p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>, <a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-18 11:51:47 +03:00
<p class="endnote">The function InterNames::externalise_symbol is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::change_translation is used in 5/un (<a href="5-un.html#SP1">&#167;1</a>), 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP21">&#167;21</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>), 27/pc (<a href="27-pc.html#SP8">&#167;8</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">&#167;22.1</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-18 03:53:27 +03:00
<p class="endnote">The function InterNames::to_text is used in 15/vp (<a href="15-vp.html#SP3">&#167;3</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::define_symbol is used in 27/ei (<a href="27-ei.html#SP4">&#167;4</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::destroy_symbol appears nowhere else.</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::set_flag is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::clear_flag is used in 5/un (<a href="5-un.html#SP1">&#167;1</a>).</p>
2019-03-17 14:40:57 +02:00
2019-04-17 20:19:03 +03:00
<p class="endnote">The function InterNames::annotate_i is used in 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/epv (<a href="15-epv.html#SP1">&#167;1</a>, <a href="15-epv.html#SP1_1_1">&#167;1.1.1</a>), 17/tl (<a href="17-tl.html#SP7">&#167;7</a>).</p>
<p class="endnote">The function InterNames::annotate_t appears nowhere else.</p>
<p class="endnote">The function InterNames::annotate_w is used in 15/pr (<a href="15-pr.html#SP27">&#167;27</a>).</p>
<p class="endnote">The function InterNames::read_annotation appears nowhere else.</p>
<p class="endnote">The function InterNames::holster is used in 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_2">&#167;24.2</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>, <a href="14-rv.html#SP24_3_1">&#167;24.3.1</a>), 17/tl (<a href="17-tl.html#SP10">&#167;10</a>, <a href="17-tl.html#SP10_2_1">&#167;10.2.1</a>, <a href="17-tl.html#SP16">&#167;16</a>), 17/ts (<a href="17-ts.html#SP8">&#167;8</a>, <a href="17-ts.html#SP8_1">&#167;8.1</a>), 17/rs (<a href="17-rs.html#SP12">&#167;12</a>).</p>
<p class="endnote">The function InterNames::to_ival is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 17/tl (<a href="17-tl.html#SP13">&#167;13</a>).</p>
<p class="endnote">The function InterNames::defined is used in 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>).</p>
2019-03-17 14:40:57 +02:00
<hr class="tocbar">
2019-04-17 20:19:03 +03:00
<ul class="toc"><li><a href="27-pc.html">Back to 'Packaging'</a></li><li><a href="27-is.html">Continue with 'Inter Schemas'</a></li></ul><hr class="tocbar">
<!--End of weave-->
2019-03-17 14:40:57 +02:00
</body>
</html>