1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-03 07:24:58 +03:00

Completed C example 6

This commit is contained in:
Graham Nelson 2021-09-19 19:32:02 +01:00
parent f92d8c50ac
commit f7e6fff133
9 changed files with 223 additions and 66 deletions

View file

@ -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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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">(&amp;</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>&#167;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>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_move(&amp;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>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_child(&amp;proc, obj)</span></span> returns its first child;
</li><li>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_sibling(&amp;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>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_read_variable(&amp;proc, var)</span></span> returns the current value of the variable <span class="extract"><span class="ConsoleText-extract-syntax">var</span></span>;
</li><li>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_write_variable(&amp;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>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_read_prop_value(&amp;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>&#9679; <span class="extract"><span class="ConsoleText-extract-syntax">i7_write_prop_value(&amp;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">&#10094;</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">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -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 -&gt; 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 -&gt; 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>&#167;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

View file

@ -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">&#167;3</a><br/>Use Options - <a href="3-uo.html#SP1">&#167;1</a><br/>Activities - <a href="5-act.html#SP7">&#167;7</a><br/>Instances - <a href="5-ins.html#SP4">&#167;4</a><br/>Scene Instances - <a href="5-si.html#SP1">&#167;1</a><br/>Multimedia - <a href="5-mlt.html#SP2_3">&#167;2.3</a><br/>Tables - <a href="5-tbl.html#SP2">&#167;2</a><br/>Rules - <a href="5-rls.html#SP12_2">&#167;12.2</a><br/>Rulebooks - <a href="5-rlb.html#SP7_1">&#167;7.1</a><br/>Kind Constructors - <a href="5-kc.html#SP10">&#167;10</a><br/>Actions - <a href="5-act2.html#SP8_3">&#167;8.3</a>, <a href="5-act2.html#SP8_6">&#167;8.6</a><br/>Mapping Hints - <a href="6-mh.html#SP1">&#167;1</a><br/>Command Grammars - <a href="7-cg.html#SP14">&#167;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">&#167;3</a><br/>Use Options - <a href="3-uo.html#SP1">&#167;1</a><br/>Activities - <a href="5-act.html#SP7">&#167;7</a><br/>Instances - <a href="5-ins.html#SP4">&#167;4</a><br/>Scene Instances - <a href="5-si.html#SP1">&#167;1</a><br/>Multimedia - <a href="5-mlt.html#SP2_3">&#167;2.3</a><br/>Tables - <a href="5-tbl.html#SP2">&#167;2</a><br/>Rules - <a href="5-rls.html#SP12_2">&#167;12.2</a><br/>Rulebooks - <a href="5-rlb.html#SP7_1">&#167;7.1</a><br/>Variables - <a href="5-vrb.html#SP14">&#167;14</a><br/>Kind Constructors - <a href="5-kc.html#SP10">&#167;10</a><br/>Actions - <a href="5-act2.html#SP8_3">&#167;8.3</a>, <a href="5-act2.html#SP8_6">&#167;8.6</a><br/>Mapping Hints - <a href="6-mh.html#SP1">&#167;1</a><br/>Command Grammars - <a href="7-cg.html#SP14">&#167;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>

View file

@ -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">-&gt;</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">-&gt;</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>

View file

@ -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

View file

@ -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

View file

@ -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_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.

View file

@ -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")

View file

@ -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@>;