mirror of
https://github.com/ganelson/inform.git
synced 2024-07-06 00:54:21 +03:00
Completed C example 6
This commit is contained in:
parent
f92d8c50ac
commit
f7e6fff133
|
@ -533,8 +533,34 @@ the sender function to <span class="extract"><span class="ConsoleText-extract-sy
|
|||
the point where a command would have been requested. The C function can then
|
||||
trigger whatever actions it wants, in the world model, without the need to
|
||||
feed a textual command back to I7 which would then be parsed into actions.
|
||||
In this example we do just that, and also examine and modify the data belonging
|
||||
to the I7 program from C.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The story, such as it is:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">Jarn</span><span class="plain-syntax"> </span><span class="identifier-syntax">Mound</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax">.</span>
|
||||
|
||||
<span class="identifier-syntax">Age</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">ages</span><span class="plain-syntax"> </span><span class="identifier-syntax">are</span><span class="plain-syntax"> </span><span class="identifier-syntax">modern</span><span class="plain-syntax">, </span><span class="identifier-syntax">antique</span><span class="plain-syntax"> </span><span class="identifier-syntax">and</span><span class="plain-syntax"> </span><span class="identifier-syntax">ancient</span><span class="plain-syntax">. </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span>
|
||||
<span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">age</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">age</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">thing</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">usually</span><span class="plain-syntax"> </span><span class="identifier-syntax">modern</span><span class="plain-syntax">.</span>
|
||||
|
||||
<span class="identifier-syntax">In</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">Mound</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">Linear</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">tablet</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">tablet</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">ancient</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">wearing</span>
|
||||
<span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">watch</span><span class="plain-syntax">.</span>
|
||||
|
||||
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">that</span><span class="plain-syntax"> </span><span class="identifier-syntax">varies</span><span class="plain-syntax">. </span><span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="string-syntax">"4 oxen, 1 broken tripod table."</span>
|
||||
|
||||
<span class="identifier-syntax">Instead</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">examining</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">watch</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"It is approximately [time of day]."</span>
|
||||
|
||||
<span class="identifier-syntax">Report</span><span class="plain-syntax"> </span><span class="identifier-syntax">examining</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">tablet</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"It is [age of tablet], and translates to '[meaning]'."</span>
|
||||
|
||||
<span class="identifier-syntax">When</span><span class="plain-syntax"> </span><span class="identifier-syntax">play</span><span class="plain-syntax"> </span><span class="identifier-syntax">begins</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">command</span><span class="plain-syntax"> </span><span class="identifier-syntax">prompt</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"Sir Arthur Evans, hero and archeologist, invites you to explore..."</span>
|
||||
</pre>
|
||||
<p class="commentary">In this example the C program is:
|
||||
</p>
|
||||
|
||||
|
@ -546,13 +572,24 @@ feed a textual command back to I7 which would then be parsed into actions.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7process_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">proc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i7_new_process</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_set_process_sender</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i7_run_process</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7val</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i7_read_variable</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_V_the_time</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">printf</span><span class="plain-syntax">(</span><span class="string-syntax">"[C program reads 'time of day' as %d]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7val</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i7_read_prop_value</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_Linear_B_tablet</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_P_age</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">printf</span><span class="plain-syntax">(</span><span class="string-syntax">"[C program reads 'age of Linear B tablet' as %d]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_try</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_A_Take</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_Linear_B_tablet</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_try</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_A_Inv</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_write_variable</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_V_the_time</span><span class="plain-syntax">, </span><span class="constant-syntax">985</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_try</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_A_Examine</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_watch</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_write_variable</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_V_the_time</span><span class="plain-syntax">, </span><span class="constant-syntax">995</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_try</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_A_Examine</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_watch</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_write_prop_value</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_Linear_B_tablet</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_P_age</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_modern</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i7_try</span><span class="plain-syntax">(&</span><span class="identifier-syntax">proc</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_A_Examine</span><span class="plain-syntax">, </span><span class="identifier-syntax">i7_I_Linear_B_tablet</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">printf</span><span class="plain-syntax">(</span><span class="string-syntax">"*** Fatal error: halted ***\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fflush</span><span class="plain-syntax">(</span><span class="identifier-syntax">stdout</span><span class="plain-syntax">); </span><span class="identifier-syntax">fflush</span><span class="plain-syntax">(</span><span class="identifier-syntax">stderr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">exit_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary">Note that a header file called <span class="extract"><span class="extract-syntax">inform7_symbols.h</span></span> is included. This defines
|
||||
|
@ -589,19 +626,36 @@ before compiling <span class="extract"><span class="extract-syntax">Eg6-C.c</spa
|
|||
|
||||
<span class="ConsoleText-plain-syntax">Welcome</span>
|
||||
<span class="ConsoleText-plain-syntax">An Interactive Fiction</span>
|
||||
<span class="ConsoleText-plain-syntax">Release 1 / Serial number 210918 / Inform 7 v10.1.0 / D</span>
|
||||
<span class="ConsoleText-plain-syntax">Release 1 / Serial number 210919 / Inform 7 v10.1.0 / D</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">Jarn Mound</span>
|
||||
<span class="ConsoleText-plain-syntax">You can see a Linear B tablet here.</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">[C program reads 'time of day' as 540]</span>
|
||||
<span class="ConsoleText-plain-syntax">[C program reads 'age of Linear B tablet' as 3]</span>
|
||||
<span class="ConsoleText-plain-syntax">Taken.</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">You are carrying:</span>
|
||||
<span class="ConsoleText-plain-syntax"> a Linear B tablet</span>
|
||||
<span class="ConsoleText-plain-syntax"> an iPhone</span>
|
||||
<span class="ConsoleText-plain-syntax"> a watch (being worn)</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">It is approximately 4:25 pm.</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">It is approximately 4:35 pm.</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">You see nothing special about the Linear B tablet.</span>
|
||||
|
||||
<span class="ConsoleText-plain-syntax">It is modern, and translates to "4 oxen, 1 broken tripod table.".</span>
|
||||
</pre>
|
||||
<p class="commentary">Though this example doesn't use them, the following functions are also
|
||||
available:
|
||||
<p class="commentary">Here we see a run of responses, as if to unheard commands: those of course
|
||||
are the actions sent directly to the process by <span class="extract"><span class="ConsoleText-extract-syntax">i7_try</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>Example 6 used most of the following suite of functions for looking at or
|
||||
altering the Inform data.
|
||||
</p>
|
||||
|
||||
<p class="commentary">First, some functions which can only be applied to instances of <span class="extract"><span class="ConsoleText-extract-syntax">object</span></span>:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_move(&proc, obj, to)</span></span> moves object <span class="extract"><span class="ConsoleText-extract-syntax">obj</span></span> to become a child of <span class="extract"><span class="ConsoleText-extract-syntax">to</span></span>;
|
||||
|
@ -609,6 +663,30 @@ available:
|
|||
</li><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_child(&proc, obj)</span></span> returns its first child;
|
||||
</li><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_sibling(&proc, obj)</span></span> returns the next child of the same parent as <span class="extract"><span class="ConsoleText-extract-syntax">obj</span></span>.
|
||||
</li></ul>
|
||||
<p class="commentary">Second, functions to look at global variables:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_read_variable(&proc, var)</span></span> returns the current value of the variable <span class="extract"><span class="ConsoleText-extract-syntax">var</span></span>;
|
||||
</li><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_write_variable(&proc, var, val)</span></span> sets the value to <span class="extract"><span class="ConsoleText-extract-syntax">val</span></span>.
|
||||
</li></ul>
|
||||
<p class="commentary">Note that where variables are created by kits such as WorldModelKit, their ID
|
||||
constants have names based on the names they have in those kits: thus <span class="extract"><span class="ConsoleText-extract-syntax">i7_V_the_time</span></span>
|
||||
refers to the time of day, not <span class="extract"><span class="ConsoleText-extract-syntax">i7_V_time_of_day</span></span>. Browsing <span class="extract"><span class="ConsoleText-extract-syntax">inform7_symbols.h</span></span>
|
||||
will usually make things clear, anyway.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Finally, properties of objects can similarly be read or written:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_read_prop_value(&proc, obj, prop)</span></span> returns the current value of property
|
||||
<span class="extract"><span class="ConsoleText-extract-syntax">prop</span></span> for the object <span class="extract"><span class="ConsoleText-extract-syntax">obj</span></span>;
|
||||
</li><li>● <span class="extract"><span class="ConsoleText-extract-syntax">i7_write_prop_value(&proc, obj, prop, val)</span></span> sets it to <span class="extract"><span class="ConsoleText-extract-syntax">val</span></span>.
|
||||
</li></ul>
|
||||
<p class="commentary">If you need access to other data inside the Inform program, it's better to
|
||||
process it at the Inform end. These functions are just a convenience for what's
|
||||
most often needed.
|
||||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-iwtg.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-cu.html">cu</a></li><li class="progresssection"><a href="M-iwtg.html">iwtg</a></li><li class="progresscurrent">cifc</li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresssection"><a href="M-pm.html">pm</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-rc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -84,40 +84,40 @@ which take more than 1/1000th of the total running time.
|
|||
|
||||
<pre class="undisplayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">100.0% in inform7 run</span>
|
||||
<span class="plain-syntax"> 54.2% in compilation to Inter</span>
|
||||
<span class="plain-syntax"> 39.1% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 3.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
|
||||
<span class="plain-syntax"> 2.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
|
||||
<span class="plain-syntax"> 2.0% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
|
||||
<span class="plain-syntax"> 1.3% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
|
||||
<span class="plain-syntax"> 1.0% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
|
||||
<span class="plain-syntax"> 0.4% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
|
||||
<span class="plain-syntax"> 54.5% in compilation to Inter</span>
|
||||
<span class="plain-syntax"> 39.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 3.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
|
||||
<span class="plain-syntax"> 2.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
|
||||
<span class="plain-syntax"> 1.9% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
|
||||
<span class="plain-syntax"> 1.4% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
|
||||
<span class="plain-syntax"> 1.1% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
|
||||
<span class="plain-syntax"> 0.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
|
||||
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 0.4% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
|
||||
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
|
||||
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
|
||||
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a>
|
||||
<span class="plain-syntax"> 1.9% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 43.8% in running Inter pipeline</span>
|
||||
<span class="plain-syntax"> 12.2% in step preparation</span>
|
||||
<span class="plain-syntax"> 9.5% in inter step 7/16: consolidate-text</span>
|
||||
<span class="plain-syntax"> 7.8% in inter step 16/16: generate inform6 -> auto.inf</span>
|
||||
<span class="plain-syntax"> 7.8% in inter step 2/16: link</span>
|
||||
<span class="plain-syntax"> 1.4% in inter step 11/16: make-identifiers-unique</span>
|
||||
<span class="plain-syntax"> 43.4% in running Inter pipeline</span>
|
||||
<span class="plain-syntax"> 12.4% in step preparation</span>
|
||||
<span class="plain-syntax"> 9.4% in inter step 7/16: consolidate-text</span>
|
||||
<span class="plain-syntax"> 7.9% in inter step 16/16: generate inform6 -> auto.inf</span>
|
||||
<span class="plain-syntax"> 7.6% in inter step 2/16: link</span>
|
||||
<span class="plain-syntax"> 1.5% in inter step 11/16: make-identifiers-unique</span>
|
||||
<span class="plain-syntax"> 0.4% in inter step 12/16: reconcile-verbs</span>
|
||||
<span class="plain-syntax"> 0.2% in inter step 10/16: detect-indirect-calls</span>
|
||||
<span class="plain-syntax"> 0.2% in inter step 14/16: eliminate-redundant-operations</span>
|
||||
<span class="plain-syntax"> 0.2% in inter step 6/16: assimilate</span>
|
||||
<span class="plain-syntax"> 0.2% in inter step 8/16: resolve-external-symbols</span>
|
||||
<span class="plain-syntax"> 0.2% in inter step 9/16: inspect-plugs</span>
|
||||
<span class="plain-syntax"> 0.1% in inter step 10/16: detect-indirect-calls</span>
|
||||
<span class="plain-syntax"> 0.1% in inter step 13/16: eliminate-redundant-labels</span>
|
||||
<span class="plain-syntax"> 0.1% in inter step 4/16: parse-linked-matter</span>
|
||||
<span class="plain-syntax"> 0.1% in inter step 5/16: resolve-conditional-compilation</span>
|
||||
<span class="plain-syntax"> 2.6% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 2.3% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 1.6% in supervisor</span>
|
||||
<span class="plain-syntax"> 0.3% not specifically accounted for</span>
|
||||
</pre>
|
||||
|
@ -128,12 +128,12 @@ represent less than 1/1000th of the total.
|
|||
</p>
|
||||
|
||||
<pre class="undisplayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">Total memory consumption was 393897K = 385 MB</span>
|
||||
<span class="plain-syntax">Total memory consumption was 394708K = 385 MB</span>
|
||||
|
||||
<span class="plain-syntax">60.7% was used for 1996964 objects, in 371202 frames in 299 x 800K = 239200K = 233 MB:</span>
|
||||
<span class="plain-syntax">60.8% was used for 1997066 objects, in 371205 frames in 300 x 800K = 240000K = 234 MB:</span>
|
||||
|
||||
<span class="plain-syntax"> 10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
|
||||
<span class="plain-syntax"> 7.1% text_stream_array 5142 x 100 = 514200 objects, 28959744 bytes</span>
|
||||
<span class="plain-syntax"> 7.1% text_stream_array 5143 x 100 = 514300 objects, 28965376 bytes</span>
|
||||
<span class="plain-syntax"> 4.2% linked_list 30852 objects, 17277120 bytes</span>
|
||||
<span class="plain-syntax"> 3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes</span>
|
||||
<span class="plain-syntax"> 2.5% parse_node 129365 objects, 10349200 bytes</span>
|
||||
|
@ -171,7 +171,7 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- compilation_subtask 3346 objects, 267680 bytes</span>
|
||||
<span class="plain-syntax"> ---- inference_subject 665 objects, 260680 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_annotation_array 1 x 8192 objects, 196640 bytes</span>
|
||||
<span class="plain-syntax"> ---- hierarchy_location 1116 objects, 169632 bytes</span>
|
||||
<span class="plain-syntax"> ---- hierarchy_location 1117 objects, 169784 bytes</span>
|
||||
<span class="plain-syntax"> ---- binary_predicate 321 objects, 169488 bytes</span>
|
||||
<span class="plain-syntax"> ---- linguistic_stock_item 3316 objects, 159168 bytes</span>
|
||||
<span class="plain-syntax"> ---- rule_family_data 400 objects, 147200 bytes</span>
|
||||
|
@ -180,7 +180,7 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- documentation_ref 1273 objects, 112024 bytes</span>
|
||||
<span class="plain-syntax"> ---- inference 1703 objects, 108992 bytes</span>
|
||||
<span class="plain-syntax"> ---- imperative_defn 1376 objects, 99072 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_tree 6 objects, 98304 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_tree 6 objects, 98352 bytes</span>
|
||||
<span class="plain-syntax"> ---- noun_usage 2402 objects, 96080 bytes</span>
|
||||
<span class="plain-syntax"> ---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes</span>
|
||||
<span class="plain-syntax"> ---- preposition 273 objects, 87360 bytes</span>
|
||||
|
@ -239,7 +239,7 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- booking_list 407 objects, 13024 bytes</span>
|
||||
<span class="plain-syntax"> ---- adjective_iname_holder 320 objects, 12800 bytes</span>
|
||||
<span class="plain-syntax"> ---- pathname 296 objects, 11840 bytes</span>
|
||||
<span class="plain-syntax"> ---- uniqueness_count 454 objects, 10896 bytes</span>
|
||||
<span class="plain-syntax"> ---- uniqueness_count 455 objects, 10920 bytes</span>
|
||||
<span class="plain-syntax"> ---- stopwatch_timer 114 objects, 9120 bytes</span>
|
||||
<span class="plain-syntax"> ---- filename 207 objects, 8280 bytes</span>
|
||||
<span class="plain-syntax"> ---- equation_node 68 objects, 7616 bytes</span>
|
||||
|
@ -366,10 +366,10 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- I6_generation_data 1 object, 24 bytes</span>
|
||||
|
||||
<span class="plain-syntax">39.2% was used for memory not allocated for objects:</span>
|
||||
<span class="plain-syntax">39.1% was used for memory not allocated for objects:</span>
|
||||
|
||||
<span class="plain-syntax"> 20.4% text stream storage 82535560 bytes in 532329 claims</span>
|
||||
<span class="plain-syntax"> 4.5% dictionary storage 18176000 bytes in 33267 claims</span>
|
||||
<span class="plain-syntax"> 20.4% text stream storage 82547652 bytes in 532461 claims</span>
|
||||
<span class="plain-syntax"> 4.4% dictionary storage 18176000 bytes in 33267 claims</span>
|
||||
<span class="plain-syntax"> ---- sorting 744 bytes in 3 claims</span>
|
||||
<span class="plain-syntax"> 1.7% source text 7200000 bytes in 3 claims</span>
|
||||
<span class="plain-syntax"> 2.6% source text details 10800000 bytes in 2 claims</span>
|
||||
|
@ -386,7 +386,7 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- code generation workspace for objects 9624 bytes in 9 claims</span>
|
||||
<span class="plain-syntax"> ---- emitter array storage 161792 bytes in 2062 claims</span>
|
||||
|
||||
<span class="plain-syntax">18.6% was overhead - 75034160 bytes = 73275K = 71 MB</span>
|
||||
<span class="plain-syntax">18.7% was overhead - 75847504 bytes = 74069K = 72 MB</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
|
||||
with optimisation details and hit/miss statistics added, is also long: it's
|
||||
|
|
|
@ -1982,6 +1982,7 @@ that the compiler can refer to it.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_UNDERSTOOD_MD_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_CONTENTS_MD_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_DOCUMENTATION_MD_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_COUNTERPART_MD_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">COMMANDPROMPTTEXT_HL</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INITIAL_MAX_SCORE_HL</span>
|
||||
|
@ -2001,6 +2002,7 @@ that the compiler can refer to it.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_UNDERSTOOD_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^understood"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_CONTENTS_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^contents"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_DOCUMENTATION_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^documentation"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_COUNTERPART_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^counterpart"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_G</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"V"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_T</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMANDPROMPTTEXT_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"command_prompt_text_fn"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CommandPromptText"</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">INITIAL_MAX_SCORE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"INITIAL_MAX_SCORE"</span><span class="plain-syntax">)</span>
|
||||
|
@ -2416,7 +2418,7 @@ point system, and for those:
|
|||
<span class="plain-syntax"> </span><a href="2-emt.html#SP9" class="function-link"><span class="function-syntax">Emit::numeric_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span></span>:<br/>Compilation Units - <a href="2-cu.html#SP3">§3</a><br/>Use Options - <a href="3-uo.html#SP1">§1</a><br/>Activities - <a href="5-act.html#SP7">§7</a><br/>Instances - <a href="5-ins.html#SP4">§4</a><br/>Scene Instances - <a href="5-si.html#SP1">§1</a><br/>Multimedia - <a href="5-mlt.html#SP2_3">§2.3</a><br/>Tables - <a href="5-tbl.html#SP2">§2</a><br/>Rules - <a href="5-rls.html#SP12_2">§12.2</a><br/>Rulebooks - <a href="5-rlb.html#SP7_1">§7.1</a><br/>Kind Constructors - <a href="5-kc.html#SP10">§10</a><br/>Actions - <a href="5-act2.html#SP8_3">§8.3</a>, <a href="5-act2.html#SP8_6">§8.6</a><br/>Mapping Hints - <a href="6-mh.html#SP1">§1</a><br/>Command Grammars - <a href="7-cg.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span></span>:<br/>Compilation Units - <a href="2-cu.html#SP3">§3</a><br/>Use Options - <a href="3-uo.html#SP1">§1</a><br/>Activities - <a href="5-act.html#SP7">§7</a><br/>Instances - <a href="5-ins.html#SP4">§4</a><br/>Scene Instances - <a href="5-si.html#SP1">§1</a><br/>Multimedia - <a href="5-mlt.html#SP2_3">§2.3</a><br/>Tables - <a href="5-tbl.html#SP2">§2</a><br/>Rules - <a href="5-rls.html#SP12_2">§12.2</a><br/>Rulebooks - <a href="5-rlb.html#SP7_1">§7.1</a><br/>Variables - <a href="5-vrb.html#SP14">§14</a><br/>Kind Constructors - <a href="5-kc.html#SP10">§10</a><br/>Actions - <a href="5-act2.html#SP8_3">§8.3</a>, <a href="5-act2.html#SP8_6">§8.6</a><br/>Mapping Hints - <a href="6-mh.html#SP1">§1</a><br/>Command Grammars - <a href="7-cg.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-emt.html#SP11" class="function-link"><span class="function-syntax">Emit::iname_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -432,6 +432,8 @@ compiled code, of course.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">lvalue_nve</span><span class="plain-syntax">.</span><span class="element-syntax">iname_form</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-hrr.html#SP23" class="function-link"><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">VARIABLE_COUNTERPART_MD_HL</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">lvalue_nve</span><span class="plain-syntax">.</span><span class="element-syntax">iname_form</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-vrb.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Add any anomalous extras</span><span class="named-paragraph-number">14.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
Total memory consumption was 393897K = 385 MB
|
||||
Total memory consumption was 394708K = 385 MB
|
||||
|
||||
60.7% was used for 1996964 objects, in 371202 frames in 299 x 800K = 239200K = 233 MB:
|
||||
60.8% was used for 1997066 objects, in 371205 frames in 300 x 800K = 240000K = 234 MB:
|
||||
|
||||
10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
7.1% text_stream_array 5142 x 100 = 514200 objects, 28959744 bytes
|
||||
7.1% text_stream_array 5143 x 100 = 514300 objects, 28965376 bytes
|
||||
4.2% linked_list 30852 objects, 17277120 bytes
|
||||
3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes
|
||||
2.5% parse_node 129365 objects, 10349200 bytes
|
||||
|
@ -41,7 +41,7 @@ Total memory consumption was 393897K = 385 MB
|
|||
---- compilation_subtask 3346 objects, 267680 bytes
|
||||
---- inference_subject 665 objects, 260680 bytes
|
||||
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
|
||||
---- hierarchy_location 1116 objects, 169632 bytes
|
||||
---- hierarchy_location 1117 objects, 169784 bytes
|
||||
---- binary_predicate 321 objects, 169488 bytes
|
||||
---- linguistic_stock_item 3316 objects, 159168 bytes
|
||||
---- rule_family_data 400 objects, 147200 bytes
|
||||
|
@ -50,7 +50,7 @@ Total memory consumption was 393897K = 385 MB
|
|||
---- documentation_ref 1273 objects, 112024 bytes
|
||||
---- inference 1703 objects, 108992 bytes
|
||||
---- imperative_defn 1376 objects, 99072 bytes
|
||||
---- inter_tree 6 objects, 98304 bytes
|
||||
---- inter_tree 6 objects, 98352 bytes
|
||||
---- noun_usage 2402 objects, 96080 bytes
|
||||
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
|
||||
---- preposition 273 objects, 87360 bytes
|
||||
|
@ -109,7 +109,7 @@ Total memory consumption was 393897K = 385 MB
|
|||
---- booking_list 407 objects, 13024 bytes
|
||||
---- adjective_iname_holder 320 objects, 12800 bytes
|
||||
---- pathname 296 objects, 11840 bytes
|
||||
---- uniqueness_count 454 objects, 10896 bytes
|
||||
---- uniqueness_count 455 objects, 10920 bytes
|
||||
---- stopwatch_timer 114 objects, 9120 bytes
|
||||
---- filename 207 objects, 8280 bytes
|
||||
---- equation_node 68 objects, 7616 bytes
|
||||
|
@ -236,10 +236,10 @@ Total memory consumption was 393897K = 385 MB
|
|||
---- loop_over_scope 1 object, 40 bytes
|
||||
---- I6_generation_data 1 object, 24 bytes
|
||||
|
||||
39.2% was used for memory not allocated for objects:
|
||||
39.1% was used for memory not allocated for objects:
|
||||
|
||||
20.4% text stream storage 82535560 bytes in 532329 claims
|
||||
4.5% dictionary storage 18176000 bytes in 33267 claims
|
||||
20.4% text stream storage 82547652 bytes in 532461 claims
|
||||
4.4% dictionary storage 18176000 bytes in 33267 claims
|
||||
---- sorting 744 bytes in 3 claims
|
||||
1.7% source text 7200000 bytes in 3 claims
|
||||
2.6% source text details 10800000 bytes in 2 claims
|
||||
|
@ -256,5 +256,5 @@ Total memory consumption was 393897K = 385 MB
|
|||
---- code generation workspace for objects 9624 bytes in 9 claims
|
||||
---- emitter array storage 161792 bytes in 2062 claims
|
||||
|
||||
18.6% was overhead - 75034160 bytes = 73275K = 71 MB
|
||||
18.7% was overhead - 75847504 bytes = 74069K = 72 MB
|
||||
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
100.0% in inform7 run
|
||||
54.2% in compilation to Inter
|
||||
39.1% in //Sequence::undertake_queued_tasks//
|
||||
3.4% in //MajorNodes::pre_pass//
|
||||
2.4% in //MajorNodes::pass_1//
|
||||
2.0% in //RTPhrasebook::compile_entries//
|
||||
1.3% in //ImperativeDefinitions::assess_all//
|
||||
1.0% in //RTKindConstructors::compile//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
54.5% in compilation to Inter
|
||||
39.3% in //Sequence::undertake_queued_tasks//
|
||||
3.5% in //MajorNodes::pre_pass//
|
||||
2.5% in //MajorNodes::pass_1//
|
||||
1.9% in //RTPhrasebook::compile_entries//
|
||||
1.4% in //ImperativeDefinitions::assess_all//
|
||||
1.1% in //RTKindConstructors::compile//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //World::stage_V//
|
||||
0.2% in //CompletionModule::compile//
|
||||
0.2% in //ImperativeDefinitions::compile_first_block//
|
||||
0.2% in //Sequence::undertake_queued_tasks//
|
||||
0.1% in //InferenceSubjects::emit_all//
|
||||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
1.9% not specifically accounted for
|
||||
43.8% in running Inter pipeline
|
||||
12.2% in step preparation
|
||||
9.5% in inter step 7/16: consolidate-text
|
||||
7.8% in inter step 16/16: generate inform6 -> auto.inf
|
||||
7.8% in inter step 2/16: link
|
||||
1.4% in inter step 11/16: make-identifiers-unique
|
||||
43.4% in running Inter pipeline
|
||||
12.4% in step preparation
|
||||
9.4% in inter step 7/16: consolidate-text
|
||||
7.9% in inter step 16/16: generate inform6 -> auto.inf
|
||||
7.6% in inter step 2/16: link
|
||||
1.5% in inter step 11/16: make-identifiers-unique
|
||||
0.4% in inter step 12/16: reconcile-verbs
|
||||
0.2% in inter step 10/16: detect-indirect-calls
|
||||
0.2% in inter step 14/16: eliminate-redundant-operations
|
||||
0.2% in inter step 6/16: assimilate
|
||||
0.2% in inter step 8/16: resolve-external-symbols
|
||||
0.2% in inter step 9/16: inspect-plugs
|
||||
0.1% in inter step 10/16: detect-indirect-calls
|
||||
0.1% in inter step 13/16: eliminate-redundant-labels
|
||||
0.1% in inter step 4/16: parse-linked-matter
|
||||
0.1% in inter step 5/16: resolve-conditional-compilation
|
||||
2.6% not specifically accounted for
|
||||
2.3% not specifically accounted for
|
||||
1.6% in supervisor
|
||||
0.3% not specifically accounted for
|
||||
|
|
|
@ -396,6 +396,31 @@ What will happen then is that the |i7_run_process| function will return at
|
|||
the point where a command would have been requested. The C function can then
|
||||
trigger whatever actions it wants, in the world model, without the need to
|
||||
feed a textual command back to I7 which would then be parsed into actions.
|
||||
In this example we do just that, and also examine and modify the data belonging
|
||||
to the I7 program from C.
|
||||
|
||||
The story, such as it is:
|
||||
= (text as Inform 7)
|
||||
Jarn Mound is a room.
|
||||
|
||||
Age is a kind of value. The ages are modern, antique and ancient. A thing has
|
||||
an age. The age of a thing is usually modern.
|
||||
|
||||
In the Mound is a Linear B tablet. The tablet is ancient. The player is wearing
|
||||
a watch.
|
||||
|
||||
The meaning is a text that varies. The meaning is "4 oxen, 1 broken tripod table."
|
||||
|
||||
Instead of examining the watch:
|
||||
say "It is approximately [time of day]."
|
||||
|
||||
Report examining the tablet:
|
||||
say "It is [age of tablet], and translates to '[meaning]'."
|
||||
|
||||
When play begins:
|
||||
now the command prompt is "";
|
||||
say "Sir Arthur Evans, hero and archeologist, invites you to explore..."
|
||||
=
|
||||
|
||||
In this example the C program is:
|
||||
= (text as C)
|
||||
|
@ -406,13 +431,24 @@ int main(int argc, char **argv) {
|
|||
i7process_t proc = i7_new_process();
|
||||
i7_set_process_sender(&proc, NULL);
|
||||
if (i7_run_process(&proc) == 0) {
|
||||
i7val t = i7_read_variable(&proc, i7_V_the_time);
|
||||
printf("[C program reads 'time of day' as %d]\n", t);
|
||||
i7val A = i7_read_prop_value(&proc, i7_I_Linear_B_tablet, i7_P_age);
|
||||
printf("[C program reads 'age of Linear B tablet' as %d]\n", A);
|
||||
i7_try(&proc, i7_A_Take, i7_I_Linear_B_tablet, 0);
|
||||
i7_try(&proc, i7_A_Inv, 0, 0);
|
||||
i7_write_variable(&proc, i7_V_the_time, 985);
|
||||
i7_try(&proc, i7_A_Examine, i7_I_watch, 0);
|
||||
i7_write_variable(&proc, i7_V_the_time, 995);
|
||||
i7_try(&proc, i7_A_Examine, i7_I_watch, 0);
|
||||
i7_write_prop_value(&proc, i7_I_Linear_B_tablet, i7_P_age, i7_I_modern);
|
||||
i7_try(&proc, i7_A_Examine, i7_I_Linear_B_tablet, 0);
|
||||
return 0;
|
||||
} else {
|
||||
printf("*** Fatal error: halted ***\n");
|
||||
fflush(stdout); fflush(stderr);
|
||||
return 1;
|
||||
}
|
||||
return exit_code;
|
||||
}
|
||||
=
|
||||
Note that a header file called |inform7_symbols.h| is included. This defines
|
||||
|
@ -445,21 +481,56 @@ Sir Arthur Evans, hero and archeologist, invites you to explore...
|
|||
|
||||
Welcome
|
||||
An Interactive Fiction
|
||||
Release 1 / Serial number 210918 / Inform 7 v10.1.0 / D
|
||||
Release 1 / Serial number 210919 / Inform 7 v10.1.0 / D
|
||||
|
||||
Jarn Mound
|
||||
You can see a Linear B tablet here.
|
||||
|
||||
[C program reads 'time of day' as 540]
|
||||
[C program reads 'age of Linear B tablet' as 3]
|
||||
Taken.
|
||||
|
||||
You are carrying:
|
||||
a Linear B tablet
|
||||
an iPhone
|
||||
a watch (being worn)
|
||||
|
||||
It is approximately 4:25 pm.
|
||||
|
||||
It is approximately 4:35 pm.
|
||||
|
||||
You see nothing special about the Linear B tablet.
|
||||
|
||||
It is modern, and translates to "4 oxen, 1 broken tripod table.".
|
||||
=
|
||||
Though this example doesn't use them, the following functions are also
|
||||
available:
|
||||
Here we see a run of responses, as if to unheard commands: those of course
|
||||
are the actions sent directly to the process by |i7_try|.
|
||||
|
||||
@ Example 6 used most of the following suite of functions for looking at or
|
||||
altering the Inform data.
|
||||
|
||||
First, some functions which can only be applied to instances of |object|:
|
||||
|
||||
(*) |i7_move(&proc, obj, to)| moves object |obj| to become a child of |to|;
|
||||
(*) |i7_parent(&proc, obj)| returns the current parent object of |obj|;
|
||||
(*) |i7_child(&proc, obj)| returns its first child;
|
||||
(*) |i7_sibling(&proc, obj)| returns the next child of the same parent as |obj|.
|
||||
|
||||
Second, functions to look at global variables:
|
||||
|
||||
(*) |i7_read_variable(&proc, var)| returns the current value of the variable |var|;
|
||||
(*) |i7_write_variable(&proc, var, val)| sets the value to |val|.
|
||||
|
||||
Note that where variables are created by kits such as WorldModelKit, their ID
|
||||
constants have names based on the names they have in those kits: thus |i7_V_the_time|
|
||||
refers to the time of day, not |i7_V_time_of_day|. Browsing |inform7_symbols.h|
|
||||
will usually make things clear, anyway.
|
||||
|
||||
Finally, properties of objects can similarly be read or written:
|
||||
|
||||
(*) |i7_read_prop_value(&proc, obj, prop)| returns the current value of property
|
||||
|prop| for the object |obj|;
|
||||
(*) |i7_write_prop_value(&proc, obj, prop, val)| sets it to |val|.
|
||||
|
||||
If you need access to other data inside the Inform program, it's better to
|
||||
process it at the Inform end. These functions are just a convenience for what's
|
||||
most often needed.
|
||||
|
|
|
@ -1808,6 +1808,7 @@ void Hierarchy::establish(void) {
|
|||
@e VARIABLE_UNDERSTOOD_MD_HL
|
||||
@e VARIABLE_CONTENTS_MD_HL
|
||||
@e VARIABLE_DOCUMENTATION_MD_HL
|
||||
@e VARIABLE_COUNTERPART_MD_HL
|
||||
@e VARIABLE_HL
|
||||
@e COMMANDPROMPTTEXT_HL
|
||||
@e INITIAL_MAX_SCORE_HL
|
||||
|
@ -1824,6 +1825,7 @@ void Hierarchy::establish(void) {
|
|||
H_C_U(VARIABLE_UNDERSTOOD_MD_HL, I"^understood")
|
||||
H_C_U(VARIABLE_CONTENTS_MD_HL, I"^contents")
|
||||
H_C_U(VARIABLE_DOCUMENTATION_MD_HL, I"^documentation")
|
||||
H_C_U(VARIABLE_COUNTERPART_MD_HL, I"^counterpart")
|
||||
H_C_G(VARIABLE_HL, I"V")
|
||||
H_F_T(COMMANDPROMPTTEXT_HL, I"command_prompt_text_fn", I"CommandPromptText")
|
||||
H_C_T(INITIAL_MAX_SCORE_HL, I"INITIAL_MAX_SCORE")
|
||||
|
|
|
@ -340,6 +340,8 @@ int RTVariables::compile(inference_subject_family *f, int ignored) {
|
|||
inter_symbol *S = InterNames::to_symbol(iname);
|
||||
inter_symbol *H = InterNames::to_symbol(nlv->compilation_data.lvalue_nve.iname_form);
|
||||
InterSymbolsTables::equate(S, H);
|
||||
Hierarchy::apply_metadata_from_iname(pack, VARIABLE_COUNTERPART_MD_HL,
|
||||
nlv->compilation_data.lvalue_nve.iname_form);
|
||||
}
|
||||
}
|
||||
@<Add any anomalous extras@>;
|
||||
|
|
Loading…
Reference in a new issue