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-hl.html

220 lines
40 KiB
HTML
Raw Normal View History

2019-04-12 16:47:00 +03:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>27/pc</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 '27/hl' generated by 7-->
<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>Hierarchy Locations</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b></p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">named_resource_location</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">access_number</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">access_name</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">function_package_name</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">datum_package_name</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">package</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exotic_package_identifier</span><span class="plain">;</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">equates_to_iname</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">named_resource_location</span><span class="plain">;</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::new</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = -1;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain"> = -1;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_in</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="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">P</span><span class="plain">) {</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::new</span><span class="plain">();</span>
2019-04-12 16:47:00 +03:00
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_in_exotic</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">) {</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::new</span><span class="plain">();</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain"> = </span><span class="identifier">x</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_as</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">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="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::new</span><span class="plain">();</span>
2019-04-12 16:47:00 +03:00
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_function</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">call_name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">call_name</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_function_in_exotic</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">call_name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">) {</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">call_name</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain"> = </span><span class="identifier">x</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_datum</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">datum_name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">datum_name</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::make_datum_in_exotic</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">datum_name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">) {</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">datum_name</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain"> = </span><span class="identifier">x</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrls_indexed_by_id</span><span class="plain">[</span><span class="constant">MAX_HL</span><span class="plain">];</span>
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">nrls_indexed_by_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nrls_created</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HierarchyLocations::create_nrls</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">nrls_created</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="constant">MAX_HL</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">nrls_indexed_by_id</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nrls_indexed_by_name</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Hierarchy::establish</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrls_created</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">HierarchyLocations::create_nrls</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> &gt;= 0) </span><span class="identifier">nrls_indexed_by_id</span><span class="plain">[</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain">] = </span><span class="identifier">nrl</span><span class="plain">;</span>
<span class="identifier">Dictionaries::create</span><span class="plain">(</span><span class="identifier">nrls_indexed_by_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">);</span>
<span class="identifier">Dictionaries::write_value</span><span class="plain">(</span><span class="identifier">nrls_indexed_by_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">nrl</span><span class="plain">);</span>
<span class="plain">}</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::find</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">if</span><span class="plain"> (</span><span class="identifier">nrls_created</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">HierarchyLocations::create_nrls</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">id</span><span class="plain"> &lt; 0) || (</span><span class="identifier">id</span><span class="plain"> &gt;= </span><span class="constant">MAX_HL</span><span class="plain">) || (</span><span class="identifier">nrls_indexed_by_id</span><span class="plain">[</span><span class="identifier">id</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 nrl ID"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">HierarchyLocations::nrl_to_iname</span><span class="plain">(</span><span class="identifier">nrls_indexed_by_id</span><span class="plain">[</span><span class="identifier">id</span><span class="plain">]);</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::find_by_name</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">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">) == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad nrl name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrls_created</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">HierarchyLocations::create_nrls</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Dictionaries::find</span><span class="plain">(</span><span class="identifier">nrls_indexed_by_name</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">HierarchyLocations::nrl_to_iname</span><span class="plain">(</span>
<span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain"> *)</span>
<span class="identifier">Dictionaries::read_value</span><span class="plain">(</span><span class="identifier">nrls_indexed_by_name</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::function</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">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">trans</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">Packaging::function</span><span class="plain">(</span><span class="functiontext">InterNames::one_off</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">R</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trans</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">trans</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="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::nrl_to_iname</span><span class="plain">(</span><span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain"> &gt;= 0)</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="functiontext">Hierarchy::exotic_package</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;exotic_package_identifier</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"package can't be found'"</span><span class="plain">);</span>
<span class="plain">}</span>
2019-04-12 16:47:00 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> == </span><span class="functiontext">Packaging::request_template</span><span class="plain">()) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="functiontext">Packaging::request_template</span><span class="plain">());</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_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">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</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">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">) &gt; 0) {</span>
2019-04-12 16:47:00 +03:00
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function_text</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">),</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">,</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain">) &gt; 0) {</span>
2019-04-12 16:47:00 +03:00
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Packaging::datum_text</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">),</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">,</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">) &amp;&amp; (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) {</span>
2019-04-12 16:47:00 +03:00
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::post_process</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package</span><span class="plain"> = </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain">);</span>
2019-04-12 16:47:00 +03:00
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HierarchyLocations::new appears nowhere else.</p>
<p class="endnote">The function HierarchyLocations::make_in is used in 27/hr (<a href="27-hr.html#SP2_2">&#167;2.2</a>, <a href="27-hr.html#SP2_4">&#167;2.4</a>, <a href="27-hr.html#SP2_6">&#167;2.6</a>, <a href="27-hr.html#SP2_8">&#167;2.8</a>, <a href="27-hr.html#SP2_10">&#167;2.10</a>, <a href="27-hr.html#SP2_12">&#167;2.12</a>, <a href="27-hr.html#SP2_14">&#167;2.14</a>, <a href="27-hr.html#SP2_16">&#167;2.16</a>, <a href="27-hr.html#SP2_18">&#167;2.18</a>, <a href="27-hr.html#SP2_20">&#167;2.20</a>, <a href="27-hr.html#SP2_21">&#167;2.21</a>, <a href="27-hr.html#SP2_23">&#167;2.23</a>, <a href="27-hr.html#SP2_25">&#167;2.25</a>, <a href="27-hr.html#SP2_29">&#167;2.29</a>, <a href="27-hr.html#SP2_31">&#167;2.31</a>, <a href="27-hr.html#SP2_33">&#167;2.33</a>, <a href="27-hr.html#SP2_35">&#167;2.35</a>, <a href="27-hr.html#SP2_37">&#167;2.37</a>, <a href="27-hr.html#SP2_43">&#167;2.43</a>, <a href="27-hr.html#SP6">&#167;6</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::make_in_exotic is used in 27/hr (<a href="27-hr.html#SP2_41">&#167;2.41</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::make_as is used in 27/hr (<a href="27-hr.html#SP6">&#167;6</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::make_function is used in 27/hr (<a href="27-hr.html#SP2_10">&#167;2.10</a>, <a href="27-hr.html#SP2_14">&#167;2.14</a>, <a href="27-hr.html#SP2_18">&#167;2.18</a>, <a href="27-hr.html#SP2_21">&#167;2.21</a>, <a href="27-hr.html#SP2_25">&#167;2.25</a>, <a href="27-hr.html#SP2_27">&#167;2.27</a>, <a href="27-hr.html#SP2_29">&#167;2.29</a>, <a href="27-hr.html#SP2_31">&#167;2.31</a>, <a href="27-hr.html#SP2_33">&#167;2.33</a>, <a href="27-hr.html#SP2_35">&#167;2.35</a>, <a href="27-hr.html#SP2_39">&#167;2.39</a>).</p>
<p class="endnote">The function HierarchyLocations::make_function_in_exotic is used in 27/hr (<a href="27-hr.html#SP2_41">&#167;2.41</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::make_datum is used in 27/hr (<a href="27-hr.html#SP2_37">&#167;2.37</a>).</p>
<p class="endnote">The function HierarchyLocations::make_datum_in_exotic appears nowhere else.</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::create_nrls appears nowhere else.</p>
<p class="endnote">The function HierarchyLocations::index appears nowhere else.</p>
<p class="endnote">The function HierarchyLocations::find is used in 27/hr (<a href="27-hr.html#SP6">&#167;6</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::find_by_name is used in 27/hr (<a href="27-hr.html#SP6">&#167;6</a>).</p>
2019-04-12 16:47:00 +03:00
<p class="endnote">The function HierarchyLocations::function appears nowhere else.</p>
<p class="endnote">The function HierarchyLocations::nrl_to_iname appears nowhere else.</p>
<p class="endnote">The structure named_resource_location is private to this section.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="27-pc.html">Back to 'Packaging'</a></li><li><a href="27-hr.html">Continue with 'Hierarchy'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>