mirror of
https://github.com/ganelson/inform.git
synced 2024-06-16 23:30:44 +03:00
Refactored plugins to become compiler features
This commit is contained in:
parent
d85ab8c4d5
commit
03592cb26f
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6V48 'Krypton' (30 August 2022)
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6V49 'Krypton' (1 September 2022)
|
||||
|
||||
## About Inform
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 30 August 2022
|
||||
Build Number: 6V48
|
||||
Build Date: 1 September 2022
|
||||
Build Number: 6V49
|
||||
|
|
|
@ -33,8 +33,8 @@ up individual tasks; it provides general mechanisms for issuing problem messages
|
|||
and also a "plugin" architecture enabling language features to be added. Most
|
||||
Inform users think of rooms, map connections and so on as being built in to
|
||||
the language itself, but internally we take the view that there is a purist
|
||||
Basic Inform language dealing only in data, and then a set of plugins to add
|
||||
domain-specific gadgets to that language.
|
||||
Basic Inform language dealing only in data, and then a set of optional compiler
|
||||
features to add domain-specific gadgets to that language.
|
||||
|
||||
(*) Contents page of web: //core//.
|
||||
|
||||
|
@ -100,8 +100,8 @@ for the moment.[1]
|
|||
[1] If we ever do go down the road of a full-on linker, issues like this would
|
||||
be part of what is nowadays called "ABI stability".
|
||||
|
||||
@ The //if// module consists of an extensive suite of plugins (see |core|
|
||||
above) to add interactive fiction features to the Basic Inform language.
|
||||
@ The //if// module consists of an extensive suite of features (see |core|
|
||||
above) to add interactive fiction support to the Basic Inform language.
|
||||
Support for scenes, a spatial map, a protagonist character, and so on are
|
||||
all to be found here.
|
||||
|
||||
|
@ -109,7 +109,7 @@ all to be found here.
|
|||
|
||||
(*) Detailed overview: //if: What This Module Does//.
|
||||
|
||||
@ The //multimedia// module consists of a few plugins (see |core| above)
|
||||
@ The //multimedia// module consists of a few features (see |core| above)
|
||||
to add images, sound files and external file-handling to the Basic Inform
|
||||
language.
|
||||
|
||||
|
|
|
@ -64,11 +64,13 @@ which use this module:
|
|||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">inter_architecture_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">target_vm_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">compatibility_specification_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">compiler_feature_CLASS</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_architecture</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">target_vm</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">compatibility_specification</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
|
||||
</p>
|
||||
|
@ -83,7 +85,7 @@ which use this module:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">am</li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progressnext"><a href="2-arc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">am</li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="2-arc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -168,7 +168,7 @@ are ever made.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-am.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">arc</li><li class="progresssection"><a href="2-tvm.html">tvm</a></li><li class="progresssection"><a href="2-cmp.html">cmp</a></li><li class="progressnext"><a href="2-tvm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-am.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">arc</li><li class="progresssection"><a href="2-tvm.html">tvm</a></li><li class="progresssection"><a href="2-cmp.html">cmp</a></li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="2-tvm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -481,7 +481,7 @@ according to what the <span class="extract"><span class="extract-syntax">token</
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-tvm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-arc.html">arc</a></li><li class="progresssection"><a href="2-tvm.html">tvm</a></li><li class="progresscurrent">cmp</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-tvm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-arc.html">arc</a></li><li class="progresssection"><a href="2-tvm.html">tvm</a></li><li class="progresscurrent">cmp</li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="3-fm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -537,7 +537,7 @@ will return the empty text.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-arc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-arc.html">arc</a></li><li class="progresscurrent">tvm</li><li class="progresssection"><a href="2-cmp.html">cmp</a></li><li class="progressnext"><a href="2-cmp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-arc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-arc.html">arc</a></li><li class="progresscurrent">tvm</li><li class="progresssection"><a href="2-cmp.html">cmp</a></li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="2-cmp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
242
docs/arch-module/3-fm.html
Normal file
242
docs/arch-module/3-fm.html
Normal file
|
@ -0,0 +1,242 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Feature Manager</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
function togglePopup(material_id) {
|
||||
var popup = document.getElementById(material_id);
|
||||
popup.classList.toggle("show");
|
||||
}
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Feature Manager' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">arch</a></li><li><a href="index.html#3">Chapter 3: Features</a></li><li><b>Feature Manager</b></li></ul></div>
|
||||
<p class="purpose">Creating, activating or deactivating compiler features.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>"Features" are optional pieces of compiler functionality, which are given
|
||||
textual names. They can be "activated" or "deactivated", that is, on or off.
|
||||
For example, some of the interactive-fiction support in the Inform compiler
|
||||
is provided by features which are deactivated for Basic Inform projects.
|
||||
Incompletely implemented, or experimental, functions under development can
|
||||
also be gated behind features which are deactivated by default, and activated
|
||||
just for test projects.
|
||||
</p>
|
||||
|
||||
<p class="commentary">It turns out to be convenient to have a hard-wired maximum number of these.
|
||||
But since features are not things an author can create in source text, we always
|
||||
know exactly how many there are.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax"> </span><span class="constant-syntax">32</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">textual_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">parent_feature</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">activation_function</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">active</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">permanently_active</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">activation_function_run</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="function-syntax">Features::new</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">starter</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax">), </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tname</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">textual_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">tname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">activation_function</span><span class="plain-syntax"> = </span><span class="identifier-syntax">starter</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">parent_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">set</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">activation_function_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">F</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many features"</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">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure compiler_feature is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>With so few features in existence, there's no need to do this more efficiently:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="function-syntax">Features::from_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">textual_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">F</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">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The idea is that an inactive feature does nothing; it's as if that section of
|
||||
code were not in the compiler at all. These provide convenient shorthand ways
|
||||
to test that:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">) </span><a href="3-fm.html#SP3" class="function-link"><span class="function-syntax">Features::active</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">)</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">) (</span><a href="3-fm.html#SP3" class="function-link"><span class="function-syntax">Features::active</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Features::active</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</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">Features::list</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">except</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax">) </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</span><span class="plain-syntax"> == </span><span class="identifier-syntax">state</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">except</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) || (</span><a href="3-fm.html#SP5" class="function-link"><span class="function-syntax">Features::part_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">except</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">c</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">textual_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>In the code above, features are set up as inactive by default — even "core",
|
||||
which the compiler absolutely cannot live without. So <a href="../supervisor-module/5-ps2.html" class="internal">Project Services (in supervisor)</a>
|
||||
calls the following before switching on optional things that it wants.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Features::activate_bare_minimum</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</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">F</span><span class="plain-syntax">-></span><span class="element-syntax">permanently_active</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="3-fm.html#SP6" class="function-link"><span class="function-syntax">Features::activate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</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">Features::make_permanently_active</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">F</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no feature"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">permanently_active</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>Most features are subordinate to a parent feature: for example, a dozen more
|
||||
specific IF-related features are subordinate to the "interactive fiction" one.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Features::part_of</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Features::part_of</span></span>:<br/><a href="3-fm.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">F</span><span class="plain-syntax"> != </span><span class="identifier-syntax">G</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">F</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">parent_feature</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">F</span><span class="plain-syntax"> == </span><span class="identifier-syntax">G</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Activating or deactivating a parent like that automatically activates
|
||||
or deactivates its children.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Features::activate</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Features::activate</span></span>:<br/><a href="3-fm.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">F</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="identifier-syntax">active</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="3-fm.html#SP8" class="function-link"><span class="function-syntax">Features::run_activation_function</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</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">G</span><span class="plain-syntax">-></span><span class="element-syntax">parent_feature</span><span class="plain-syntax"> == </span><span class="identifier-syntax">F</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-fm.html#SP6" class="function-link"><span class="function-syntax">Features::activate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Whereas anything can be activated, some things cannot be deactivated, so the
|
||||
following returns a success flag:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Features::deactivate</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">F</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</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">F</span><span class="plain-syntax">-></span><span class="element-syntax">permanently_active</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="identifier-syntax">active</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</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">G</span><span class="plain-syntax">-></span><span class="element-syntax">parent_feature</span><span class="plain-syntax"> == </span><span class="identifier-syntax">F</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-fm.html#SP7" class="function-link"><span class="function-syntax">Features::deactivate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">FALSE</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">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>Every active feature gets to run its start function, if it provides one.
|
||||
But this is postponed until <a href="3-fm.html#SP8" class="internal">Features::run_activation_functions</a> is called;
|
||||
at that point, every activated feature runs its function. If any feature is
|
||||
activated after this point, its function runs immediately. (The point of the
|
||||
postponement is that very early in Inform's run, the memory manager may not
|
||||
yet be working, and so on.)
|
||||
</p>
|
||||
|
||||
<p class="commentary">It's kind of incredible that C's grammar for round brackets is unambiguous.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_activation_functions_to_be_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Features::allow_activation_functions</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_activation_functions_to_be_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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">Features::run_activation_functions</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiler_feature</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">F</span><span class="plain-syntax">-></span><span class="element-syntax">active</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-fm.html#SP8" class="function-link"><span class="function-syntax">Features::run_activation_function</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</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">Features::run_activation_function</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Features::run_activation_function</span></span>:<br/><a href="3-fm.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">allow_activation_functions_to_be_run</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">F</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">activation_function_run</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="identifier-syntax">activation_function_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">start</span><span class="plain-syntax">)() = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*)()) </span><span class="identifier-syntax">F</span><span class="plain-syntax">-></span><span class="element-syntax">activation_function</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">start</span><span class="plain-syntax">) (*</span><span class="identifier-syntax">start</span><span class="plain-syntax">)();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-cmp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">fm</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -81,7 +81,7 @@ module:
|
|||
before, the corresponding calls to <a href="../../../inweb/foundation-module/index.html" class="internal">foundation</a>.)
|
||||
</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">❮</a></li><li class="progresscurrentchapter">P</li><li class="progresssection"><a href="P-wtmd.html">wtmd</a></li><li class="progresscurrent">htitm</li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progressnext"><a href="1-am.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">❮</a></li><li class="progresscurrentchapter">P</li><li class="progresssection"><a href="P-wtmd.html">wtmd</a></li><li class="progresscurrent">htitm</li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="1-am.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">arch</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
|
||||
<p class="purpose">An overview of the arch module's role and abilities.</p>
|
||||
|
||||
<ul class="toc"><li><a href="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">§2. Architecture versus VM</a></li><li><a href="P-wtmd.html#SP4">§4. Compatibility</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">§2. Architecture versus VM</a></li><li><a href="P-wtmd.html#SP4">§4. Compatibility</a></li><li><a href="P-wtmd.html#SP5">§5. Features</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Prerequisites. </b>The arch module is a part of the Inform compiler toolset. It is
|
||||
presented as a literate program or "web". Before diving in:
|
||||
|
@ -148,8 +148,14 @@ anything". This should be the default; <a href="2-cmp.html#SP11" class="internal
|
|||
whether a specification is equivalent to this.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Features. </b>The last service provided by this module is to manage which named features of
|
||||
the compiler are switched on or off: see <a href="3-fm.html" class="internal">Feature Manager</a>. At one time
|
||||
this functionality was part of the core Inform compiler, but having it here
|
||||
means that all of the compiler tools can make use of it.
|
||||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progressnext"><a href="P-htitm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-arc.html">2</a></li><li class="progresschapter"><a href="3-fm.html">3</a></li><li class="progressnext"><a href="P-htitm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -97,6 +97,17 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="3"></a>
|
||||
<span class="chaptertitle">Chapter 3: Features</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-fm.html">
|
||||
<spon class="sectiontitle">Feature Manager</span></a> -
|
||||
<span class="sectionpurpose">Creating, activating or deactivating compiler features.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr>
|
||||
|
|
|
@ -360,7 +360,7 @@ now absolutely any non-empty word range is accepted as the property name.
|
|||
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>§5.3. </b>So we can now use the above grammar to understand the definition of the verb.
|
||||
Note that it is legal, but does nothing, to request a built-in meaning which
|
||||
does not exist: this allows for Basic Inform to mention built-in meanings
|
||||
which exist only when certain plugins are active.
|
||||
which exist only when certain features are active.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the verb meaning and priority</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
|
||||
|
|
|
@ -889,7 +889,7 @@ further sub-cases later.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3">§6.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_3_17" class="paragraph-anchor"></a><b>§6.3.17. Case 17. </b>In fact one sentence like this can make sense — "The mist is
|
||||
everywhere", or similar — but is handled by the spatial plugin, if active.
|
||||
everywhere", or similar — but is handled by the spatial feature, if active.
|
||||
Even then, of course, "everywhere" implicitly means "in every room",
|
||||
not "every room".
|
||||
</p>
|
||||
|
@ -2057,7 +2057,7 @@ these sentences falls into case 41.
|
|||
<p>East is the Pavilion.</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">(Of course this will only be true if the map plugin is active.)
|
||||
<p class="commentary">(Of course this will only be true if the map feature is active.)
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Case 41 - PROPER NOUN on both sides</span><span class="named-paragraph-number">6.3.41</span></span><span class="comment-syntax"> =</span>
|
||||
|
|
|
@ -115,7 +115,7 @@ the details of a description to the node.
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>It's useful to have a safe way of transferring the complete noun details
|
||||
from one node to another, without breaking the above invariant. (The
|
||||
<span class="extract"><span class="extract-syntax">nowhere</span></span> annotation is used by the spatial model plugin, if active, and
|
||||
<span class="extract"><span class="extract-syntax">nowhere</span></span> annotation is used by the spatial feature, if active, and
|
||||
it probably never needs to be copied, but we do so for safety's sake.)
|
||||
</p>
|
||||
|
||||
|
@ -634,7 +634,7 @@ complicated description is as follows:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rpt.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_8_1" class="paragraph-anchor"></a><b>§11.8.1. </b>For example, "above" and "below" become significant if the mapping plugin
|
||||
<p class="commentary firstcommentary"><a id="SP11_8_1" class="paragraph-anchor"></a><b>§11.8.1. </b>For example, "above" and "below" become significant if the mapping feature
|
||||
is active, and "nowhere" if the spatial one is.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ about the location applies. Those two restrictions are both stored in its RCD.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity_context</span><span class="plain-syntax">; </span><span class="comment-syntax"> text used to parse...</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">avl</span><span class="plain-syntax">; </span><span class="comment-syntax"> happens only while these activities go on</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">; </span><span class="comment-syntax"> happens only if the action or parameter matches this</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plugin_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for plugins to attach, if they want to</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for features to attach, if they want to</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">RuntimeContextData::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">RuntimeContextData::new</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP6">§6</a><br/>Imperative Definition Families - <a href="5-idf.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
|
@ -102,7 +102,7 @@ about the location applies. Those two restrictions are both stored in its RCD.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">activity_context</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">avl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">ap</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">plugin_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">feature_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::new_rcd_notify</span><span class="plain-syntax">(&</span><span class="identifier-syntax">phrcd</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">phrcd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -114,13 +114,13 @@ about the location applies. Those two restrictions are both stored in its RCD.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure id_runtime_context_data is accessed in 5/rf and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>For the more interesting clauses, see <a href="../if-module/3-scn.html" class="internal">Scenes (in if)</a> and <a href="../if-module/4-rpoa.html" class="internal">Rules Predicated on Actions (in if)</a>,
|
||||
where the scenes and actions plugins make use of the following extensibility:
|
||||
where the scenes and actions features make use of the following extensibility:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_rcd_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">plugin_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_PLUGIN_RCD_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">)-></span><span class="identifier-syntax">plugin_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">));</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_rcd_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">feature_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">)-></span><span class="identifier-syntax">feature_rcd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Specificity. </b>The following is one of Inform's standardised comparison routines, which
|
||||
takes a pair of objects A, B and returns 1 if A makes a more specific
|
||||
|
|
|
@ -122,7 +122,7 @@ this is divided up into smaller excerpts of text, as in the following examples:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">owning_rulebook_placement</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...and with this placement value: see Rulebooks</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">permit_all_outcomes</span><span class="plain-syntax">; </span><span class="comment-syntax"> waive the usual restrictions on rule outcomes</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plugin_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for plugins to attach, if they want to</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for features to attach, if they want to</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -140,18 +140,18 @@ this is divided up into smaller excerpts of text, as in the following examples:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook_placement</span><span class="plain-syntax"> = </span><span class="constant-syntax">MIDDLE_PLACEMENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">permit_all_outcomes</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">plugin_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">feature_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure rule_family_data is accessed in 5/tpf and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>These two macros provide access to plugin-specific rule family data:
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>These two macros provide access to feature-specific rule family data:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_rfd_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">plugin_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_PLUGIN_RFD_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="identifier-syntax">plugin_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">));</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_rfd_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">feature_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="identifier-syntax">feature_rfd</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Identification. </b>We are going to claim as our own any definition whose name matches the
|
||||
following nonterminal — and because of the last production, this will always
|
||||
|
|
|
@ -290,7 +290,7 @@ nothing.
|
|||
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::to_kind</span><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">kind_of_rule</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">K</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions_plugin</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_rule</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_void</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_rule</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_void</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_void</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -67,22 +67,29 @@ function togglePopup(material_id) {
|
|||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that the "core" plugin itself does nothing except to be a parent to the
|
||||
<p class="commentary">Note that the "core" feature itself does nothing except to be a parent to the
|
||||
other two; it doesn't even have an activation function.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The "experimental features" feature is similarly an umbrella for any features
|
||||
being used to test out half-implemented compiler functionality before it's ready
|
||||
to be part of a released version.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TASK_QUEUE_DA</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INTER_DA</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM_INTER_DA</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">plugin</span><span class="plain-syntax"> *</span><span class="identifier-syntax">core_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">naming_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">counting_plugin</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">core_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">naming_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">counting_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">experimental_feature</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">core_plugin</span><span class="plain-syntax"> = </span><a href="3-pm.html#SP1" class="function-link"><span class="function-syntax">PluginManager::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"core"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-pm.html#SP3" class="function-link"><span class="function-syntax">PluginManager::make_permanently_active</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">core_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">naming_plugin</span><span class="plain-syntax"> = </span><a href="3-pm.html#SP1" class="function-link"><span class="function-syntax">PluginManager::new</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">Naming::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"naming"</span><span class="plain-syntax">, </span><span class="identifier-syntax">core_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">counting_plugin</span><span class="plain-syntax"> = </span><a href="3-pm.html#SP1" class="function-link"><span class="function-syntax">PluginManager::new</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">InstanceCounting::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"instance counting"</span><span class="plain-syntax">, </span><span class="identifier-syntax">core_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">core_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"core"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Features::make_permanently_active</span><span class="plain-syntax">(</span><span class="identifier-syntax">core_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">naming_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">Naming::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"naming"</span><span class="plain-syntax">, </span><span class="identifier-syntax">core_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">counting_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">InstanceCounting::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"instance counting"</span><span class="plain-syntax">, </span><span class="identifier-syntax">core_feature</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">experimental_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"experimental features"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">TASK_QUEUE_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"task queue"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">INTER_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"inter"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
|
@ -112,7 +119,7 @@ want to produce predictable output for easier testing.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">cm</li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-cp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">cm</li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-cp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -249,7 +249,6 @@ We begin with <a href="index.html" class="internal">core</a> itself.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">label_namespace_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">group_together_function_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nascent_array_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">plugin_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">runtime_kind_structure_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">slash_gpr_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">test_scenario_CLASS</span>
|
||||
|
@ -269,7 +268,6 @@ We begin with <a href="index.html" class="internal">core</a> itself.
|
|||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">label_namespace</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">group_together_function</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">nascent_array</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">plugin</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">runtime_kind_structure</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">slash_gpr</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">test_scenario</span><span class="plain-syntax">)</span>
|
||||
|
@ -371,7 +369,7 @@ We begin with <a href="index.html" class="internal">core</a> itself.
|
|||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">files_data</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresscurrent">cp</li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-wtc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresscurrent">cp</li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-wtc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -165,7 +165,7 @@ bit or the <k-kind> bit set, which as we see above is <span class="extract
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-htc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresscurrent">cp2</li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-pp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-htc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresscurrent">cp2</li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-pp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -231,7 +231,7 @@ the above settings can be changed.)
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-pp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-inaa.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-pp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-inaa.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -164,8 +164,8 @@ as possible.
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§2.2. </b>Here, then, are the steps in the production line, presented without
|
||||
commentary. For what they do, see the relevant sections. Note that at the
|
||||
end of each stage, plugins are allowed to add further steps; see
|
||||
<a href="1-wtc.html#SP5" class="internal">Task::advance_stage_to</a>.
|
||||
end of each stage, plugins made by compiler features are allowed to add
|
||||
further steps; see <a href="1-wtc.html#SP5" class="internal">Task::advance_stage_to</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Before anything else can be done, we must create an empty Inter hierarchy
|
||||
|
@ -655,7 +655,7 @@ to advance <span class="extract"><span class="extract-syntax">last_task</span></
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-wtc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresscurrent">htc</li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-cp2.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-wtc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresscurrent">htc</li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-cp2.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -487,7 +487,7 @@ which compilation unit the node belongs.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: options set for a literal pattern part</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: e.g., 5 for "five gold rings"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">binary_predicate</span></span><span class="comment-syntax">: new relation as subject of "relates" sentence</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nowhere_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by the spatial plugin to show this represents "nowhere"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nowhere_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by the spatial feature to show this represents "nowhere"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">predicate_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">unary_predicate</span></span><span class="comment-syntax">: which adjective is asserted</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">quant_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">quantifier</span></span><span class="comment-syntax">: for quantified excerpts like "three baskets"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">quantification_parameter_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: e.g., 3 for "three baskets"</span>
|
||||
|
@ -1340,7 +1340,7 @@ which compilation unit the node belongs.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cs.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresscurrent">inaa</li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-itc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cs.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresscurrent">inaa</li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-itc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -470,7 +470,7 @@ and carry on regardless.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-itc.html#SP9">§9</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-inaa.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresscurrent">itc</li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-up.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-inaa.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresscurrent">itc</li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-up.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -131,7 +131,7 @@ a final status indicator.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cp2.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresscurrent">pp</li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-cs.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cp2.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresscurrent">pp</li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-cs.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -129,7 +129,8 @@ thing which is being compiled when it is.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DocReferences::read_xrefs</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::issue_problems_arising</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">vertex</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-pm.html#SP5" class="function-link"><span class="function-syntax">PluginManager::start_plugins</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Features::allow_activation_functions</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Features::run_activation_functions</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">problem_count</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -183,7 +184,7 @@ rough stages. Twenty is plenty.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stage</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not an advance"</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">stage</span><span class="plain-syntax"> >= </span><span class="constant-syntax">20</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"went too far"</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">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="3-pc.html#SP2" class="function-link"><span class="function-syntax">PluginCalls::production_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax">, </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">timer</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-pc.html#SP5" class="function-link"><span class="function-syntax">PluginCalls::production_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax">, </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">timer</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">roman</span><span class="plain-syntax">[] = {</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"I"</span><span class="plain-syntax">, </span><span class="string-syntax">"II"</span><span class="plain-syntax">, </span><span class="string-syntax">"III"</span><span class="plain-syntax">, </span><span class="string-syntax">"IV"</span><span class="plain-syntax">, </span><span class="string-syntax">"V"</span><span class="plain-syntax">, </span><span class="string-syntax">"VI"</span><span class="plain-syntax">, </span><span class="string-syntax">"VII"</span><span class="plain-syntax">, </span><span class="string-syntax">"VIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"IX"</span><span class="plain-syntax">, </span><span class="string-syntax">"X"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"XI"</span><span class="plain-syntax">, </span><span class="string-syntax">"XII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIV"</span><span class="plain-syntax">, </span><span class="string-syntax">"XV"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVI"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XVIII"</span><span class="plain-syntax">, </span><span class="string-syntax">"XIX"</span><span class="plain-syntax">, </span><span class="string-syntax">"XX"</span><span class="plain-syntax"> };</span>
|
||||
|
@ -240,7 +241,7 @@ rough stages. Twenty is plenty.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">project</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">edition</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::syntax_tree</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Task::syntax_tree</span></span>:<br/><a href="1-wtc.html#SP14">§14</a><br/>Core Preform - <a href="1-cp2.html#SP2">§2</a><br/>Using Problems - <a href="2-up.html#SP3">§3</a>, <a href="2-up.html#SP3_3">§3.3</a><br/>Supplementary Issues - <a href="2-si.html#SP1">§1</a>, <a href="2-si.html#SP2">§2</a>, <a href="2-si.html#SP3">§3</a>, <a href="2-si.html#SP4">§4</a>, <a href="2-si.html#SP5">§5</a>, <a href="2-si.html#SP6">§6</a>, <a href="2-si.html#SP7">§7</a>, <a href="2-si.html#SP8">§8</a>, <a href="2-si.html#SP9">§9</a>, <a href="2-si.html#SP10">§10</a>, <a href="2-si.html#SP11">§11</a>, <a href="2-si.html#SP12">§12</a>, <a href="2-si.html#SP13">§13</a><br/>Problems With Source Text - <a href="2-pwst.html#SP1">§1</a><br/>Calculus Problems - <a href="2-cp.html#SP1">§1</a><br/>Kinds Problems - <a href="2-kp.html#SP1">§1</a><br/>Plugin Manager - <a href="3-pm.html#SP4_1">§4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Task::syntax_tree</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Task::syntax_tree</span></span>:<br/><a href="1-wtc.html#SP14">§14</a><br/>Core Preform - <a href="1-cp2.html#SP2">§2</a><br/>Using Problems - <a href="2-up.html#SP3">§3</a>, <a href="2-up.html#SP3_3">§3.3</a><br/>Supplementary Issues - <a href="2-si.html#SP1">§1</a>, <a href="2-si.html#SP2">§2</a>, <a href="2-si.html#SP3">§3</a>, <a href="2-si.html#SP4">§4</a>, <a href="2-si.html#SP5">§5</a>, <a href="2-si.html#SP6">§6</a>, <a href="2-si.html#SP7">§7</a>, <a href="2-si.html#SP8">§8</a>, <a href="2-si.html#SP9">§9</a>, <a href="2-si.html#SP10">§10</a>, <a href="2-si.html#SP11">§11</a>, <a href="2-si.html#SP12">§12</a>, <a href="2-si.html#SP13">§13</a><br/>Problems With Source Text - <a href="2-pwst.html#SP1">§1</a><br/>Calculus Problems - <a href="2-cp.html#SP1">§1</a><br/>Kinds Problems - <a href="2-kp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">latest_syntax_tree</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -554,7 +555,7 @@ flag stays <span class="extract"><span class="extract-syntax">FALSE</span></span
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresscurrent">wtc</li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-htc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-cp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresscurrent">wtc</li><li class="progresssection"><a href="1-htc.html">htc</a></li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresssection"><a href="1-itc.html">itc</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-htc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -139,7 +139,7 @@ below.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-pwst.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresscurrent">cp</li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-kp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-pwst.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresscurrent">cp</li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-kp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -158,7 +158,7 @@ below.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-cp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresscurrent">kp</li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="3-pm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-cp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresscurrent">kp</li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="3-pc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -493,7 +493,7 @@ group.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-si.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresscurrent">pwst</li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-cp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-si.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresscurrent">pwst</li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-cp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -409,7 +409,7 @@ own quaint syntax, and where there is syntax, there are error messages:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-sq.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresscurrent">si</li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-pwst.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-sq.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresscurrent">si</li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-pwst.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -204,7 +204,7 @@ actual constant 15 to the generic constant "number":
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-up.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresscurrent">sq</li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-si.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-up.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-up.html">up</a></li><li class="progresscurrent">sq</li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-si.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -386,7 +386,7 @@ a message which diagnoses the problem rather better.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-itc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">up</li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="2-sq.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-itc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">up</li><li class="progresssection"><a href="2-sq.html">sq</a></li><li class="progresssection"><a href="2-si.html">si</a></li><li class="progresssection"><a href="2-pwst.html">pwst</a></li><li class="progresssection"><a href="2-cp.html">cp</a></li><li class="progresssection"><a href="2-kp.html">kp</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="2-sq.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -21,6 +21,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
|
@ -57,32 +58,125 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Plugin Calls' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">core</a></li><li><a href="index.html#3">Chapter 3: Plugins</a></li><li><b>Plugin Calls</b></li></ul></div>
|
||||
<p class="purpose">The interface between the main compiler and its plugins.</p>
|
||||
<p class="purpose">Giving compiler features the ability to install plugin functions.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-pc.html#SP2">§2. Influencing core</a></li><li><a href="3-pc.html#SP3">§3. Influencing assertions</a></li><li><a href="3-pc.html#SP18">§18. Influencing values</a></li><li><a href="3-pc.html#SP23">§23. Influencing knowledge</a></li><li><a href="3-pc.html#SP36">§36. Influencing the imperative plugin</a></li><li><a href="3-pc.html#SP41">§41. Influencing the actions plugin</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="3-pc.html#SP5">§5. Influencing core</a></li><li><a href="3-pc.html#SP6">§6. Influencing assertions</a></li><li><a href="3-pc.html#SP21">§21. Influencing values</a></li><li><a href="3-pc.html#SP26">§26. Influencing knowledge</a></li><li><a href="3-pc.html#SP39">§39. Influencing the imperative module</a></li><li><a href="3-pc.html#SP44">§44. Influencing the actions feature</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The following set of functions is an API for the main compiler to consult
|
||||
with the plugins; put another way, it is also an API for the plugins to
|
||||
influence the main compiler. They do so by adding plugs to the relevant rulebooks:
|
||||
see <a href="3-pm.html#SP8" class="internal">PluginManager::plug</a>.
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The three Inform compiler tools <a href="../inform7/index.html" class="internal">inform7</a>, <a href="../inbuild/index.html" class="internal">inbuild</a> and <a href="../inter/index.html" class="internal">inter</a>
|
||||
share a set of named compiler features, managed by <a href="../arch-module/3-fm.html" class="internal">Feature Manager (in arch)</a>.
|
||||
At any given time these can be active or inactive.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Nothing can prevent this from being a big old miscellany, so we take them by
|
||||
<p class="commentary">In <a href="../inform7/index.html" class="internal">inform7</a>, features gain further abilities: they can attach storage to
|
||||
certain internal data structures, and they can provide plugin functions which
|
||||
interfere with the normal running of the compiler.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The names of these features are hard-wired into the compiler rather than being
|
||||
stored in Preform grammar, and they therefore cannot be translated out of
|
||||
English. But this is intentional. Dependencies on compiler features are managed
|
||||
by name inside the <a href="../supervisor-module/index.html" class="internal">supervisor</a> module, and metadata for projects and kits
|
||||
refers to those names. So they have to be the same regardless of the language
|
||||
being used in the project. But it hardly matters, because these names are
|
||||
invisible to all but the most expert users.
|
||||
</p>
|
||||
|
||||
<p class="commentary">However, because it is possible to have headings in Inform source text which
|
||||
restrict material according to whether a feature is active, we do need a
|
||||
Preform nonterminal to parse those names. Here it is:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><language-element></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TEMPORARY_TEXT</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax">)</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">WRITE_TO</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax">, </span><span class="Preform-string-syntax">"%W"</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">compiler_feature</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">F</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Features::from_name</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">DISCARD_TEXT</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax">)</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">F</span><span class="Preform-plain-syntax">) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">F</span><span class="Preform-plain-syntax">-></span><span class="Preform-identifier-syntax">active</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) {</span>
|
||||
<span class="Preform-plain-syntax"> ==> { </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">F</span><span class="Preform-plain-syntax"> };</span>
|
||||
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>
|
||||
<span class="Preform-plain-syntax"> ==> { </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">F</span><span class="Preform-plain-syntax"> };</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
<span class="Preform-plain-syntax"> ==> { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
|
||||
<span class="Preform-plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>As noted above, features can provide plugin functions, which go into what
|
||||
we will call "plugin rulebooks" — there's a mixed metaphor here, but the idea
|
||||
is that they behave like Inform rulebooks. When a rulebook is called, the
|
||||
compiler works through each plug until one of them returns something other
|
||||
than <span class="extract"><span class="Preform-extract-syntax">FALSE</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Features should add plugins in their activation functions, by calling
|
||||
<a href="3-pc.html#SP2" class="internal">PluginCalls::plug</a>, which has an interestingly vague type. The next
|
||||
screenful of code looks like something of a workout for the C typechecker, but
|
||||
it compiles under <span class="extract"><span class="Preform-extract-syntax">clang</span></span> without even the <span class="extract"><span class="Preform-extract-syntax">-Wpedantic</span></span> warning, and honestly
|
||||
you're barely living as a C programmer if you never generate that one.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plugin_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">NO_DEFINED_PLUG_VALUES</span><span class="plain-syntax">+1]; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">void</span></span><span class="comment-syntax">, reprehensibly</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PluginCalls::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><=</span><span class="identifier-syntax">NO_DEFINED_PLUG_VALUES</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">plugin_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">R</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">code</span><span class="plain-syntax"> > </span><span class="identifier-syntax">NO_DEFINED_PLUG_VALUES</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not a plugin call"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vR</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">vR</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">, </span><span class="identifier-syntax">plugin_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">code</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The functions in <a href="3-pc.html" class="internal">Plugin Calls</a> then make use of these macros, which are
|
||||
the easiest way to persuade the C typechecker to allow variable arguments to
|
||||
be passed in a portable way. Similarly, there are two macros not one because
|
||||
C does not allow a void variable argument list.
|
||||
</p>
|
||||
|
||||
<p class="commentary">We must take care that the variables introduced in the macro body do not mask
|
||||
existing variables used in the arguments; the only way to do this is to give
|
||||
them implausible names.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">code</span><span class="plain-syntax">, </span><span class="identifier-syntax">args</span><span class="plain-syntax">...) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">; </span><span class="comment-syntax"> no argument can have this name</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">, </span><span class="identifier-syntax">plugin_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">code</span><span class="plain-syntax">]) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">R_plugin_rule_ZOOGE</span><span class="plain-syntax">)() = (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*)()) </span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">; </span><span class="comment-syntax"> or this one</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q_plugin_return_PLUGH</span><span class="plain-syntax"> = (*</span><span class="identifier-syntax">R_plugin_rule_ZOOGE</span><span class="plain-syntax">)(</span><span class="identifier-syntax">args</span><span class="plain-syntax">); </span><span class="comment-syntax"> or this</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Q_plugin_return_PLUGH</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q_plugin_return_PLUGH</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">PLUGINS_CALLV</span><span class="plain-syntax">(</span><span class="identifier-syntax">code</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">, </span><span class="identifier-syntax">plugin_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">code</span><span class="plain-syntax">]) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">R_plugin_rule_ZOOGE</span><span class="plain-syntax">)() = (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*)()) </span><span class="identifier-syntax">R_plugin_pointer_XYZZY</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q_plugin_return_PLUGH</span><span class="plain-syntax"> = (*</span><span class="identifier-syntax">R_plugin_rule_ZOOGE</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">Q_plugin_return_PLUGH</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q_plugin_return_PLUGH</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>Nothing can prevent this from being a big old miscellany, so we take them by
|
||||
compiler module, and within each module in alphabetical order.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Influencing core. </b>Called from <a href="1-wtc.html#SP5" class="internal">Task::advance_stage_to</a>. This allows plugins to run additional
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Influencing core. </b>Called from <a href="1-wtc.html#SP5" class="internal">Task::advance_stage_to</a>. This allows features to run additional
|
||||
production-line steps in compilation, and that is done mostly at the Inter
|
||||
generation stage, to add extra arrays or functions needed at run-time to
|
||||
support whatever feature the plugin implements. For example, the mapping plugin
|
||||
compiles an array to hold the map during stage <span class="extract"><span class="extract-syntax">INTER1_CSEQ</span></span>.
|
||||
generation stage, to add extra arrays or functions needed at runtime.
|
||||
For example, the mapping feature compiles an array to hold the map during
|
||||
stage <span class="extract"><span class="extract-syntax">INTER1_CSEQ</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Because the following is called at the end of every main stage of compilation
|
||||
except for <span class="extract"><span class="extract-syntax">FINISHED_CSEQ</span></span>, it is called about 15 times in all, so it is
|
||||
essential to check <span class="extract"><span class="extract-syntax">stage</span></span> and act only on the right occasion. <span class="extract"><span class="extract-syntax">debugging</span></span> is
|
||||
<span class="extract"><span class="extract-syntax">TRUE</span></span> if this is a debugging run, and allows a plugin to generate diagnostic
|
||||
features if so.
|
||||
<span class="extract"><span class="extract-syntax">TRUE</span></span> if this is a debugging run.
|
||||
</p>
|
||||
|
||||
<p class="commentary">A function attached to this plug should then ideally divide its work up into
|
||||
|
@ -100,9 +194,9 @@ takes will (if appreciable) be included in the <a href="../inform7/M-pm.html" cl
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">timer</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Influencing assertions. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask if this node is a noun
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Influencing assertions. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask if this node is a noun
|
||||
phrase with special significance: for example, "below" is significant to the
|
||||
mapping plugin. If so, the plugin should set the subject of the node to say
|
||||
mapping feature. If so, the plugin should set the subject of the node to say
|
||||
what it refers to, and return <span class="extract"><span class="extract-syntax">TRUE</span></span>.
|
||||
</p>
|
||||
|
||||
|
@ -113,8 +207,8 @@ what it refers to, and return <span class="extract"><span class="extract-syntax"
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">ACT_ON_SPECIAL_NPS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>Called from <a href="../assertions-module/4-ass2.html" class="internal">Assemblies (in assertions)</a>. Body-snatching is used only by the
|
||||
"player" plugin, and is explained there; it handles the consequences of sentences
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Called from <a href="../assertions-module/4-ass2.html" class="internal">Assemblies (in assertions)</a>. Body-snatching is used only by the
|
||||
"player" feature, and is explained there; it handles the consequences of sentences
|
||||
like "The player is Lord Collingwood".
|
||||
</p>
|
||||
|
||||
|
@ -126,7 +220,7 @@ like "The player is Lord Collingwood".
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">DETECT_BODYSNATCHING_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">snatcher</span><span class="plain-syntax">, </span><span class="identifier-syntax">counterpart</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to see if any plugin wants to
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to see if any plugin wants to
|
||||
intepret a sentence its own way, either taking direct action or issuing a
|
||||
more nuanced problem message than the usual machinery would have issued.
|
||||
If so, the plugin should return <span class="extract"><span class="extract-syntax">TRUE</span></span>, which both ensures that no other
|
||||
|
@ -141,8 +235,8 @@ with the sentence.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when a copular sentence may be
|
||||
creating something. For example, the actions plugin needs this.
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when a copular sentence may be
|
||||
creating something. For example, the actions feature needs this.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CREATION_PLUG</span>
|
||||
|
@ -152,8 +246,8 @@ creating something. For example, the actions plugin needs this.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when an unfamiliar node type appears
|
||||
where a property value might be expected. For example, the actions plugin
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when an unfamiliar node type appears
|
||||
where a property value might be expected. For example, the actions feature
|
||||
uses this to deal with setting a property to an <span class="extract"><span class="extract-syntax">ACTION_NT</span></span> node. To
|
||||
intervene, set the node specification using <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a>
|
||||
and return <span class="extract"><span class="extract-syntax">TRUE</span></span>; or return <span class="extract"><span class="extract-syntax">FALSE</span></span> to let nature take its course.
|
||||
|
@ -166,10 +260,10 @@ and return <span class="extract"><span class="extract-syntax">TRUE</span></span>
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when an instance is being made in
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when an instance is being made in
|
||||
an assembly, and its name may involve a genitive. For example, if the
|
||||
assembly says "every person has a nose", then normally this would be called
|
||||
something like "Mr Rogers's nose"; but the player plugin uses the following
|
||||
something like "Mr Rogers's nose"; but the player feature uses the following
|
||||
to have "your nose" in the case of the player instance.
|
||||
</p>
|
||||
|
||||
|
@ -181,9 +275,9 @@ to have "your nose" in the case of the player instance.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">IRREGULAR_GENITIVE_IN_ASSEMBLY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">genitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">propriety</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Called from <a href="../assertions-module/2-bv.html" class="internal">Booting Verbs (in assertions)</a> to give each plugin a chance to
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>Called from <a href="../assertions-module/2-bv.html" class="internal">Booting Verbs (in assertions)</a> to give each plugin a chance to
|
||||
create any special sentence meanings it would like to. For example, the
|
||||
sounds plugin defines a special form of assertion sentence this way. The
|
||||
sounds feature defines a special form of assertion sentence this way. The
|
||||
plugin should always return <span class="extract"><span class="extract-syntax">FALSE</span></span>, since otherwise it may gazump other
|
||||
plugins and cause them to stop working.
|
||||
</p>
|
||||
|
@ -195,11 +289,11 @@ plugins and cause them to stop working.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALLV</span><span class="plain-syntax">(</span><span class="constant-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when it seems that the author wants
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when it seems that the author wants
|
||||
to create a property of something with a sentence like "A container has a
|
||||
number called security rating." A plugin can intervene and act on that,
|
||||
returning <span class="extract"><span class="extract-syntax">TRUE</span></span> to stop the usual machinery. For example, the actions
|
||||
plugin does this so that "The going action has a number called celerity"
|
||||
feature does this so that "The going action has a number called celerity"
|
||||
can be intercepted to create an action variable, not a property.
|
||||
</p>
|
||||
|
||||
|
@ -210,7 +304,7 @@ can be intercepted to create an action variable, not a property.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">OFFERED_PROPERTY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">what</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when the specification pseudo-variable
|
||||
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when the specification pseudo-variable
|
||||
is about to be set for something; the plugin can then intercept this.
|
||||
</p>
|
||||
|
||||
|
@ -221,9 +315,9 @@ is about to be set for something; the plugin can then intercept this.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask plugins if a noun phrase
|
||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask plugins if a noun phrase
|
||||
has a noun implicit within it, even though none is explicitly given. For
|
||||
example, the player plugin uses this to say that "initially carried" means
|
||||
example, the player feature uses this to say that "initially carried" means
|
||||
"...by the player", and sets the subject of the node to be the player character
|
||||
instance.
|
||||
</p>
|
||||
|
@ -235,8 +329,8 @@ instance.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">REFINE_IMPLICIT_NOUN_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>Called from <a href="../assertions-module/2-cs.html" class="internal">Classifying Sentences (in assertions)</a> to give plugins the chance
|
||||
of an early look at a newly-read assertion. For example, the map plugin uses
|
||||
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b>Called from <a href="../assertions-module/2-cs.html" class="internal">Classifying Sentences (in assertions)</a> to give plugins the chance
|
||||
of an early look at a newly-read assertion. For example, the map feature uses
|
||||
this to spot that a sentence will create a new direction.
|
||||
</p>
|
||||
|
||||
|
@ -247,7 +341,7 @@ this to spot that a sentence will create a new direction.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_ASSERTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </b>Called from <a href="../assertions-module/8-terr.html" class="internal">The Equality Relation Revisited (in assertions)</a> when we have
|
||||
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b>Called from <a href="../assertions-module/8-terr.html" class="internal">The Equality Relation Revisited (in assertions)</a> when we have
|
||||
to decide if it's valid to ask or declare that two things are the same.
|
||||
Returning <span class="extract"><span class="extract-syntax">TRUE</span></span> says that it is always valid; returning <span class="extract"><span class="extract-syntax">FALSE</span></span> leaves
|
||||
it to the regular machinery. This plug can therefore only be used to permit
|
||||
|
@ -261,7 +355,7 @@ additional usages, not to restrict existing ones.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">K2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to warn plugins that a variable
|
||||
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to warn plugins that a variable
|
||||
is now being assigned a value by an explicit assertion sentence.
|
||||
</p>
|
||||
|
||||
|
@ -272,7 +366,7 @@ is now being assigned a value by an explicit assertion sentence.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_VALUE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b>Called from <a href="../assertions-module/5-rf.html" class="internal">Rule Family (in assertions)</a> to warn plugins that a new rule
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>Called from <a href="../assertions-module/5-rf.html" class="internal">Rule Family (in assertions)</a> to warn plugins that a new rule
|
||||
definition has been found in the source text.
|
||||
</p>
|
||||
|
||||
|
@ -283,7 +377,7 @@ definition has been found in the source text.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_RULE_DEFN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b>Called from <a href="../assertions-module/5-rcd.html" class="internal">Runtime Context Data (in assertions)</a> to warn plugins that
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b>Called from <a href="../assertions-module/5-rcd.html" class="internal">Runtime Context Data (in assertions)</a> to warn plugins that
|
||||
a new set of runtime context data is being made.
|
||||
</p>
|
||||
|
||||
|
@ -294,9 +388,9 @@ a new set of runtime context data is being made.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_RCD_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. Influencing values. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to help decide whether values
|
||||
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. Influencing values. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to help decide whether values
|
||||
of the same kind would be equal if evaluated at runtime. For example, the
|
||||
"scenes" plugin uses this to determine if two <span class="extract"><span class="extract-syntax">K_scene</span></span> constants are equal.
|
||||
scenes feature uses this to determine if two <span class="extract"><span class="extract-syntax">K_scene</span></span> constants are equal.
|
||||
To make a decision, set <span class="extract"><span class="extract-syntax">rv</span></span> to either <span class="extract"><span class="extract-syntax">TRUE</span></span> or <span class="extract"><span class="extract-syntax">FALSE</span></span> and return <span class="extract"><span class="extract-syntax">TRUE</span></span>.
|
||||
To make no decision, return <span class="extract"><span class="extract-syntax">FALSE</span></span>.
|
||||
</p>
|
||||
|
@ -308,7 +402,7 @@ To make no decision, return <span class="extract"><span class="extract-syntax">F
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">c1</span><span class="plain-syntax">, </span><span class="identifier-syntax">c2</span><span class="plain-syntax">, </span><span class="identifier-syntax">rv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to compile rvalues in
|
||||
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to compile rvalues in
|
||||
eccentric ways of their own: not in fact just for the whimsy of it, but to
|
||||
make it possible for plugins to support base kinds of their own. For example,
|
||||
the "actions" plugin needs this to deal with the "stored action" kind.
|
||||
|
@ -321,7 +415,7 @@ the "actions" plugin needs this to deal with the "stored action" kind.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b>Called from <a href="../values-module/2-cnd.html" class="internal">Conditions (in values)</a> to allow plugins to compile conditions in
|
||||
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. </b>Called from <a href="../values-module/2-cnd.html" class="internal">Conditions (in values)</a> to allow plugins to compile conditions in
|
||||
their own way. For example, the "actions" plugin needs this to compile matches
|
||||
of the current action against an action pattern.
|
||||
</p>
|
||||
|
@ -333,9 +427,9 @@ of the current action against an action pattern.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_CONDITION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. </b>Called from <a href="../values-module/2-spc.html" class="internal">Specifications (in values)</a> to ask if there is some reason why
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. </b>Called from <a href="../values-module/2-spc.html" class="internal">Specifications (in values)</a> to ask if there is some reason why
|
||||
a rule about <span class="extract"><span class="extract-syntax">I1</span></span> should be thought broader in scope than one about <span class="extract"><span class="extract-syntax">I2</span></span>. This
|
||||
is used by the regions plugin when one is a sub-region of the other. This is
|
||||
is used by the regions feature when one is a sub-region of the other. This is
|
||||
expected to behave as a <span class="extract"><span class="extract-syntax">strcmp</span></span>-like sorting function, with a positive
|
||||
return value saying <span class="extract"><span class="extract-syntax">I1</span></span> is broader, negative <span class="extract"><span class="extract-syntax">I2</span></span>, or zero that they are equal.
|
||||
</p>
|
||||
|
@ -347,11 +441,11 @@ return value saying <span class="extract"><span class="extract-syntax">I1</span>
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">MORE_SPECIFIC_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I1</span><span class="plain-syntax">, </span><span class="identifier-syntax">I2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. </b>Called from <a href="../values-module/4-cad.html" class="internal">Constants and Descriptions (in values)</a> to give plugins a chance
|
||||
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>§25. </b>Called from <a href="../values-module/4-cad.html" class="internal">Constants and Descriptions (in values)</a> to give plugins a chance
|
||||
to parse text which might otherwise be meaningless (or mean something different)
|
||||
and make it a "composite noun-quantifier" such as "everywhere" or "nothing".
|
||||
The main compiler does not recognise "everywhere" because it has no concept
|
||||
of space, but the spatial plugin does, and this is how.
|
||||
of space, but the spatial feature does, and this is how.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">PARSE_COMPOSITE_NQS_PLUG</span>
|
||||
|
@ -362,7 +456,7 @@ of space, but the spatial plugin does, and this is how.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PARSE_COMPOSITE_NQS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">DW</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantifier_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">some_kind</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. Influencing knowledge. </b>Called from <a href="../knowledge-module/5-tmw.html" class="internal">The Model World (in knowledge)</a> to invite the plugin to participate
|
||||
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>§26. Influencing knowledge. </b>Called from <a href="../knowledge-module/5-tmw.html" class="internal">The Model World (in knowledge)</a> to invite the plugin to participate
|
||||
in stages I to V of the completion process. This may involve using contextual
|
||||
reasoning to draw further inferences.
|
||||
</p>
|
||||
|
@ -374,7 +468,7 @@ reasoning to draw further inferences.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">stage</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to invite the plugin to
|
||||
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>§27. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to invite the plugin to
|
||||
create any additional inference subjects it might want to reason about. In
|
||||
practice, this tends to be used to create preliminary subjects to stand in
|
||||
for significant kinds before those kinds are ready to be created.
|
||||
|
@ -387,7 +481,7 @@ for significant kinds before those kinds are ready to be created.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALLV</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>§25. </b>Called from <a href="../knowledge-module/5-ia.html" class="internal">Indefinite Appearance (in knowledge)</a> to ask the plugins what
|
||||
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>§28. </b>Called from <a href="../knowledge-module/5-ia.html" class="internal">Indefinite Appearance (in knowledge)</a> to ask the plugins what
|
||||
inferences, if any, to draw from a double-quoted text standing as an entire
|
||||
sentence. The <span class="extract"><span class="extract-syntax">infs</span></span> is the subject which was being talked about at the time
|
||||
the text was quoted, and therefore presumably is what the text should describe.
|
||||
|
@ -400,10 +494,10 @@ the text was quoted, and therefore presumably is what the text should describe.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">DEFAULT_APPEARANCE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">txt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>§26. </b>Called from <a href="../knowledge-module/5-inf.html" class="internal">Inferences (in knowledge)</a> when an inference is drawn about
|
||||
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>§29. </b>Called from <a href="../knowledge-module/5-inf.html" class="internal">Inferences (in knowledge)</a> when an inference is drawn about
|
||||
something. This does not, of course, necessarily mean that this will actually
|
||||
be the property of something: the inference might turn out to be mistaken. The
|
||||
mapping plugin uses this to infer further that if something is said to be a
|
||||
mapping feature uses this to infer further that if something is said to be a
|
||||
map connection to somewhere else, then it is probably a room.
|
||||
</p>
|
||||
|
||||
|
@ -414,7 +508,7 @@ map connection to somewhere else, then it is probably a room.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">INFERENCE_DRAWN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>§27. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a>. Early in the run, before some kinds
|
||||
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>§30. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a>. Early in the run, before some kinds
|
||||
are created, placeholder inference subjects are created to stand in for them;
|
||||
this call enables plugins to recognise certain texts as referring to those.
|
||||
</p>
|
||||
|
@ -426,9 +520,9 @@ this call enables plugins to recognise certain texts as referring to those.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>§28. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> to warn plugins about a new kind,
|
||||
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>§31. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> to warn plugins about a new kind,
|
||||
which in practice enables them to spot from the name that it is actually a kind
|
||||
they want to provide built-in support for: thus the actions plugin reacts to
|
||||
they want to provide built-in support for: thus the actions feature reacts to
|
||||
the name "stored action", for example. <span class="extract"><span class="extract-syntax">K</span></span> is the newcomer, <span class="extract"><span class="extract-syntax">super</span></span> its super-kind,
|
||||
if any; <span class="extract"><span class="extract-syntax">d</span></span> and <span class="extract"><span class="extract-syntax">W</span></span> are alternate forms of that name — <span class="extract"><span class="extract-syntax">d</span></span> will be useful if the
|
||||
kind was created by a kit (such as "number"), <span class="extract"><span class="extract-syntax">W</span></span> if it came from Inform 7
|
||||
|
@ -442,8 +536,8 @@ source text (such as "container").
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">d</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>§29. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that a new instance has
|
||||
been created. For example, the figures plugin needs to know this so that it
|
||||
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>§32. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that a new instance has
|
||||
been created. For example, the figures feature needs to know this so that it
|
||||
can see when a new illustration has been created.
|
||||
</p>
|
||||
|
||||
|
@ -459,8 +553,8 @@ sure you're not dealing with an object.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>§30. </b>Called from <a href="../knowledge-module/4-pp.html" class="internal">Property Permissions (in knowledge)</a> to warn plugins that a subject
|
||||
has been given permission to hold a property; the parsing plugin, for example,
|
||||
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>§33. </b>Called from <a href="../knowledge-module/4-pp.html" class="internal">Property Permissions (in knowledge)</a> to warn plugins that a subject
|
||||
has been given permission to hold a property; the parsing feature, for example,
|
||||
uses this to attach a visibility flag.
|
||||
</p>
|
||||
|
||||
|
@ -471,7 +565,7 @@ uses this to attach a visibility flag.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_PERMISSION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>§31. </b>Called from <a href="../knowledge-module/3-prp.html" class="internal">Properties (in knowledge)</a> to warn plugins that a property has
|
||||
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>§34. </b>Called from <a href="../knowledge-module/3-prp.html" class="internal">Properties (in knowledge)</a> to warn plugins that a property has
|
||||
been created, which they can use to spot properties with special significance
|
||||
to them.
|
||||
</p>
|
||||
|
@ -483,7 +577,7 @@ to them.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>§32. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to warn plugins that a subject
|
||||
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>§35. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to warn plugins that a subject
|
||||
has been created, which they can use to spot subjects with special significance
|
||||
to them.
|
||||
</p>
|
||||
|
@ -495,7 +589,7 @@ to them.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>§33. </b>Called from <a href="../knowledge-module/2-nv.html" class="internal">Nonlocal Variables (in knowledge)</a> to warn plugins that a new
|
||||
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>§36. </b>Called from <a href="../knowledge-module/2-nv.html" class="internal">Nonlocal Variables (in knowledge)</a> to warn plugins that a new
|
||||
variable has been created, which they can use to spot variables with special
|
||||
significance to them.
|
||||
</p>
|
||||
|
@ -507,7 +601,7 @@ significance to them.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>§34. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that the kind of an
|
||||
<p class="commentary firstcommentary"><a id="SP37" class="paragraph-anchor"></a><b>§37. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that the kind of an
|
||||
instance is about to be set. This happens most often when the instance is
|
||||
created, but can also happen again, refining the kind to a subkind, when
|
||||
the instance is an object.
|
||||
|
@ -520,7 +614,7 @@ the instance is an object.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>§35. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> when one kind of object is made a
|
||||
<p class="commentary firstcommentary"><a id="SP38" class="paragraph-anchor"></a><b>§38. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> when one kind of object is made a
|
||||
subkind of another, as for example when "container" is a made a subkind of
|
||||
"thing". The plugin should return <span class="extract"><span class="extract-syntax">TRUE</span></span> if it wishes to forbid this,
|
||||
and if so, it had better throw a problem message, or the user will be
|
||||
|
@ -538,8 +632,8 @@ regions plugin does with the "region" kind.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">sub</span><span class="plain-syntax">, </span><span class="identifier-syntax">super</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP36" class="paragraph-anchor"></a><b>§36. Influencing the imperative plugin. </b>Called from <a href="../assertions-module/6-rb.html" class="internal">Rule Bookings (in assertions)</a> to give plugins a chance to move
|
||||
automatically placed rules from one rulebook to another. The actions plugin
|
||||
<p class="commentary firstcommentary"><a id="SP39" class="paragraph-anchor"></a><b>§39. Influencing the imperative module. </b>Called from <a href="../assertions-module/6-rb.html" class="internal">Rule Bookings (in assertions)</a> to give plugins a chance to move
|
||||
automatically placed rules from one rulebook to another. The actions feature
|
||||
uses this to break up what would otherwise be unwieldy before and after
|
||||
rulebooks into smaller ones for each action.
|
||||
</p>
|
||||
|
@ -555,7 +649,7 @@ and return <span class="extract"><span class="extract-syntax">TRUE</span></span>
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PLACE_RULE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_owner</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP37" class="paragraph-anchor"></a><b>§37. </b>Called from <a href="../assertions-module/6-rlb.html" class="internal">Rulebooks (in assertions)</a>. This is very similar, but runs in all cases,
|
||||
<p class="commentary firstcommentary"><a id="SP40" class="paragraph-anchor"></a><b>§40. </b>Called from <a href="../assertions-module/6-rlb.html" class="internal">Rulebooks (in assertions)</a>. This is very similar, but runs in all cases,
|
||||
and not only for automatic placement.
|
||||
</p>
|
||||
|
||||
|
@ -566,7 +660,7 @@ and not only for automatic placement.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">RULE_PLACEMENT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">side</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref_rule</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP38" class="paragraph-anchor"></a><b>§38. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP41" class="paragraph-anchor"></a><b>§41. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">COMPILE_TEST_HEAD_PLUG</span>
|
||||
</pre>
|
||||
|
@ -575,7 +669,7 @@ and not only for automatic placement.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_TEST_HEAD_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">tests</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP39" class="paragraph-anchor"></a><b>§39. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP42" class="paragraph-anchor"></a><b>§42. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">COMPILE_TEST_TAIL_PLUG</span>
|
||||
</pre>
|
||||
|
@ -584,7 +678,7 @@ and not only for automatic placement.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_TEST_TAIL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP40" class="paragraph-anchor"></a><b>§40. </b>Called from <a href="../imperative-module/5-cii.html" class="internal">Compile Invocations Inline (in imperative)</a>, but only when an
|
||||
<p class="commentary firstcommentary"><a id="SP43" class="paragraph-anchor"></a><b>§43. </b>Called from <a href="../imperative-module/5-cii.html" class="internal">Compile Invocations Inline (in imperative)</a>, but only when an
|
||||
annotation arises which the regular machinery doesn't know how to handle.
|
||||
This is currently only used by <a href="../if-module/3-tr.html" class="internal">Timed Rules (in if)</a>.
|
||||
</p>
|
||||
|
@ -596,12 +690,12 @@ This is currently only used by <a href="../if-module/3-tr.html" class="internal"
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ANNOTATION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP41" class="paragraph-anchor"></a><b>§41. Influencing the actions plugin. </b>We now have a whole run of functions called only by the actions plugin, and
|
||||
<p class="commentary firstcommentary"><a id="SP44" class="paragraph-anchor"></a><b>§44. Influencing the actions feature. </b>We now have a whole run of functions called only by the actions feature, and
|
||||
therefore only when it is active.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Called from <a href="../if-module/4-ap.html" class="internal">Actions Plugin (in if)</a> to signal that a new action has been
|
||||
created. For example, the going plugin uses this to spot the arrival of "going".
|
||||
created. For example, the going feature uses this to spot the arrival of "going".
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NEW_ACTION_NOTIFY_PLUG</span>
|
||||
|
@ -611,7 +705,7 @@ created. For example, the going plugin uses this to spot the arrival of "going".
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_ACTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP42" class="paragraph-anchor"></a><b>§42. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to invite plugins to change the
|
||||
<p class="commentary firstcommentary"><a id="SP45" class="paragraph-anchor"></a><b>§45. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to invite plugins to change the
|
||||
action pattern clause ID associated with a given action variable. This may be
|
||||
needed in order to cross-reference between multiple such clauses, as with
|
||||
the going action variables.
|
||||
|
@ -625,7 +719,7 @@ the going action variables.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">DIVERT_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">stv</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP43" class="paragraph-anchor"></a><b>§43. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to ask plugins to print a helpful
|
||||
<p class="commentary firstcommentary"><a id="SP46" class="paragraph-anchor"></a><b>§46. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to ask plugins to print a helpful
|
||||
name for the debugging log for any new clause ID <span class="extract"><span class="extract-syntax">C</span></span> which they have created.
|
||||
</p>
|
||||
|
||||
|
@ -636,7 +730,7 @@ name for the debugging log for any new clause ID <span class="extract"><span cla
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">WRITE_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP44" class="paragraph-anchor"></a><b>§44. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to ask for the <span class="extract"><span class="extract-syntax">*_APCA</span></span> aspect
|
||||
<p class="commentary firstcommentary"><a id="SP47" class="paragraph-anchor"></a><b>§47. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to ask for the <span class="extract"><span class="extract-syntax">*_APCA</span></span> aspect
|
||||
for the clause ID <span class="extract"><span class="extract-syntax">C</span></span>, where <span class="extract"><span class="extract-syntax">C</span></span> is a new clause ID created by the plugin. If
|
||||
this is not given, then the aspect will be <span class="extract"><span class="extract-syntax">MISC_APCA</span></span>.
|
||||
</p>
|
||||
|
@ -648,7 +742,7 @@ this is not given, then the aspect will be <span class="extract"><span class="ex
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">ASPECT_OF_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP45" class="paragraph-anchor"></a><b>§45. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to give plugins a chance to
|
||||
<p class="commentary firstcommentary"><a id="SP48" class="paragraph-anchor"></a><b>§48. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to give plugins a chance to
|
||||
decide which AP is more specific, on the basis of the extra clauses defined
|
||||
in the plugin.
|
||||
</p>
|
||||
|
@ -672,7 +766,7 @@ to let the usual machinery take its course.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPARE_AP_SPECIFICITY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap1</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap2</span><span class="plain-syntax">, </span><span class="identifier-syntax">rv</span><span class="plain-syntax">, </span><span class="identifier-syntax">ignore_in</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP46" class="paragraph-anchor"></a><b>§46. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to notify plugins that a clause
|
||||
<p class="commentary firstcommentary"><a id="SP49" class="paragraph-anchor"></a><b>§49. </b>Called from <a href="../if-module/4-apc.html" class="internal">Action Pattern Clauses (in if)</a> to notify plugins that a clause
|
||||
matching an action variable has just been added to an action pattern.
|
||||
</p>
|
||||
|
||||
|
@ -683,9 +777,9 @@ matching an action variable has just been added to an action pattern.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP47" class="paragraph-anchor"></a><b>§47. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to give plugins a chance to intervene in
|
||||
<p class="commentary firstcommentary"><a id="SP50" class="paragraph-anchor"></a><b>§50. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to give plugins a chance to intervene in
|
||||
the normal process of evaluating the meaning of text in an action pattern
|
||||
clause: for example, in parsing "going nowhere", the going plugin uses this
|
||||
clause: for example, in parsing "going nowhere", the going feature uses this
|
||||
to detect that the <span class="extract"><span class="extract-syntax">NOUN_AP_CLAUSE</span></span>, with text "nowhere", should not be parsed
|
||||
normally. What it does it to set a bit in the bitmap <span class="extract"><span class="extract-syntax">bits</span></span>, which it will pick
|
||||
up again and act upon when reacting to <span class="extract"><span class="extract-syntax">ACT_ON_ANL_ENTRY_OPTIONS_PLUG</span></span>.
|
||||
|
@ -702,7 +796,7 @@ text of the clause in the normal way.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PARSE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">bits</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP48" class="paragraph-anchor"></a><b>§48. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to give plugins a chance to intervene in
|
||||
<p class="commentary firstcommentary"><a id="SP51" class="paragraph-anchor"></a><b>§51. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to give plugins a chance to intervene in
|
||||
the type-checking process for a clause. Ordinarily, this would just check that
|
||||
the contents have the right kind: if matching an action variable of kind <span class="extract"><span class="extract-syntax">K</span></span>
|
||||
then it must be a value compatible with <span class="extract"><span class="extract-syntax">K</span></span> or a description of such.
|
||||
|
@ -720,7 +814,7 @@ or <span class="extract"><span class="extract-syntax">FALSE</span></span> (it is
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">VALIDATE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">outcome</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP49" class="paragraph-anchor"></a><b>§49. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to deal with the options bitmap set
|
||||
<p class="commentary firstcommentary"><a id="SP52" class="paragraph-anchor"></a><b>§52. </b>Called from <a href="../if-module/4-pc.html" class="internal">Parse Clauses (in if)</a> to deal with the options bitmap set
|
||||
previously by a <span class="extract"><span class="extract-syntax">PARSE_AP_CLAUSE_PLUG</span></span> call: see above.
|
||||
</p>
|
||||
|
||||
|
@ -731,7 +825,7 @@ previously by a <span class="extract"><span class="extract-syntax">PARSE_AP_CLAU
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">ACT_ON_ANL_ENTRY_OPTIONS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry_options</span><span class="plain-syntax">, </span><span class="identifier-syntax">fail</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP50" class="paragraph-anchor"></a><b>§50. </b>Called from <a href="../imperative-module/2-map.html" class="internal">Matching Action Patterns (in imperative)</a> when assembling the requirement
|
||||
<p class="commentary firstcommentary"><a id="SP53" class="paragraph-anchor"></a><b>§53. </b>Called from <a href="../imperative-module/2-map.html" class="internal">Matching Action Patterns (in imperative)</a> when assembling the requirement
|
||||
clauses for compiling a mattern match; this gives plugins a chance to act
|
||||
extra stipulations, which are not explicit in clauses already in the pattern.
|
||||
</p>
|
||||
|
@ -744,7 +838,7 @@ extra stipulations, which are not explicit in clauses already in the pattern.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">SET_PATTERN_MATCH_REQUIREMENTS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">cpm</span><span class="plain-syntax">, </span><span class="identifier-syntax">needed</span><span class="plain-syntax">, </span><span class="identifier-syntax">needed_apoc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP51" class="paragraph-anchor"></a><b>§51. </b>Called from <a href="../imperative-module/2-map.html" class="internal">Matching Action Patterns (in imperative)</a> when compiling any additional
|
||||
<p class="commentary firstcommentary"><a id="SP54" class="paragraph-anchor"></a><b>§54. </b>Called from <a href="../imperative-module/2-map.html" class="internal">Matching Action Patterns (in imperative)</a> when compiling any additional
|
||||
requirements set by <span class="extract"><span class="extract-syntax">SET_PATTERN_MATCH_REQUIREMENTS_PLUG</span></span>.
|
||||
</p>
|
||||
|
||||
|
@ -756,7 +850,7 @@ requirements set by <span class="extract"><span class="extract-syntax">SET_PATTE
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-pm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-pm.html">pm</a></li><li class="progresscurrent">pc</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-kp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">pc</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -96,13 +96,11 @@ needed to make Inform's many concepts work at run-time.
|
|||
</li></ul>
|
||||
<p class="commentary">There are then two expansion packs, as it were: the <a href="../if-module/index.html" class="internal">if</a> and <a href="../multimedia-module/index.html" class="internal">multimedia</a>
|
||||
modules, which do nothing essential but add support for interactive fiction
|
||||
and for sound and images respectively. These are implemented very largely
|
||||
as sets of <a href="3-pm.html" class="internal">Chapter 3: Plugins</a>, an architecture which allows the basic Inform
|
||||
language to be made more domain-specific.
|
||||
and for sound and images respectively.
|
||||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-cm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pc.html">3</a></li><li class="progressnext"><a href="1-cm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -154,15 +154,10 @@
|
|||
<span class="chaptertitle">Chapter 3: Plugins</span></p>
|
||||
<p class="chapterpurpose">Extensions to the main compiler, which can be either active or inactive.</p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-pm.html">
|
||||
<spon class="sectiontitle">Plugin Manager</span></a> -
|
||||
<span class="sectionpurpose">Creating, activating or deactivating plugins.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-pc.html">
|
||||
<spon class="sectiontitle">Plugin Calls</span></a> -
|
||||
<span class="sectionpurpose">The interface between the main compiler and its plugins.</span></p>
|
||||
<span class="sectionpurpose">Giving compiler features the ability to install plugin functions.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
|
@ -483,10 +483,10 @@ enumerated these colours as 1, 2, 3.
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>For the I6 header syntax, see the DM4. Note that the "hardwired" short
|
||||
name is intentionally made blank: we always use I6's <span class="extract"><span class="extract-syntax">short_name</span></span> property
|
||||
instead. I7's spatial plugin, if loaded (as it usually is), will have
|
||||
instead. I7's spatial feature, if loaded (as it usually is), will have
|
||||
annotated the Inter symbol for the object with an "arrow count", that is,
|
||||
a measure of its spatial depth. This we translate into I6 arrow notation.
|
||||
If the spatial plugin wasn't loaded then we have no notion of containment,
|
||||
If the spatial feature wasn't loaded then we have no notion of containment,
|
||||
all arrow counts are 0, and we define a flat sequence of free-standing objects.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ function togglePopup(material_id) {
|
|||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::log</span></a><span class="plain-syntax">)</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IFModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="1-im.html#SP5" class="function-link"><span class="function-syntax">IFModule::create_plugins</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="1-im.html#SP5" class="function-link"><span class="function-syntax">IFModule::create_features</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log aspects</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log writers</span><span class="named-paragraph-number">2.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Register this module's direct memory usage</span><span class="named-paragraph-number">2.5</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -143,44 +143,44 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Plugins. </b>Except for the current minimal section of code, the <a href="index.html" class="internal">if</a> module is comprised
|
||||
of the following plugins. They all belong to an "if" plugin, but that does
|
||||
of the following features. They all belong to an "if" feature, but that does
|
||||
nothing except to be a parent to them; it has no activation function.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">plugin</span><span class="plain-syntax"> *</span><span class="identifier-syntax">actions_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">going_plugin</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">backdrops_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">bibliographic_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chronology_plugin</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">devices_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">map_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">persons_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">player_plugin</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">regions_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">scenes_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">scoring_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">showme_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">timed_rules_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">times_plugin</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">actions_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">going_feature</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">backdrops_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">bibliographic_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chronology_feature</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">devices_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">map_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">parsing_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">persons_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">player_feature</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">regions_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">scenes_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">scoring_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">showme_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">spatial_feature</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">timed_rules_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">times_feature</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IFModule::create_plugins</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">IFModule::create_plugins</span></span>:<br/><a href="1-im.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">plugin</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ifp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"interactive fiction"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IFModule::create_features</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">IFModule::create_features</span></span>:<br/><a href="1-im.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ifp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"interactive fiction"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> must be created before the other world model plugins</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-sm.html#SP1" class="function-link"><span class="function-syntax">Spatial::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"spatial model"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> must be created before the other world model features</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spatial_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-sm.html#SP1" class="function-link"><span class="function-syntax">Spatial::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"spatial model"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">backdrops_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-bck.html#SP1" class="function-link"><span class="function-syntax">Backdrops::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"backdrops"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bibliographic_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="2-bd.html#SP1" class="function-link"><span class="function-syntax">BibliographicData::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"bibliographic data"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">chronology_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">Chronology::start_plugin</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"chronology"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">devices_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-dvc.html#SP1" class="function-link"><span class="function-syntax">PL::Devices::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"devices"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">map_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-tm.html#SP1" class="function-link"><span class="function-syntax">Map::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mapping"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">persons_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-prs.html#SP1" class="function-link"><span class="function-syntax">PL::Persons::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"persons"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">player_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-tp.html#SP1" class="function-link"><span class="function-syntax">Player::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"player"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">regions_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-rgn.html#SP1" class="function-link"><span class="function-syntax">Regions::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"regions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">scenes_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-scn.html#SP1" class="function-link"><span class="function-syntax">Scenes::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scenes"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">scoring_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="3-ts.html#SP1" class="function-link"><span class="function-syntax">TheScore::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scoring"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">timed_rules_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(</span><a href="3-tr.html#SP1" class="function-link"><span class="function-syntax">TimedRules::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"timed rules"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">times_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">TimesOfDay::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"times of day"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">backdrops_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-bck.html#SP1" class="function-link"><span class="function-syntax">Backdrops::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"backdrops"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bibliographic_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="2-bd.html#SP1" class="function-link"><span class="function-syntax">BibliographicData::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"bibliographic data"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">chronology_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">Chronology::start_feature</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"chronology"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">devices_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-dvc.html#SP1" class="function-link"><span class="function-syntax">PL::Devices::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"devices"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">map_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-tm.html#SP1" class="function-link"><span class="function-syntax">Map::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mapping"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">persons_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-prs.html#SP1" class="function-link"><span class="function-syntax">PL::Persons::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"persons"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">player_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-tp.html#SP1" class="function-link"><span class="function-syntax">Player::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"player"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">regions_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-rgn.html#SP1" class="function-link"><span class="function-syntax">Regions::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"regions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">scenes_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-scn.html#SP1" class="function-link"><span class="function-syntax">Scenes::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scenes"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">scoring_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="3-ts.html#SP1" class="function-link"><span class="function-syntax">TheScore::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scoring"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">timed_rules_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><a href="3-tr.html#SP1" class="function-link"><span class="function-syntax">TimedRules::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"timed rules"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">times_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">TimesOfDay::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"times of day"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">actions_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="4-ap.html#SP1" class="function-link"><span class="function-syntax">ActionsPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"actions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">going_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="4-gng.html#SP1" class="function-link"><span class="function-syntax">GoingPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"going"</span><span class="plain-syntax">, </span><span class="identifier-syntax">actions_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">actions_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="4-ap.html#SP1" class="function-link"><span class="function-syntax">ActionsPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"actions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">going_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="4-gng.html#SP1" class="function-link"><span class="function-syntax">GoingPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"going"</span><span class="plain-syntax">, </span><span class="identifier-syntax">actions_feature</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="5-pp.html#SP1" class="function-link"><span class="function-syntax">ParsingPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">showme_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">RTShowmeCommand::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"showme"</span><span class="plain-syntax">, </span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parsing_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="5-pp.html#SP1" class="function-link"><span class="function-syntax">ParsingPlugin::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">showme_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><span class="identifier-syntax">RTShowmeCommand::start</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"showme"</span><span class="plain-syntax">, </span><span class="identifier-syntax">parsing_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
|
|
|
@ -60,9 +60,9 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#2">Chapter 2: Bibliographic Data</a></li><li><b>Bibliographic Data</b></li></ul></div>
|
||||
<p class="purpose">To manage the special variables providing bibliographic data on the work of IF being generated (title, author's name and so forth), and to write the Library Card in the index.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-bd.html#SP1">§1. Enter the plugin</a></li><li><a href="2-bd.html#SP3">§3. Episode sentences</a></li><li><a href="2-bd.html#SP5">§5. Bibliographic variables</a></li><li><a href="2-bd.html#SP8">§8. The opening sentence</a></li><li><a href="2-bd.html#SP10">§10. The IFID</a></li><li><a href="2-bd.html#SP11">§11. Bibliographic text</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-bd.html#SP1">§1. Enter the feature</a></li><li><a href="2-bd.html#SP3">§3. Episode sentences</a></li><li><a href="2-bd.html#SP5">§5. Bibliographic variables</a></li><li><a href="2-bd.html#SP8">§8. The opening sentence</a></li><li><a href="2-bd.html#SP10">§10. The IFID</a></li><li><a href="2-bd.html#SP11">§11. Bibliographic text</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Enter the plugin. </b>This chapter defines the "bibliographic data" plugin, whose activation
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Enter the feature. </b>This chapter defines the "bibliographic data" feature, whose activation
|
||||
function follows.
|
||||
</p>
|
||||
|
||||
|
@ -74,11 +74,11 @@ fully with the Treaty and the code below should be maintained as such.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BibliographicData::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">BibliographicData::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-bd.html#SP1" class="function-link"><span class="function-syntax">BibliographicData::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-bd.html#SP2" class="function-link"><span class="function-syntax">BibliographicData::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-bd.html#SP7" class="function-link"><span class="function-syntax">BibliographicData::bibliographic_new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Backdrops' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Backdrops</b></li></ul></div>
|
||||
<p class="purpose">A plugin to provide support for backdrop objects, which are present as scenery in multiple rooms at once.</p>
|
||||
<p class="purpose">A feature to provide support for backdrop objects, which are present as scenery in multiple rooms at once.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-bck.html#SP2">§2. Instances</a></li><li><a href="3-bck.html#SP3">§3. Kinds</a></li><li><a href="3-bck.html#SP6">§6. Properties</a></li><li><a href="3-bck.html#SP9">§9. Everywhere</a></li><li><a href="3-bck.html#SP11">§11. Model completion</a></li><li><a href="3-bck.html#SP12">§12. Inference families</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -72,11 +72,11 @@ inferences to avoid piling up bogus inconsistencies.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Backdrops::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Backdrops::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-bck.html#SP13" class="function-link"><span class="function-syntax">Backdrops::create_inference_families</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP5" class="function-link"><span class="function-syntax">Backdrops::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP2" class="function-link"><span class="function-syntax">Backdrops::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP7" class="function-link"><span class="function-syntax">Backdrops::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP11" class="function-link"><span class="function-syntax">Backdrops::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP10" class="function-link"><span class="function-syntax">Backdrops::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP5" class="function-link"><span class="function-syntax">Backdrops::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP2" class="function-link"><span class="function-syntax">Backdrops::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP7" class="function-link"><span class="function-syntax">Backdrops::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP11" class="function-link"><span class="function-syntax">Backdrops::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-bck.html#SP10" class="function-link"><span class="function-syntax">Backdrops::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Instances. </b>Every inference subject contains a pointer to its own unique copy of the
|
||||
|
@ -84,7 +84,7 @@ following minimal structure, though it will only be relevant for instances of
|
|||
"backdrop":
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">BACKDROPS_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">backdrops</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">BACKDROPS_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">backdrops</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">backdrops_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -97,7 +97,7 @@ following minimal structure, though it will only be relevant for instances of
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">backdrops_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">backdrops_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bd</span><span class="plain-syntax">-></span><span class="element-syntax">found_in_fn_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bd</span><span class="plain-syntax">-></span><span class="element-syntax">many_places</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">backdrops</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">bd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">backdrops</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">bd</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -58,9 +58,9 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Devices' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Devices</b></li></ul></div>
|
||||
<p class="purpose">A plugin giving minimal support for switchable devices.</p>
|
||||
<p class="purpose">A feature giving minimal support for switchable devices.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The Devices plugin does just one thing: it applies an indicator property
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The Devices feature does just one thing: it applies an indicator property
|
||||
to things of the kind "device". This used to be accomplished by the Standard
|
||||
Rules in a clumsy sort of way (with a direct I6 code injection), but in the
|
||||
age of Inter we want to avoid that sort of tomfoolery.
|
||||
|
@ -68,8 +68,8 @@ age of Inter we want to avoid that sort of tomfoolery.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PL::Devices::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">PL::Devices::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-dvc.html#SP3" class="function-link"><span class="function-syntax">PL::Devices::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-dvc.html#SP3" class="function-link"><span class="function-syntax">PL::Devices::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-dvc.html#SP3" class="function-link"><span class="function-syntax">PL::Devices::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-dvc.html#SP3" class="function-link"><span class="function-syntax">PL::Devices::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>As usual with notable kinds, this is recognised by its English name, so there
|
||||
|
|
|
@ -205,7 +205,7 @@ apply "here" incorrectly, but just in case:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>"Everywhere" in an assertion would say that something is found in every room,
|
||||
and for that we have to ask the Backdrops plugin to handle it.
|
||||
and for that we have to ask the Backdrops feature to handle it.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -250,7 +250,7 @@ remaining anomalies.
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Assertion. </b>Note that the following will infer <span class="extract"><span class="extract-syntax">IS_ROOM_INF</span></span> for any source of a map
|
||||
connection — which will include doors. That doesn't matter, because the
|
||||
Spatial plugin uses these inferences only for objects whose kind is not
|
||||
Spatial feature uses these inferences only for objects whose kind is not
|
||||
explicitly given in the source text; and doors must always be specified as
|
||||
such.
|
||||
</p>
|
||||
|
@ -297,7 +297,7 @@ such.
|
|||
|
||||
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">MapRelations::get_mapping_relationship</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_relationship</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</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">bp</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">map_plugin</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">bp</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir</span><span class="plain-syntax"> = </span><a href="3-mcr.html#SP7" class="function-link"><span class="function-syntax">MapRelations::get_mapping_direction</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::get_reversal</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</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">dir</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">dir</span><span class="plain-syntax"> = </span><a href="3-mcr.html#SP7" class="function-link"><span class="function-syntax">MapRelations::get_mapping_direction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -57,9 +57,9 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Persons' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Persons</b></li></ul></div>
|
||||
<p class="purpose">A plugin giving minimal support for switchable devices.</p>
|
||||
<p class="purpose">A feature giving minimal support for switchable devices.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>This plugin does just one thing: it applies an indicator property to things
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>This feature does just one thing: it applies an indicator property to things
|
||||
of the kind "animate", and a blank "before" property. This used to be
|
||||
accomplished by the Standard Rules in a clumsy sort of way (with a direct I6
|
||||
code injection), but in the age of Inter we want to avoid that sort of
|
||||
|
@ -68,7 +68,7 @@ tomfoolery.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PL::Persons::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">PL::Persons::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-prs.html#SP1" class="function-link"><span class="function-syntax">PL::Persons::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-prs.html#SP1" class="function-link"><span class="function-syntax">PL::Persons::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PL::Persons::IF_complete_model</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Regions' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Regions</b></li></ul></div>
|
||||
<p class="purpose">A plugin providing support for grouping rooms together into named and nestable regions.</p>
|
||||
<p class="purpose">A feature providing support for grouping rooms together into named and nestable regions.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>"Region" is in fact one of the four top-level kinds in the standard I7
|
||||
world model, alongside thing, room and direction. What makes it complicated
|
||||
|
@ -69,15 +69,15 @@ result, a new "regional containment" relation is needed.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Regions::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Regions::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP5" class="function-link"><span class="function-syntax">Regions::create_inference_subjects</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP4" class="function-link"><span class="function-syntax">Regions::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP6" class="function-link"><span class="function-syntax">Regions::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP10" class="function-link"><span class="function-syntax">Regions::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP13" class="function-link"><span class="function-syntax">Regions::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP15" class="function-link"><span class="function-syntax">Regions::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MORE_SPECIFIC_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP8" class="function-link"><span class="function-syntax">Regions::more_specific</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP14" class="function-link"><span class="function-syntax">Regions::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP5" class="function-link"><span class="function-syntax">Regions::name_to_early_infs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP5" class="function-link"><span class="function-syntax">Regions::create_inference_subjects</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP4" class="function-link"><span class="function-syntax">Regions::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP6" class="function-link"><span class="function-syntax">Regions::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP10" class="function-link"><span class="function-syntax">Regions::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP13" class="function-link"><span class="function-syntax">Regions::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP15" class="function-link"><span class="function-syntax">Regions::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MORE_SPECIFIC_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP8" class="function-link"><span class="function-syntax">Regions::more_specific</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP14" class="function-link"><span class="function-syntax">Regions::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><a href="3-rgn.html#SP5" class="function-link"><span class="function-syntax">Regions::name_to_early_infs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>There is one kind of interest: "region", of course. It is recognised by the English
|
||||
|
@ -171,7 +171,7 @@ domains.)
|
|||
<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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Detecting regions is easy. Note that if this plugin is inactive then
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Detecting regions is easy. Note that if this feature is inactive then
|
||||
<span class="extract"><span class="extract-syntax">K_region</span></span> will be null, and this will always return false.
|
||||
</p>
|
||||
|
||||
|
@ -186,7 +186,7 @@ following minimal structure, though it will only be relevant for instances of
|
|||
"region":
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">REGIONS_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">REGIONS_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">regions_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -201,7 +201,7 @@ following minimal structure, though it will only be relevant for instances of
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">rd</span><span class="plain-syntax">-></span><span class="element-syntax">in_region</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rd</span><span class="plain-syntax">-></span><span class="element-syntax">in_region_set_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rd</span><span class="plain-syntax">-></span><span class="element-syntax">in_region_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">rd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">rd</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -211,7 +211,7 @@ following minimal structure, though it will only be relevant for instances of
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Regions::in_region_set_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">regions</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">REGIONS_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="element-syntax">in_region_set_at</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Scenes' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Scenes</b></li></ul></div>
|
||||
<p class="purpose">A plugin to support named periods of time during an interactive story.</p>
|
||||
<p class="purpose">A feature to support named periods of time during an interactive story.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-scn.html#SP1">§1. Introduction</a></li><li><a href="3-scn.html#SP10">§10. Conceptual model of scenes</a></li><li><a href="3-scn.html#SP12">§12. Scene structures</a></li><li><a href="3-scn.html#SP14">§14. Creating and parsing ends</a></li><li><a href="3-scn.html#SP15">§15. Scene end rulebooks</a></li><li><a href="3-scn.html#SP16">§16. Anchors</a></li><li><a href="3-scn.html#SP27">§27. Rules predicated on scenes</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -70,15 +70,15 @@ met, or by virtue of having been anchored together.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Scenes::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-scn.html#SP3" class="function-link"><span class="function-syntax">Scenes::declare_annotations</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP9" class="function-link"><span class="function-syntax">Scenes::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP6" class="function-link"><span class="function-syntax">Scenes::new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP16" class="function-link"><span class="function-syntax">Scenes::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RCD_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP27" class="function-link"><span class="function-syntax">Scenes::new_rcd</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP9" class="function-link"><span class="function-syntax">Scenes::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP6" class="function-link"><span class="function-syntax">Scenes::new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP16" class="function-link"><span class="function-syntax">Scenes::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RCD_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP27" class="function-link"><span class="function-syntax">Scenes::new_rcd</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This plugin needs one extra syntax tree annotation:
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This feature needs one extra syntax tree annotation:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">constant_scene_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">scene</span></span><span class="comment-syntax">: for constant values</span>
|
||||
|
@ -218,13 +218,13 @@ scenes — to express which, the <a href="3-scn.html#SP10" class="internal">
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 3/mhr, 4/ap, 4/av, 4/apc, 5/us and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>A plugin called <span class="extract"><span class="extract-syntax">xyzzy</span></span> generally has a hunk of subject data called <span class="extract"><span class="extract-syntax">xyzzy_data</span></span>,
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>A feature called <span class="extract"><span class="extract-syntax">xyzzy</span></span> generally has a hunk of subject data called <span class="extract"><span class="extract-syntax">xyzzy_data</span></span>,
|
||||
so we would normally have a structure called <span class="extract"><span class="extract-syntax">scenes_data</span></span>, but in fact that
|
||||
structure is just going to be <a href="3-scn.html#SP10" class="internal">scene</a>. So:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">scenes_data</span><span class="plain-syntax"> </span><span class="reserved-syntax">scene</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">SCENES_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">)</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">SCENES_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Scene structures. </b>As we've seen, the following is called whenever a new instance of "scene"
|
||||
is created:
|
||||
|
@ -270,7 +270,7 @@ to translate this to other languages.)
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sc</span><span class="plain-syntax">-></span><span class="element-syntax">as_instance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">sc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">sc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><notable-scenes></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">SC_entire_game</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sc</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
|
@ -282,7 +282,7 @@ to translate this to other languages.)
|
|||
<span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">Scenes::from_named_constant</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Scenes::from_named_constant</span></span>:<br/><a href="3-scn.html#SP23_1">§23.1</a>, <a href="3-scn.html#SP28">§28</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">K_scene</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</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">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -770,7 +770,7 @@ collection of them:
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-scn.html#SP26">§26</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>§27. Rules predicated on scenes. </b>Rules can be set to fire only during a certain scene, or a scene matching some
|
||||
description. This is stored in the following scenes-plugin corner of the
|
||||
description. This is stored in the following scenes-feature corner of the
|
||||
<a href="../assertions-module/5-rcd.html" class="internal">Runtime Context Data (in assertions)</a> for the rule:
|
||||
</p>
|
||||
|
||||
|
@ -787,19 +787,19 @@ description. This is stored in the following scenes-plugin corner of the
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_rcd</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_rcd</span></span>:<br/><a href="3-scn.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_PLUGIN_RCD_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><a href="3-scn.html#SP27" class="function-link"><span class="function-syntax">Scenes::new_rcd_data</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><a href="3-scn.html#SP27" class="function-link"><span class="function-syntax">Scenes::new_rcd_data</span></a><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">FALSE</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">Scenes::set_rcd_spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_match</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">srcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">srcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to_match</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Scenes::get_rcd_spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">srcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">srcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</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">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -814,7 +814,7 @@ extracts a single specified scene if there is one:
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">Scenes::rcd_scene</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</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">idrcd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">srcd</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">Rvalues::is_rvalue</span><span class="plain-syntax">(</span><span class="identifier-syntax">srcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">srcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax">);</span>
|
||||
|
@ -830,7 +830,7 @@ extracts a single specified scene if there is one:
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::during_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</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">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">scenes_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">srcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">srcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">srcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -57,7 +57,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Spatial Inferences' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Spatial Inferences</b></li></ul></div>
|
||||
<p class="purpose">Six families of inference used by the spatial plugin.</p>
|
||||
<p class="purpose">Six families of inference used by the spatial feature.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Spatial has no fewer than six of its own inference families, needed to store vague
|
||||
indications of spatial structure:
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Spatial Model' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Spatial Model</b></li></ul></div>
|
||||
<p class="purpose">A plugin which constructs the fundamental spatial model used by IF, to represent containment, support, carrying, wearing, and incorporation.</p>
|
||||
<p class="purpose">A feature which constructs the fundamental spatial model used by IF, to represent containment, support, carrying, wearing, and incorporation.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-sm.html#SP1">§1. Introduction</a></li><li><a href="3-sm.html#SP2">§2. Kinds of interest</a></li><li><a href="3-sm.html#SP12">§12. Properties of interest</a></li><li><a href="3-sm.html#SP15">§15. Spatial data on instances</a></li><li><a href="3-sm.html#SP18">§18. Composite noun-quantifiers</a></li><li><a href="3-sm.html#SP20">§20. Nowhere</a></li><li><a href="3-sm.html#SP23">§23. Here</a></li><li><a href="3-sm.html#SP26">§26. Completing the world model</a></li><li><a href="3-sm.html#SP32">§32. Completing the model, stages III and IV</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -75,18 +75,18 @@ regions, and so on.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Spatial::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-si.html#SP2" class="function-link"><span class="function-syntax">SpatialInferences::create</span></a><span class="plain-syntax">();</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP10" class="function-link"><span class="function-syntax">Spatial::create_inference_subjects</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP4" class="function-link"><span class="function-syntax">Spatial::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_SPECIAL_NPS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP21" class="function-link"><span class="function-syntax">Spatial::act_on_special_NPs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP26" class="function-link"><span class="function-syntax">Spatial::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEFAULT_APPEARANCE_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP17" class="function-link"><span class="function-syntax">Spatial::default_appearance</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP11" class="function-link"><span class="function-syntax">Spatial::name_to_early_infs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP16" class="function-link"><span class="function-syntax">Spatial::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP14" class="function-link"><span class="function-syntax">Spatial::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PARSE_COMPOSITE_NQS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP19" class="function-link"><span class="function-syntax">Spatial::parse_composite_NQs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP5" class="function-link"><span class="function-syntax">Spatial::set_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP6" class="function-link"><span class="function-syntax">Spatial::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP22" class="function-link"><span class="function-syntax">Spatial::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP10" class="function-link"><span class="function-syntax">Spatial::create_inference_subjects</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP4" class="function-link"><span class="function-syntax">Spatial::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_SPECIAL_NPS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP21" class="function-link"><span class="function-syntax">Spatial::act_on_special_NPs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP26" class="function-link"><span class="function-syntax">Spatial::IF_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEFAULT_APPEARANCE_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP17" class="function-link"><span class="function-syntax">Spatial::default_appearance</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP11" class="function-link"><span class="function-syntax">Spatial::name_to_early_infs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP16" class="function-link"><span class="function-syntax">Spatial::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP14" class="function-link"><span class="function-syntax">Spatial::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PARSE_COMPOSITE_NQS_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP19" class="function-link"><span class="function-syntax">Spatial::parse_composite_NQs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP5" class="function-link"><span class="function-syntax">Spatial::set_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP6" class="function-link"><span class="function-syntax">Spatial::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-sm.html#SP22" class="function-link"><span class="function-syntax">Spatial::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Kinds of interest. </b>These are kind names to do with spatial layout which Inform provides special
|
||||
|
@ -311,7 +311,7 @@ which may be <span class="extract"><span class="extract-syntax">NULL</span></spa
|
|||
carries, wears, supports or incorporates it.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">spatial_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -345,7 +345,7 @@ carries, wears, supports or incorporates it.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">object_tree_parent</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">object_tree_child</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">object_tree_sibling</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">incorp_tree_child</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">incorp_tree_sibling</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">incorp_tree_parent</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">definition_depth</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">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">sd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">sd</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -783,26 +783,26 @@ immediately contains, carries, wears, supports or incorporates it.
|
|||
|
||||
<p class="commentary">Clearly if we know every object's progenitor, then we know the whole spatial
|
||||
layout — it's all just elaboration from there. (See Stage III below.) But
|
||||
since other plugins can decide on this, not just Spatial, we had better
|
||||
since other features can decide on this, not just Spatial, we had better
|
||||
provide access routines to read and write:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">Spatial::progenitor</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Spatial::progenitor</span></span>:<br/><a href="3-sm.html#SP30_2">§30.2</a>, <a href="3-sm.html#SP35">§35</a>, <a href="3-sm.html#SP36_1">§36.1</a>, <a href="3-sm.html#SP36_1_1">§36.1.1</a>, <a href="3-sm.html#SP36_2">§36.2</a>, <a href="3-sm.html#SP36_3">§36.3</a><br/>The Player - <a href="3-tp.html#SP10_3">§10.3</a><br/>Regions - <a href="3-rgn.html#SP7">§7</a><br/>The Map - <a href="3-tm.html#SP33_6">§33.6</a>, <a href="3-tm.html#SP33_7">§33.7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Spatial::progenitor_set_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor_set_at</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">Spatial::set_progenitor</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Spatial::set_progenitor</span></span>:<br/><a href="3-sm.html#SP30_3">§30.3</a><br/>The Map - <a href="3-tm.html#SP33_7">§33.7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">of</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">reason</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"spatial plugin inactive"</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"spatial feature inactive"</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">to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"set progenitor of nothing"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">of</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">of</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor_set_at</span><span class="plain-syntax"> =</span>
|
||||
|
@ -814,8 +814,8 @@ provide access routines to read and write:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::void_progenitor</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Spatial::void_progenitor</span></span>:<br/><a href="3-sm.html#SP36_1">§36.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">of</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"spatial plugin inactive"</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"spatial feature inactive"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">of</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">of</span><span class="plain-syntax">)-></span><span class="element-syntax">progenitor_set_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -1119,7 +1119,7 @@ in the incorporation tree instead, but with the same parent.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">orphan</span><span class="plain-syntax">)-></span><span class="element-syntax">incorp_tree_parent</span><span class="plain-syntax"> = </span><span class="identifier-syntax">former_parent</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP34_1">§34.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>§35. </b>What will we use the trees for? Well, one use is to tell other plugins
|
||||
<p class="commentary firstcommentary"><a id="SP35" class="paragraph-anchor"></a><b>§35. </b>What will we use the trees for? Well, one use is to tell other features
|
||||
which depend on Spatial whether or not one object spatially contains another:
|
||||
</p>
|
||||
|
||||
|
@ -1151,7 +1151,7 @@ code it turns into. Here goes:
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP36_1" class="paragraph-anchor"></a><b>§36.1. </b>The following verifies, in a brute-force way, that there are no cycles in
|
||||
the directed graph formed by the objects and progeniture. (We're doing this
|
||||
now, rather than at Stage II above, because other plugins may also have
|
||||
now, rather than at Stage II above, because other features may also have
|
||||
changed progenitors at Stage II.)
|
||||
</p>
|
||||
|
||||
|
@ -1205,7 +1205,7 @@ changed progenitors at Stage II.)
|
|||
ask what's wrong with simply making the trees as we go along, rather than
|
||||
storing all of those progenitors and then converting them into the trees.
|
||||
We don't do that because (for reasons to do with "here" and with how work
|
||||
is shared among the plugins) the progenitors are determined in an undefined
|
||||
is shared among the features) the progenitors are determined in an undefined
|
||||
order; if we made the object tree as we went along, the spatial model would
|
||||
be perfectly correct, but siblings — say, the three things on the grass in
|
||||
the Croquet Lawn — would be compiled in the Inter code in some undefined
|
||||
|
@ -1420,7 +1420,7 @@ for objects:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::get_definition_depth</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</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">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="element-syntax">definition_depth</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>
|
||||
|
|
|
@ -271,7 +271,7 @@ same object in a container, a room or a region respectively.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"like saying 'the bottle is in the bottle'."</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">TRUE</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="3-sr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Offer our dependent plugins a chance to assert the relation instead</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Offer our dependent features a chance to assert the relation instead</span><span class="named-paragraph-number">4.1</span></a></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">BinaryPredicates::can_be_made_true_at_runtime</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for an unassertable indirect spatial relation</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -306,7 +306,7 @@ putting a backdrop inside a region clearly has to be implemented in some
|
|||
way which isn't symmetrical between the two, and this way round is cleanest.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Offer our dependent plugins a chance to assert the relation instead</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Offer our dependent features a chance to assert the relation instead</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -362,7 +362,7 @@ way which isn't symmetrical between the two, and this way round is cleanest.
|
|||
<ul class="endnotetexts"><li>This code is used in <a href="3-sr.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_5" class="paragraph-anchor"></a><b>§4.5. </b>If something is being worn, it needs to have the I7 either/or property
|
||||
"wearable" and also the I6-only attribute <span class="extract"><span class="extract-syntax">worn</span></span>. (Arguably Clothing ought
|
||||
to be a plugin of its own, but the compiler needs to do hardly anything
|
||||
to be a feature of its own, but the compiler needs to do hardly anything
|
||||
special to make it work, so this doesn't seem worth the trouble.)
|
||||
</p>
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ MathJax = {
|
|||
<!--Weave of 'The Map' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>The Map</b></li></ul></div>
|
||||
<p class="purpose">A plugin to provide a geographical model, linking rooms and doors together in oppositely-paired directions.</p>
|
||||
<p class="purpose">A feature to provide a geographical model, linking rooms and doors together in oppositely-paired directions.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-tm.html#SP1">§1. Introduction</a></li><li><a href="3-tm.html#SP4">§4. The direction inference</a></li><li><a href="3-tm.html#SP7">§7. Special kinds</a></li><li><a href="3-tm.html#SP12">§12. Spotting directions and doors</a></li><li><a href="3-tm.html#SP14">§14. Directions and their numbers</a></li><li><a href="3-tm.html#SP19">§19. Map data on instances</a></li><li><a href="3-tm.html#SP26">§26. The exits array</a></li><li><a href="3-tm.html#SP27">§27. Door connectivity</a></li><li><a href="3-tm.html#SP28">§28. Linguistic extras</a></li><li><a href="3-tm.html#SP31">§31. The map-connector</a></li><li><a href="3-tm.html#SP33">§33. Model completion</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -87,18 +87,18 @@ quite specific problem messages.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Map::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Map::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-tm.html#SP5" class="function-link"><span class="function-syntax">Map::create_inference</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP2" class="function-link"><span class="function-syntax">Map::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_ASSERTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP3" class="function-link"><span class="function-syntax">Map::look_for_direction_creation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP9" class="function-link"><span class="function-syntax">Map::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP20" class="function-link"><span class="function-syntax">Map::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP18" class="function-link"><span class="function-syntax">Map::set_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP11" class="function-link"><span class="function-syntax">Map::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_SPECIAL_NPS_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP29" class="function-link"><span class="function-syntax">Map::act_on_special_NPs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP33" class="function-link"><span class="function-syntax">Map::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP23" class="function-link"><span class="function-syntax">Map::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INFERENCE_DRAWN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP27" class="function-link"><span class="function-syntax">Map::inference_drawn</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP30" class="function-link"><span class="function-syntax">Map::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP1" class="function-link"><span class="function-syntax">Map::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP2" class="function-link"><span class="function-syntax">Map::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_ASSERTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP3" class="function-link"><span class="function-syntax">Map::look_for_direction_creation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP9" class="function-link"><span class="function-syntax">Map::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP20" class="function-link"><span class="function-syntax">Map::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP18" class="function-link"><span class="function-syntax">Map::set_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP11" class="function-link"><span class="function-syntax">Map::set_subkind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_SPECIAL_NPS_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP29" class="function-link"><span class="function-syntax">Map::act_on_special_NPs</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP33" class="function-link"><span class="function-syntax">Map::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP23" class="function-link"><span class="function-syntax">Map::new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INFERENCE_DRAWN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP27" class="function-link"><span class="function-syntax">Map::inference_drawn</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTERVENE_IN_ASSERTION_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP30" class="function-link"><span class="function-syntax">Map::intervene_in_assertion</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tm.html#SP1" class="function-link"><span class="function-syntax">Map::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Map::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -314,12 +314,12 @@ Rules. (So there is no need to translate this to other languages.)
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Map::subject_is_a_direction</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Map::subject_is_a_direction</span></span>:<br/><a href="3-tm.html#SP30">§30</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</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">K_direction</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> in particular, if plugin inactive</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K_direction</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> in particular, if feature inactive</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InferenceSubjects::is_within</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_direction</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Map::instance_is_a_direction</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">map_plugin</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">K_direction</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">I</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">K_direction</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">I</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_direction</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -334,7 +334,7 @@ Rules. (So there is no need to translate this to other languages.)
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Map::instance_is_a_door</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Map::instance_is_a_door</span></span>:<br/><a href="3-tm.html#SP33_2">§33.2</a>, <a href="3-tm.html#SP33_3">§33.3</a>, <a href="3-tm.html#SP33_4">§33.4</a>, <a href="3-tm.html#SP33_5">§33.5</a>, <a href="3-tm.html#SP33_6">§33.6</a>, <a href="3-tm.html#SP33_7">§33.7</a>, <a href="3-tm.html#SP33_8">§33.8</a><br/>Spatial Model - <a href="3-sm.html#SP30_3_3">§30.3.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">map_plugin</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">K_door</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">I</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">K_door</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">I</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_door</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -436,7 +436,7 @@ large numbers of instances then it might be worth economising here, but
|
|||
profiling suggests that it really isn't.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">MAP_EXIT</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">Y</span><span class="plain-syntax">) </span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">)-></span><span class="element-syntax">exits</span><span class="plain-syntax">[</span><span class="identifier-syntax">Y</span><span class="plain-syntax">]</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -477,7 +477,7 @@ profiling suggests that it really isn't.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-></span><span class="element-syntax">exits</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">map</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -520,9 +520,9 @@ Standard Rules. (So there is no need to translate this to other languages.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. </b>The following is used also by <a href="3-bck.html" class="internal">Backdrops</a>, since both plugins use a
|
||||
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. </b>The following is used also by <a href="3-bck.html" class="internal">Backdrops</a>, since both features use a
|
||||
shared Inter-level property at run-time. But this function will work even if
|
||||
the map plugin is inactive; so you can still have backdrops without a map.
|
||||
the map feature is inactive; so you can still have backdrops without a map.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'The Player' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>The Player</b></li></ul></div>
|
||||
<p class="purpose">A plugin to give a special role to a person who is the protagonist.</p>
|
||||
<p class="purpose">A feature to give a special role to a person who is the protagonist.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-tp.html#SP1">§1. Introduction</a></li><li><a href="3-tp.html#SP2">§2. Variables of interest</a></li><li><a href="3-tp.html#SP4_1">§4.1. Instances of interest</a></li><li><a href="3-tp.html#SP7">§7. Linguistic variations</a></li><li><a href="3-tp.html#SP10">§10. Model completion</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -77,14 +77,14 @@ has highly unusual semantics, even though an Inform user is barely aware of that
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Player::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Player::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP1" class="function-link"><span class="function-syntax">Player::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP4" class="function-link"><span class="function-syntax">Player::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">VARIABLE_VALUE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP5" class="function-link"><span class="function-syntax">Player::variable_set_warning</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP4_3" class="function-link"><span class="function-syntax">Player::new_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">IRREGULAR_GENITIVE_IN_ASSEMBLY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP7" class="function-link"><span class="function-syntax">Player::irregular_genitive</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP10" class="function-link"><span class="function-syntax">Player::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">REFINE_IMPLICIT_NOUN_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP9" class="function-link"><span class="function-syntax">Player::refine_implicit_noun</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DETECT_BODYSNATCHING_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP6" class="function-link"><span class="function-syntax">Player::detect_bodysnatching</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP1" class="function-link"><span class="function-syntax">Player::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP4" class="function-link"><span class="function-syntax">Player::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">VARIABLE_VALUE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP5" class="function-link"><span class="function-syntax">Player::variable_set_warning</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP4_3" class="function-link"><span class="function-syntax">Player::new_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">IRREGULAR_GENITIVE_IN_ASSEMBLY_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP7" class="function-link"><span class="function-syntax">Player::irregular_genitive</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP10" class="function-link"><span class="function-syntax">Player::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">REFINE_IMPLICIT_NOUN_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP9" class="function-link"><span class="function-syntax">Player::refine_implicit_noun</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DETECT_BODYSNATCHING_PLUG</span><span class="plain-syntax">, </span><a href="3-tp.html#SP6" class="function-link"><span class="function-syntax">Player::detect_bodysnatching</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Player::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">,</span>
|
||||
|
|
|
@ -58,9 +58,9 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Timed Rules' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Timed Rules</b></li></ul></div>
|
||||
<p class="purpose">A plugin to support rules like "At 12:03AM: ...".</p>
|
||||
<p class="purpose">A feature to support rules like "At 12:03AM: ...".</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>This plugin makes a special set of rules for timed events; the <span class="extract"><span class="extract-syntax">:timedrules</span></span>
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>This feature makes a special set of rules for timed events; the <span class="extract"><span class="extract-syntax">:timedrules</span></span>
|
||||
test group may be useful in testing it.
|
||||
</p>
|
||||
|
||||
|
@ -76,9 +76,9 @@ special significance:
|
|||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TimedRules::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">TimedRules::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RULE_DEFN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP3" class="function-link"><span class="function-syntax">TimedRules::new_rule_defn_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INLINE_ANNOTATION_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP6" class="function-link"><span class="function-syntax">TimedRules::inline_annotation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP1" class="function-link"><span class="function-syntax">TimedRules::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RULE_DEFN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP3" class="function-link"><span class="function-syntax">TimedRules::new_rule_defn_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">INLINE_ANNOTATION_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP6" class="function-link"><span class="function-syntax">TimedRules::inline_annotation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-tr.html#SP1" class="function-link"><span class="function-syntax">TimedRules::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TimedRules::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -128,17 +128,17 @@ special significance:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TimedRules::new_rule_defn_notify</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">TimedRules::new_rule_defn_notify</span></span>:<br/><a href="3-tr.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_PLUGIN_RFD_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">, </span><a href="3-tr.html#SP4" class="function-link"><span class="function-syntax">TimedRules::new_rfd_data</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">, </span><a href="3-tr.html#SP4" class="function-link"><span class="function-syntax">TimedRules::new_rfd_data</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_preamble</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><event-rule-preamble></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="function-syntax"><<r>></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_preamble</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">not_in_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_time</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">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_time</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_FIXED_TIME</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">EW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><event-rule-preamble></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">EW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Articles::remove_the</span><span class="plain-syntax">(</span><span class="identifier-syntax">EW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">constant_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -172,20 +172,20 @@ special significance:
|
|||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">TimedRules::get_uses_as_event</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">TimedRules::get_uses_as_event</span></span>:<br/><a href="3-tr.html#SP6">§6</a>, <a href="3-tr.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">rule_idf</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family_specific_data</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">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">uses_as_event</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">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">uses_as_event</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TimedRules::get_timing_of_event</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">TimedRules::get_timing_of_event</span></span>:<br/><a href="3-tr.html#SP6">§6</a>, <a href="3-tr.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">rule_idf</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">NOT_A_TIMED_EVENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family_specific_data</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">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_time</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">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_time</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">TimedRules::get_wording_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">rule_idf</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family_specific_data</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">RFD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_name</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">RFD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">timed_rules</span><span class="plain-syntax">, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">)-></span><span class="element-syntax">event_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>When a rule has no explicit timing, it needs to be triggered by a phrase
|
||||
|
|
|
@ -58,7 +58,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'The Score' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>The Score</b></li></ul></div>
|
||||
<p class="purpose">A plugin to support the score variables.</p>
|
||||
<p class="purpose">A feature to support the score variables.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>At one time, all interactive fiction had a scoring system, because that's
|
||||
what computers did for our entertainment: they rewarded us with points. Having
|
||||
|
@ -68,8 +68,8 @@ a little compiler support, and this is where.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TheScore::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">TheScore::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-ts.html#SP1" class="function-link"><span class="function-syntax">TheScore::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-ts.html#SP4" class="function-link"><span class="function-syntax">TheScore::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="3-ts.html#SP1" class="function-link"><span class="function-syntax">TheScore::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-ts.html#SP4" class="function-link"><span class="function-syntax">TheScore::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TheScore::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -59,7 +59,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Action Conditions</b></li></ul></div>
|
||||
<p class="purpose">A special condition for testing against action patterns.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The actions plugin introduces a special form of condition: authors can
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The actions feature introduces a special form of condition: authors can
|
||||
write "if taking or dropping something", for example, and this is implicitly
|
||||
a test of what the current action is.
|
||||
</p>
|
||||
|
|
|
@ -161,7 +161,7 @@ a given action:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">old_rulebook</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>And this is where the actions plugin moves rules from their normal rulebooks:
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>And this is where the actions feature moves rules from their normal rulebooks:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -229,7 +229,7 @@ a given action:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-act.html#SP5">§5</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>And this is where the actions plugin reacts to any placement of a rule in a
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>And this is where the actions feature reacts to any placement of a rule in a
|
||||
rulebook, automatic or not:
|
||||
</p>
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Actions-Only Nodes and Annotations' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Actions-Only Nodes and Annotations</b></li></ul></div>
|
||||
<p class="purpose">Additional syntax tree node and annotation types used by the actions plugin.</p>
|
||||
<p class="purpose">Additional syntax tree node and annotation types used by the actions feature.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>There is just one additional node type, but it can take four new annotations:
|
||||
</p>
|
||||
|
|
|
@ -58,9 +58,9 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Actions Plugin' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Actions Plugin</b></li></ul></div>
|
||||
<p class="purpose">A plugin for actions, by which animate characters change the world model.</p>
|
||||
<p class="purpose">A feature for actions, by which animate characters change the world model.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Support for actions is contained in the "actions" plugin, which occupies this
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Support for actions is contained in the "actions" feature, which occupies this
|
||||
entire chapter. The test group <span class="extract"><span class="extract-syntax">:actions</span></span> may be helpful in trouble-shooting here.
|
||||
</p>
|
||||
|
||||
|
@ -91,23 +91,23 @@ description of an action which may have happened in the past: for example,
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ActionsPlugin::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-anaa.html#SP2" class="function-link"><span class="function-syntax">ActionsNodes::nodes_and_annotations</span></a><span class="plain-syntax">();</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP7" class="function-link"><span class="function-syntax">ActionsPlugin::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP2" class="function-link"><span class="function-syntax">ARvalues::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">CompileRvalues::action_kinds</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_CONDITION_PLUG</span><span class="plain-syntax">, </span><a href="4-ac.html#SP3" class="function-link"><span class="function-syntax">AConditions::compile_condition</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATION_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP7" class="function-link"><span class="function-syntax">ActionsNodes::creation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP8" class="function-link"><span class="function-syntax">ActionsNodes::unusual_property_value_node</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_PROPERTY_PLUG</span><span class="plain-syntax">, </span><a href="4-av.html#SP1" class="function-link"><span class="function-syntax">ActionVariables::actions_offered_property</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP5" class="function-link"><span class="function-syntax">ActionsPlugin::actions_offered_specification</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP3" class="function-link"><span class="function-syntax">ARvalues::actions_typecheck_equality</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PLACE_RULE_PLUG</span><span class="plain-syntax">, </span><a href="4-act.html#SP5" class="function-link"><span class="function-syntax">Actions::place_rule</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_PLACEMENT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-act.html#SP6" class="function-link"><span class="function-syntax">Actions::rule_placement_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP1" class="function-link"><span class="function-syntax">ActionsPlugin::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">ActionsPlugin::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEST_HEAD_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_head</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEST_TAIL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_tail</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RCD_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-rpoa.html#SP2" class="function-link"><span class="function-syntax">ActionRules::new_rcd</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP7" class="function-link"><span class="function-syntax">ActionsPlugin::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP2" class="function-link"><span class="function-syntax">ARvalues::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">CompileRvalues::action_kinds</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_CONDITION_PLUG</span><span class="plain-syntax">, </span><a href="4-ac.html#SP3" class="function-link"><span class="function-syntax">AConditions::compile_condition</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATION_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP7" class="function-link"><span class="function-syntax">ActionsNodes::creation</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP8" class="function-link"><span class="function-syntax">ActionsNodes::unusual_property_value_node</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_PROPERTY_PLUG</span><span class="plain-syntax">, </span><a href="4-av.html#SP1" class="function-link"><span class="function-syntax">ActionVariables::actions_offered_property</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP5" class="function-link"><span class="function-syntax">ActionsPlugin::actions_offered_specification</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP3" class="function-link"><span class="function-syntax">ARvalues::actions_typecheck_equality</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PLACE_RULE_PLUG</span><span class="plain-syntax">, </span><a href="4-act.html#SP5" class="function-link"><span class="function-syntax">Actions::place_rule</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_PLACEMENT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-act.html#SP6" class="function-link"><span class="function-syntax">Actions::rule_placement_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP1" class="function-link"><span class="function-syntax">ActionsPlugin::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">ActionsPlugin::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEST_HEAD_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_head</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEST_TAIL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_tail</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_RCD_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-rpoa.html#SP2" class="function-link"><span class="function-syntax">ActionRules::new_rcd</span></a><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Vocabulary::entry_for_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"doing"</span><span class="plain-syntax">), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Vocabulary::entry_for_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"asking"</span><span class="plain-syntax">), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -58,33 +58,33 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Going' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Going</b></li></ul></div>
|
||||
<p class="purpose">A plugin to provide a little extra support for the "going" action.</p>
|
||||
<p class="purpose">A feature to provide a little extra support for the "going" action.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The "going" action, allowing actors to move from room to room in the spatial
|
||||
map of the world model, is by far the most intricately implemented. Reflecting
|
||||
that, we provide quite a lot of hard-wired compiler support for it, in the form
|
||||
of this plugin.
|
||||
of this feature.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that if the actions plugin is not also active, none of the functions
|
||||
<p class="commentary">Note that if the actions feature is not also active, none of the functions
|
||||
below will ever be called.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">GoingPlugin::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">GoingPlugin::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_ACTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP3" class="function-link"><span class="function-syntax">GoingPlugin::new_action_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">WRITE_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">GoingPlugin::write_clause_ID</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ASPECT_OF_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">GoingPlugin::aspect</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DIVERT_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP6" class="function-link"><span class="function-syntax">GoingPlugin::divert_clause_ID</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PARSE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP11" class="function-link"><span class="function-syntax">GoingPlugin::parse_clause</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">VALIDATE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP13" class="function-link"><span class="function-syntax">GoingPlugin::validate</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP7" class="function-link"><span class="function-syntax">GoingPlugin::new_clause</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_ANL_ENTRY_OPTIONS_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP12" class="function-link"><span class="function-syntax">GoingPlugin::act_on_options</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_AP_SPECIFICITY_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP16" class="function-link"><span class="function-syntax">GoingPlugin::compare_specificity</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_ACTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP3" class="function-link"><span class="function-syntax">GoingPlugin::new_action_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">WRITE_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">GoingPlugin::write_clause_ID</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ASPECT_OF_AP_CLAUSE_ID_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">GoingPlugin::aspect</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">DIVERT_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP6" class="function-link"><span class="function-syntax">GoingPlugin::divert_clause_ID</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PARSE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP11" class="function-link"><span class="function-syntax">GoingPlugin::parse_clause</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">VALIDATE_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP13" class="function-link"><span class="function-syntax">GoingPlugin::validate</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_AP_CLAUSE_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP7" class="function-link"><span class="function-syntax">GoingPlugin::new_clause</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACT_ON_ANL_ENTRY_OPTIONS_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP12" class="function-link"><span class="function-syntax">GoingPlugin::act_on_options</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_AP_SPECIFICITY_PLUG</span><span class="plain-syntax">, </span><a href="4-gng.html#SP16" class="function-link"><span class="function-syntax">GoingPlugin::compare_specificity</span></a><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_PATTERN_MATCH_REQUIREMENTS_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">SET_PATTERN_MATCH_REQUIREMENTS_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTGoing::set_pattern_match_requirements</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_PATTERN_MATCH_CLAUSE_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_PATTERN_MATCH_CLAUSE_PLUG</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTGoing::compile_pattern_match_clause</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -269,7 +269,7 @@ to typecheck each clause.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">PluginCalls::validate_AP_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, &</span><span class="identifier-syntax">rv</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">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_PATTERN_PARSING_DA</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"referred to plugin - "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"referred to feature - "</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">rv</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</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">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_PATTERN_PARSING_DA</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"failed badly with problem\n"</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -62,7 +62,7 @@ function togglePopup(material_id) {
|
|||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Many rules are predicated on action patterns: "Instead of opening a closed
|
||||
door", say, is a rule in the "instead of opening" rulebook which is predicated
|
||||
on the action applying to "a closed door". This is stored in the following
|
||||
actions-plugin corner of the <a href="../assertions-module/5-rcd.html" class="internal">Runtime Context Data (in assertions)</a> for the rule.
|
||||
actions-feature corner of the <a href="../assertions-module/5-rcd.html" class="internal">Runtime Context Data (in assertions)</a> for the rule.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -82,12 +82,12 @@ actions-plugin corner of the <a href="../assertions-module/5-rcd.html" class="in
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure actions_rcd_data is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Note that if the actions plugin is inactive, then this never runs...
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Note that if the actions feature is inactive, then this never runs...
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::new_rcd</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ActionRules::new_rcd</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_PLUGIN_RCD_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><a href="4-rpoa.html#SP1" class="function-link"><span class="function-syntax">ActionRules::new_rcd_data</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><a href="4-rpoa.html#SP1" class="function-link"><span class="function-syntax">ActionRules::new_rcd_data</span></a><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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -96,46 +96,46 @@ actions-plugin corner of the <a href="../assertions-module/5-rcd.html" class="in
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::set_always_test_actor</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">always_test_actor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::get_always_test_actor</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">always_test_actor</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">FALSE</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">ActionRules::clear_always_test_actor</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">always_test_actor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">ActionRules::set_never_test_actor</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">never_test_actor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::get_never_test_actor</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">never_test_actor</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">TRUE</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">ActionRules::set_marked_for_anyone</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">marked_for_anyone</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::get_marked_for_anyone</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">arcd</span><span class="plain-syntax">-></span><span class="element-syntax">marked_for_anyone</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>The following all make use the action pattern <span class="extract"><span class="extract-syntax">idrcd->ap</span></span> in the RCD. This
|
||||
seems a little odd: why isn't it in the <a href="4-rpoa.html#SP1" class="internal">actions_rcd_data</a>? The answer is
|
||||
that it needs to exist even when the actions plugin is inactive, because it's
|
||||
that it needs to exist even when the actions feature is inactive, because it's
|
||||
still used for parsing predicates for non-action-based rulebooks.
|
||||
</p>
|
||||
|
||||
|
@ -151,14 +151,14 @@ still used for parsing predicates for non-action-based rulebooks.
|
|||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionRules::within_action_context</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">idrcd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ap2.html#SP7" class="function-link"><span class="function-syntax">ActionPatterns::covers_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionRules::required_action</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionRules::required_action</span></span>:<br/>Actions - <a href="4-act.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idrcd</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">idrcd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">actions_rcd_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RCD_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions</span><span class="plain-syntax">, </span><span class="identifier-syntax">idrcd</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">arcd</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ap2.html#SP7" class="function-link"><span class="function-syntax">ActionPatterns::single_positive_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</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">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -77,7 +77,7 @@ function togglePopup(material_id) {
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">CG_IS_PROPERTY_NAME</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> for ways to refer to property values used adjectivally</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Fixed maxima are generally a bad idea in a compiler (what seems excessive in
|
||||
one decade becomes limiting in the next), but in this plugin we have to
|
||||
one decade becomes limiting in the next), but in this feature we have to
|
||||
make data tables in formats which can be handled by the Inform 6 compiler.
|
||||
And that does have two maxima which cannot easily be avoided, so we need to
|
||||
respect those here as well.
|
||||
|
|
|
@ -63,10 +63,10 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Parsing Plugin' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#5">Chapter 5: Command Parser</a></li><li><b>Parsing Plugin</b></li></ul></div>
|
||||
<p class="purpose">A plugin for command-parser support.</p>
|
||||
<p class="purpose">A feature for command-parser support.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Inform provides extensive support for a command parser at runtime, and all of
|
||||
that support is contained in the "parsing" plugin, which occupies this entire
|
||||
that support is contained in the "parsing" feature, which occupies this entire
|
||||
chapter.
|
||||
</p>
|
||||
|
||||
|
@ -74,13 +74,13 @@ chapter.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ParsingPlugin::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pp.html#SP11" class="function-link"><span class="function-syntax">ParsingPlugin::nodes_and_annotations</span></a><span class="plain-syntax">();</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP2" class="function-link"><span class="function-syntax">ParsingPlugin::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="5-us.html#SP1" class="function-link"><span class="function-syntax">Understand::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP4" class="function-link"><span class="function-syntax">ParsingPlugin::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP7" class="function-link"><span class="function-syntax">ParsingPlugin::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPlugin::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PERMISSION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pv.html#SP1" class="function-link"><span class="function-syntax">Visibility::new_permission_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP9" class="function-link"><span class="function-syntax">ParsingPlugin::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP2" class="function-link"><span class="function-syntax">ParsingPlugin::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="5-us.html#SP1" class="function-link"><span class="function-syntax">Understand::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP4" class="function-link"><span class="function-syntax">ParsingPlugin::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP7" class="function-link"><span class="function-syntax">ParsingPlugin::new_variable_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPlugin::new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PERMISSION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pv.html#SP1" class="function-link"><span class="function-syntax">Visibility::new_permission_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP9" class="function-link"><span class="function-syntax">ParsingPlugin::complete_model</span></a><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTLiteralPatterns::enable_parsing</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -112,12 +112,12 @@ for generating that is a little delicate.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>This plugin attaches a <a href="5-pp.html#SP3" class="internal">parsing_data</a> object to every inference subject,
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>This feature attaches a <a href="5-pp.html#SP3" class="internal">parsing_data</a> object to every inference subject,
|
||||
and in particular, to every object instance and every kind of object.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PARSING_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">PARSING_DATA_FOR_SUBJ</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PARSING_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">PARSING_DATA_FOR_SUBJ</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -134,12 +134,12 @@ and in particular, to every object instance and every kind of object.
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::new_subject_notify</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ParsingPlugin::new_subject_notify</span></span>:<br/><a href="5-pp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><a href="5-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPlugin::new_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><a href="5-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPlugin::new_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subj</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure parsing_data is accessed in 4/ap, 4/act, 4/as, 4/nap, 4/gng, 5/cg, 5/cgl, 5/ts and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>We make use of a new kind of rvalue in this plugin: <span class="extract"><span class="extract-syntax">K_understanding</span></span>. This
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>We make use of a new kind of rvalue in this feature: <span class="extract"><span class="extract-syntax">K_understanding</span></span>. This
|
||||
is created in <a href="../kinds-module/2-fk.html" class="internal">Familiar Kinds (in kinds)</a>, not here, but we do have to provide
|
||||
the following functions to handle its constant rvalues. These correspond to
|
||||
<a href="5-cg.html#SP3" class="internal">command_grammar</a> objects, so comparing them, and producing rvalues, is easy:
|
||||
|
@ -163,7 +163,7 @@ the following functions to handle its constant rvalues. These correspond to
|
|||
<span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPlugin::rvalue_to_command_grammar</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParsingPlugin::rvalue_to_command_grammar</span></span>:<br/>Command Grammar Tokens - <a href="5-cgt.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">) }</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>A number of global variables are given special treatment by this plugin,
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>A number of global variables are given special treatment by this feature,
|
||||
including a whole family with names like "the K understood", for different
|
||||
kinds K.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
|
||||
</p>
|
||||
|
@ -296,7 +296,7 @@ where grammar has specified a need. (By default, this will not happen.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::from_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP9">§9</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Finally, this plugin needs just one new annotation for the parse tree:
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Finally, this feature needs just one new annotation for the parse tree:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">constant_command_grammar_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">command_grammar</span></span><span class="comment-syntax">: for constant values</span>
|
||||
|
|
|
@ -91,7 +91,7 @@ the following blob of data to a <span class="extract"><span class="extract-synta
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Visibility::new_permission_notify</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Visibility::new_permission_notify</span></span>:<br/>Parsing Plugin - <a href="5-pp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_PLUGIN_PP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">, </span><a href="5-pv.html#SP1" class="function-link"><span class="function-syntax">Visibility::new_pp_data</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CREATE_PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">, </span><a href="5-pv.html#SP1" class="function-link"><span class="function-syntax">Visibility::new_pp_data</span></a><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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -110,9 +110,9 @@ for "open" when its negation "closed" has the permission, or vice versa.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">seek_prn</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">parity</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)?</span><span class="identifier-syntax">pr:</span><span class="plain-syntax">(</span><span class="identifier-syntax">EitherOrProperties::get_negation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</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">seek_prn</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">PropertyPermissions::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">seek_prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PropertyPermissions::grant</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">seek_prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</span><span class="plain-syntax"> = </span><span class="identifier-syntax">level</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WHENW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</span><span class="plain-syntax"> = </span><span class="identifier-syntax">level</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WHENW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</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">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -128,7 +128,7 @@ for "open" when its negation "closed" has the permission, or vice versa.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">property</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PropertyPermissions::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">allow_inheritance</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">pp</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pp</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</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="identifier-syntax">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -140,7 +140,7 @@ at <a href="../CommandParserKit/S-prs.html" class="internal">Parser (in CommandP
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Visibility::get_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</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">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</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">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>The condition text, if supplied, says that the property is only visible
|
||||
|
@ -153,18 +153,18 @@ when we need it, which is now:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Visibility::get_condition</span><span class="plain-syntax">(</span><span class="identifier-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</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">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</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="function-syntax"><s-condition></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::new_UNKNOWN</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">Dash::validate_conditional_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_sentence</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_sentence</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadVisibilityWhen</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the condition after 'when' makes no sense to me"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"although otherwise this worked - it is only the part after 'when' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which I can't follow."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</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">NULL</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">spec</span><span class="plain-syntax">;</span>
|
||||
|
@ -180,8 +180,8 @@ when we need it, which is now:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_PERMISSIONS_FOR_INFS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$Y: visibility %d, condition %W\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PropertyPermissions::get_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">pp</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_level_in_parser</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="element-syntax">visibility_condition</span><span class="plain-syntax">);</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">InferenceSubjects::narrowest_broader_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pv.html#SP6" class="function-link"><span class="function-syntax">Visibility::log_parsing_visibility</span></a><span class="plain-syntax">(</span>
|
||||
|
|
|
@ -62,7 +62,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="5-us.html#SP1">§1. Traversing</a></li><li><a href="5-us.html#SP4">§4. The subject phrase</a></li><li><a href="5-us.html#SP7">§7. Object phrases I: Understand explicit grammar</a></li><li><a href="5-us.html#SP12">§12. Object phrases II: Understand the command</a></li><li><a href="5-us.html#SP13">§13. Object phrases III: Understand the property</a></li><li><a href="5-us.html#SP14">§14. Handling object phrase depending on subject phrase</a></li><li><a href="5-us.html#SP15">§15. Command blocks</a></li><li><a href="5-us.html#SP16">§16. Property blocks</a></li><li><a href="5-us.html#SP17">§17. Nothing blocks</a></li><li><a href="5-us.html#SP18">§18. The other way quoted grammar arises</a></li><li><a href="5-us.html#SP19">§19. Text blocks</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Traversing. </b>When the "parser" plugin is active, any sentence in the form "Understand...
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Traversing. </b>When the "parser" feature is active, any sentence in the form "Understand...
|
||||
as..." is considered to be an instruction about the command grammar, which
|
||||
is a special data structure created by Inform for the use of the command
|
||||
parser at run-time.
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
|
||||
<p class="purpose">An overview of the if module's role and abilities.</p>
|
||||
|
||||
<ul class="toc"><li><a href="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">§2. So many plugins</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">§2. So many features</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Prerequisites. </b>The if module is a part of the Inform compiler toolset. It is presented as a
|
||||
literate program or "web". Before diving in:
|
||||
|
@ -67,7 +67,7 @@ and where functions have names like <span class="extract"><span class="extract-s
|
|||
uses a module of utility functions called <a href="../../../inweb/foundation-module/index.html" class="internal">foundation</a>.
|
||||
For more, see <a href="../../../inweb/foundation-module/P-abgtf.html" class="internal">A Brief Guide to Foundation (in foundation)</a>.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. So many plugins. </b>This module consists entirely of plugins, and when they are all inactive,
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. So many features. </b>This module consists entirely of features, and when they are all inactive,
|
||||
as for example with a Basic Inform project, it's as if the module does not exist
|
||||
at all: it does nothing.
|
||||
</p>
|
||||
|
@ -76,22 +76,22 @@ at all: it does nothing.
|
|||
and are largely independent of each other:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <a href="2-bd.html" class="internal">Chapter 2: Bibliographic Data</a> is a single plugin, "bibliographic data".
|
||||
<ul class="items"><li>● <a href="2-bd.html" class="internal">Chapter 2: Bibliographic Data</a> is a single feature, "bibliographic data".
|
||||
This manages metadata on projects, notably the Interactive Fiction ID, and
|
||||
follows a number of Internet standards for such things. <a href="2-ri.html" class="internal">Release Instructions</a>
|
||||
collates release details included in the source text, and acts as a bridge to
|
||||
the releasing agent <a href="../inblorb/index.html" class="internal">inblorb</a>.
|
||||
</li><li>● <a href="3-sm.html" class="internal">Chapter 3: Space and Time</a>, by contrast, is made up of many individual
|
||||
plugins, which can independently be active or not: collectively they form the
|
||||
features, which can independently be active or not: collectively they form the
|
||||
usual model world for interactive fiction, but it's possible, for example,
|
||||
to remove the concept of a geographical map, or of scenes, and still have
|
||||
the rest.
|
||||
</li><li>● <a href="4-ap.html" class="internal">Chapter 4: Actions</a> is the single plugin "actions", which provides a
|
||||
</li><li>● <a href="4-ap.html" class="internal">Chapter 4: Actions</a> is the single feature "actions", which provides a
|
||||
framework for how agents in the world model can perform simple tasks such as
|
||||
picking things up, or going from place to place.
|
||||
</li><li>● <a href="5-pp.html" class="internal">Chapter 5: Command Parser</a> is the single plugin "parsing", and
|
||||
</li><li>● <a href="5-pp.html" class="internal">Chapter 5: Command Parser</a> is the single feature "parsing", and
|
||||
provides for command parsing. Projects using other mechanisms for having
|
||||
the reader interact with them do not need this, and can deactivate the plugin.
|
||||
the reader interact with them do not need this, and can deactivate the feature.
|
||||
</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="1-im.html">❯</a></li></ul></div>
|
||||
|
|
|
@ -106,7 +106,7 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="3-sm.html">
|
||||
<spon class="sectiontitle">Spatial Model</span></a> -
|
||||
<span class="sectionpurpose">A plugin which constructs the fundamental spatial model used by IF, to represent containment, support, carrying, wearing, and incorporation.</span></p>
|
||||
<span class="sectionpurpose">A feature which constructs the fundamental spatial model used by IF, to represent containment, support, carrying, wearing, and incorporation.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-enah.html">
|
||||
|
@ -121,37 +121,37 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="3-si.html">
|
||||
<spon class="sectiontitle">Spatial Inferences</span></a> -
|
||||
<span class="sectionpurpose">Six families of inference used by the spatial plugin.</span></p>
|
||||
<span class="sectionpurpose">Six families of inference used by the spatial feature.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-prs.html">
|
||||
<spon class="sectiontitle">Persons</span></a> -
|
||||
<span class="sectionpurpose">A plugin giving minimal support for switchable devices.</span></p>
|
||||
<span class="sectionpurpose">A feature giving minimal support for switchable devices.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-tp.html">
|
||||
<spon class="sectiontitle">The Player</span></a> -
|
||||
<span class="sectionpurpose">A plugin to give a special role to a person who is the protagonist.</span></p>
|
||||
<span class="sectionpurpose">A feature to give a special role to a person who is the protagonist.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-dvc.html">
|
||||
<spon class="sectiontitle">Devices</span></a> -
|
||||
<span class="sectionpurpose">A plugin giving minimal support for switchable devices.</span></p>
|
||||
<span class="sectionpurpose">A feature giving minimal support for switchable devices.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-bck.html">
|
||||
<spon class="sectiontitle">Backdrops</span></a> -
|
||||
<span class="sectionpurpose">A plugin to provide support for backdrop objects, which are present as scenery in multiple rooms at once.</span></p>
|
||||
<span class="sectionpurpose">A feature to provide support for backdrop objects, which are present as scenery in multiple rooms at once.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-rgn.html">
|
||||
<spon class="sectiontitle">Regions</span></a> -
|
||||
<span class="sectionpurpose">A plugin providing support for grouping rooms together into named and nestable regions.</span></p>
|
||||
<span class="sectionpurpose">A feature providing support for grouping rooms together into named and nestable regions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-tm.html">
|
||||
<spon class="sectiontitle">The Map</span></a> -
|
||||
<span class="sectionpurpose">A plugin to provide a geographical model, linking rooms and doors together in oppositely-paired directions.</span></p>
|
||||
<span class="sectionpurpose">A feature to provide a geographical model, linking rooms and doors together in oppositely-paired directions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-mcr.html">
|
||||
|
@ -161,17 +161,17 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="3-tr.html">
|
||||
<spon class="sectiontitle">Timed Rules</span></a> -
|
||||
<span class="sectionpurpose">A plugin to support rules like "At 12:03AM: ...".</span></p>
|
||||
<span class="sectionpurpose">A feature to support rules like "At 12:03AM: ...".</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-scn.html">
|
||||
<spon class="sectiontitle">Scenes</span></a> -
|
||||
<span class="sectionpurpose">A plugin to support named periods of time during an interactive story.</span></p>
|
||||
<span class="sectionpurpose">A feature to support named periods of time during an interactive story.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-ts.html">
|
||||
<spon class="sectiontitle">The Score</span></a> -
|
||||
<span class="sectionpurpose">A plugin to support the score variables.</span></p>
|
||||
<span class="sectionpurpose">A feature to support the score variables.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-mhr.html">
|
||||
|
@ -188,12 +188,12 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="4-ap.html">
|
||||
<spon class="sectiontitle">Actions Plugin</span></a> -
|
||||
<span class="sectionpurpose">A plugin for actions, by which animate characters change the world model.</span></p>
|
||||
<span class="sectionpurpose">A feature for actions, by which animate characters change the world model.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-anaa.html">
|
||||
<spon class="sectiontitle">Actions-Only Nodes and Annotations</span></a> -
|
||||
<span class="sectionpurpose">Additional syntax tree node and annotation types used by the actions plugin.</span></p>
|
||||
<span class="sectionpurpose">Additional syntax tree node and annotation types used by the actions feature.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-ak.html">
|
||||
|
@ -263,7 +263,7 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="4-gng.html">
|
||||
<spon class="sectiontitle">Going</span></a> -
|
||||
<span class="sectionpurpose">A plugin to provide a little extra support for the "going" action.</span></p>
|
||||
<span class="sectionpurpose">A feature to provide a little extra support for the "going" action.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-rpoa.html">
|
||||
|
@ -280,7 +280,7 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="5-pp.html">
|
||||
<spon class="sectiontitle">Parsing Plugin</span></a> -
|
||||
<span class="sectionpurpose">A plugin for command-parser support.</span></p>
|
||||
<span class="sectionpurpose">A feature for command-parser support.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-us.html">
|
||||
|
|
|
@ -317,7 +317,7 @@ contexts by using a tilde: <span class="extract"><span class="extract-syntax">~a
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-cr.html#SP1_3">§1.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The actions plugin provides other kinds with idiosyncratic compilation needs,
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The actions feature provides other kinds with idiosyncratic compilation needs,
|
||||
if it is enabled.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -84,14 +84,14 @@ testing that the action is "going", that the origin is the Casino, and that
|
|||
Le Chiffre is there — three CPMC clauses.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The basic roster of CPMC clauses is here, but plugins can add more. In
|
||||
<p class="commentary">The basic roster of CPMC clauses is here, but features can add more. In
|
||||
particular, see <a href="2-mgap.html" class="internal">Matching Going Action Patterns</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Do not rearrange this without first reading the code below: the ordering is
|
||||
very significant. The CPMCs are grouped into "ranges", and it is intentional
|
||||
that those ranges are numbered 0, 1, 3, 2; we need the additional CPMCs from
|
||||
plugins to fall into range 2.
|
||||
features to fall into range 2.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ACTOR_CPMCRANGE</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
|
||||
|
@ -648,7 +648,7 @@ and otherwise we do our own thing.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ACTION_MATCHES_CPMC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-map.html#SP3_5_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Compile ACTION_MATCHES_CPMC test</span><span class="named-paragraph-number">3.5.1.1.1.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> The DETAILS range (but see plugins for extra ones)</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> The DETAILS range (but see features for extra ones)</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_EXISTS_CPMC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-map.html#SP3_5_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Compile NOUN_EXISTS_CPMC test</span><span class="named-paragraph-number">3.5.1.1.1.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_IS_INP1_CPMC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-map.html#SP3_5_1_1_1_8" class="named-paragraph-link"><span class="named-paragraph">Compile NOUN_IS_INP1_CPMC test</span><span class="named-paragraph-number">3.5.1.1.1.8</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -214,7 +214,7 @@ before we can proceed.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp_to_assert</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">bp_to_assert</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-ca.html#SP2_2">§2.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The action variables will exist only if the actions plugin is active, and
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The action variables will exist only if the actions feature is active, and
|
||||
are just <span class="extract"><span class="extract-syntax">actor</span></span>, <span class="extract"><span class="extract-syntax">noun</span></span> and <span class="extract"><span class="extract-syntax">second</span></span> at runtime:
|
||||
</p>
|
||||
|
||||
|
|
|
@ -225,7 +225,7 @@ utility functions in the <a href="../supervisor-module/index.html" class="intern
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP5" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</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">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP7" class="function-link"><span class="function-syntax">Errors::with_text</span></a><span class="plain-syntax">(</span><span class="string-syntax">"no -project in use, so ignoring -archive"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -545,9 +545,9 @@ are all legal:
|
|||
</pre>
|
||||
<ul class="items"><li>● <span class="extract"><span class="extract-syntax">"activates"</span></span> is a list of strings describing optional features of the Inform
|
||||
compiler to switch on if this kit is being used. The feature names are the names
|
||||
of plugins inside the compiler, and this is not the place to document that. See
|
||||
the implementation at <a href="../core-module/3-pm.html" class="internal">Chapter 3: Plugins (in core)</a>. But in general, unless you are performing
|
||||
wild experiments with new language features inside the compiler, you will never
|
||||
of features inside the compiler, and this is not the place to document that. See
|
||||
the implementation at <a href="../arch-module/3-fm.html" class="internal">Feature Manager (in arch)</a>. But in general, unless you are
|
||||
performing wild experiments with new features inside the compiler, you will never
|
||||
need <span class="extract"><span class="extract-syntax">"activates"</span></span>. It really exists for the benefit of the built-in kits. For
|
||||
example, WorldModelKit does the following:
|
||||
</li></ul>
|
||||
|
|
|
@ -158,7 +158,22 @@ language of play is English, then EnglishLanguageKit is included). That too does
|
|||
not need to be specified.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>Finally, note that the <span class="extract"><span class="extract-syntax">-basic</span></span> switch at the Inbuild or Inform command line,
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>Project metadata can also specify that given named compiler features should
|
||||
be active or inactive when compiling this project. For example, suppose the
|
||||
compiler has an experimental feature called <span class="extract"><span class="extract-syntax">fruit cultivation</span></span>, switched
|
||||
off by default, and a project needs to test this. It can do so by specifying:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> "activates": [ "fruit cultivation" ],</span>
|
||||
</pre>
|
||||
<p class="commentary">Similarly for <span class="extract"><span class="extract-syntax">"deactivates"</span></span>. Both clauses are optional and take a list of
|
||||
feature names: those features must all exist inside the compiler, or a
|
||||
problem will be thrown on compilation. (Note that the JSON here is identical
|
||||
to that which kits can also offer: kits can also turn features on or off.)
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Finally, note that the <span class="extract"><span class="extract-syntax">-basic</span></span> switch at the Inbuild or Inform command line,
|
||||
which signals that the project being compiled is for the Basic Inform language,
|
||||
is still legal to use if a project metadata file exists, but only so long as
|
||||
the metadata does not specify CommandParserKit or WorldModelKit: if it does,
|
||||
|
|
|
@ -150,7 +150,7 @@ cues all of that up; but even that code is fairly long.
|
|||
<ul class="endnotetexts"><li>This code is used in <a href="3-me.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP1_4" class="paragraph-anchor"></a><b>§1.4. </b>By this point we've accounted for rooms (and their contents and any parts
|
||||
thereof), directions (which we excluded), regions (ditto), and the player
|
||||
object (which the Player plugin put in the right place). The only remainder
|
||||
object (which the Player feature put in the right place). The only remainder
|
||||
will be things which are offstage (and their contents and any parts thereof):
|
||||
</p>
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ equivalent of unlocking the doors and turning the lights on in the morning.
|
|||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Main::deputy</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Main::deputy</span></span>:<br/><a href="1-mn.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">argv</span><span class="plain-syntax">[]) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Start up</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">proceed</span><span class="plain-syntax"> = </span><a href="1-mn.html#SP4" class="function-link"><span class="function-syntax">Main::read_command_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../core-module/3-pm.html#SP8" class="function-link"><span class="function-syntax">PluginManager::start</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="../core-module/3-pc.html#SP2" class="function-link"><span class="function-syntax">PluginCalls::start</span></a><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">proceed</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">silence_is_golden</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Inform 7 v[[Version Number]] has started.\n"</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
|
@ -198,7 +198,7 @@ but we won't assume that. Remember, <a href="../supervisor-module/index.html" cl
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">stand_alone</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)) || (</span><a href="../../../inweb/foundation-module/2-dl.html#SP5" class="function-link"><span class="function-syntax">Log::get_debug_log_filename</span></a><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">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP5" class="function-link"><span class="function-syntax">Projects::build_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::build_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/3-pth.html#SP9" class="function-link"><span class="function-syntax">Pathnames::create_in_file_system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="../problems-module/2-pl2.html#SP14" class="function-link"><span class="function-syntax">Problems::fatal</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"Unable to create Build folder for project: is it read-only?"</span><span class="plain-syntax">);</span>
|
||||
|
@ -213,14 +213,14 @@ but we won't assume that. Remember, <a href="../supervisor-module/index.html" cl
|
|||
<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">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../core-module/1-wtc.html#SP18" class="function-link"><span class="function-syntax">Task::problems_enabled</span></a><span class="plain-syntax">()) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP5" class="function-link"><span class="function-syntax">Projects::build_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax"> = </span><a href="../supervisor-module/5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::build_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PF</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">build_folder</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Problems.html"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../problems-module/2-pl3.html#SP19" class="function-link"><span class="function-syntax">StandardProblems::start_problems_report</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PF</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><a href="../problems-module/2-pl3.html#SP19" class="function-link"><span class="function-syntax">StandardProblems::start_problems_report</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/5-htm.html#SP18" class="function-link"><span class="function-syntax">HTML::set_link_abbreviation_path</span></a><span class="plain-syntax">(</span><a href="../supervisor-module/5-ps2.html#SP5" class="function-link"><span class="function-syntax">Projects::path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/5-htm.html#SP18" class="function-link"><span class="function-syntax">HTML::set_link_abbreviation_path</span></a><span class="plain-syntax">(</span><a href="../supervisor-module/5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">§2</a>.</li></ul>
|
||||
|
|
|
@ -70,38 +70,38 @@ 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"> 71.2% in compilation to Inter</span>
|
||||
<span class="plain-syntax"> 49.7% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 4.8% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
|
||||
<span class="plain-syntax"> 3.8% 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="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</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.4% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
|
||||
<span class="plain-syntax"> 1.0% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
|
||||
<span class="plain-syntax"> 0.6% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
|
||||
<span class="plain-syntax"> 0.6% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</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"> 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.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="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
|
||||
<span class="plain-syntax"> 0.2% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a>
|
||||
<span class="plain-syntax"> 2.8% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 25.7% in running Inter pipeline</span>
|
||||
<span class="plain-syntax"> 9.9% in step 14/15: generate inform6 -> auto.inf</span>
|
||||
<span class="plain-syntax"> 5.6% in step 5/15: load-binary-kits</span>
|
||||
<span class="plain-syntax"> 5.2% in step 6/15: make-synoptic-module</span>
|
||||
<span class="plain-syntax"> 1.4% in step 9/15: make-identifiers-unique</span>
|
||||
<span class="plain-syntax"> 0.4% in step 12/15: eliminate-redundant-operations</span>
|
||||
<span class="plain-syntax"> 0.4% in step 4/15: compile-splats</span>
|
||||
<span class="plain-syntax"> 0.4% in step 7/15: shorten-wiring</span>
|
||||
<span class="plain-syntax"> 0.2% in step 11/15: eliminate-redundant-labels</span>
|
||||
<span class="plain-syntax"> 0.2% in step 8/15: detect-indirect-calls</span>
|
||||
<span class="plain-syntax"> 1.9% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 2.6% in supervisor</span>
|
||||
<span class="plain-syntax"> 0.5% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 71.1% in compilation to Inter</span>
|
||||
<span class="plain-syntax"> 50.9% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 4.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
|
||||
<span class="plain-syntax"> 3.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
|
||||
<span class="plain-syntax"> 1.7% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
|
||||
<span class="plain-syntax"> 1.5% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
|
||||
<span class="plain-syntax"> 1.5% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
|
||||
<span class="plain-syntax"> 0.9% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
|
||||
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
|
||||
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
|
||||
<span class="plain-syntax"> 0.5% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
|
||||
<span class="plain-syntax"> 0.3% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
|
||||
<span class="plain-syntax"> 0.3% 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="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</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"> 2.6% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 25.8% in running Inter pipeline</span>
|
||||
<span class="plain-syntax"> 10.1% in step 14/15: generate inform6 -> auto.inf</span>
|
||||
<span class="plain-syntax"> 5.7% in step 5/15: load-binary-kits</span>
|
||||
<span class="plain-syntax"> 5.3% in step 6/15: make-synoptic-module</span>
|
||||
<span class="plain-syntax"> 1.3% in step 9/15: make-identifiers-unique</span>
|
||||
<span class="plain-syntax"> 0.3% in step 12/15: eliminate-redundant-operations</span>
|
||||
<span class="plain-syntax"> 0.3% in step 4/15: compile-splats</span>
|
||||
<span class="plain-syntax"> 0.3% in step 7/15: shorten-wiring</span>
|
||||
<span class="plain-syntax"> 0.3% in step 8/15: detect-indirect-calls</span>
|
||||
<span class="plain-syntax"> 0.1% in step 11/15: eliminate-redundant-labels</span>
|
||||
<span class="plain-syntax"> 1.3% not specifically accounted for</span>
|
||||
<span class="plain-syntax"> 2.5% in supervisor</span>
|
||||
<span class="plain-syntax"> 0.4% not specifically accounted for</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Memory consumption. </b>The following gives some idea of which classes of object have the most
|
||||
instances, and also of how Inform's memory tends to be used in practice.
|
||||
|
@ -110,39 +110,39 @@ 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 123356K = 120 MB</span>
|
||||
<span class="plain-syntax">Total memory consumption was 120953K = 118 MB</span>
|
||||
|
||||
<span class="plain-syntax"> ---- was used for 2049632 objects, in 364585 frames in 0 x 800K = 0K = 0 MB:</span>
|
||||
<span class="plain-syntax"> ---- was used for 2048081 objects, in 364618 frames in 0 x 800K = 0K = 0 MB:</span>
|
||||
|
||||
<span class="plain-syntax"> 33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
|
||||
<span class="plain-syntax"> 20.6% text_stream_array 4632 x 100 = 463200 objects, 26087424 bytes</span>
|
||||
<span class="plain-syntax"> 19.4% linked_list 43887 objects, 24576720 bytes</span>
|
||||
<span class="plain-syntax"> 11.1% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
|
||||
<span class="plain-syntax"> 10.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes</span>
|
||||
<span class="plain-syntax"> 8.2% parse_node 129712 objects, 10376960 bytes</span>
|
||||
<span class="plain-syntax"> 5.8% verb_conjugation 160 objects, 7425280 bytes</span>
|
||||
<span class="plain-syntax"> 4.3% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes</span>
|
||||
<span class="plain-syntax"> 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
|
||||
<span class="plain-syntax"> 33.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
|
||||
<span class="plain-syntax"> 20.9% text_stream_array 4616 x 100 = 461600 objects, 25997312 bytes</span>
|
||||
<span class="plain-syntax"> 19.8% linked_list 43895 objects, 24581200 bytes</span>
|
||||
<span class="plain-syntax"> 11.3% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
|
||||
<span class="plain-syntax"> 10.6% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes</span>
|
||||
<span class="plain-syntax"> 8.3% parse_node 129721 objects, 10377680 bytes</span>
|
||||
<span class="plain-syntax"> 5.9% verb_conjugation 160 objects, 7425280 bytes</span>
|
||||
<span class="plain-syntax"> 4.4% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes</span>
|
||||
<span class="plain-syntax"> 2.7% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
|
||||
<span class="plain-syntax"> 2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
|
||||
<span class="plain-syntax"> 2.0% kind_array 66 x 1000 = 66000 objects, 2642112 bytes</span>
|
||||
<span class="plain-syntax"> 2.1% kind_array 66 x 1000 = 66000 objects, 2642112 bytes</span>
|
||||
<span class="plain-syntax"> 1.7% scan_directory 521 objects, 2150688 bytes</span>
|
||||
<span class="plain-syntax"> 1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes</span>
|
||||
<span class="plain-syntax"> 1.5% inter_schema_token 13964 objects, 2010816 bytes</span>
|
||||
<span class="plain-syntax"> 1.4% package_request 21153 objects, 1861464 bytes</span>
|
||||
<span class="plain-syntax"> 1.6% inter_schema_token 13964 objects, 2010816 bytes</span>
|
||||
<span class="plain-syntax"> 1.5% package_request 21153 objects, 1861464 bytes</span>
|
||||
<span class="plain-syntax"> 1.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes</span>
|
||||
<span class="plain-syntax"> 1.2% dict_entry_array 473 x 100 = 47300 objects, 1528736 bytes</span>
|
||||
<span class="plain-syntax"> 1.1% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
|
||||
<span class="plain-syntax"> 1.1% inter_symbols_table 26592 objects, 1489152 bytes</span>
|
||||
<span class="plain-syntax"> 1.0% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
|
||||
<span class="plain-syntax"> 1.0% inter_package 26592 objects, 1276416 bytes</span>
|
||||
<span class="plain-syntax"> 0.8% map_data 671 objects, 1127280 bytes</span>
|
||||
<span class="plain-syntax"> 1.2% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
|
||||
<span class="plain-syntax"> 1.2% inter_symbols_table 26593 objects, 1489208 bytes</span>
|
||||
<span class="plain-syntax"> 1.1% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
|
||||
<span class="plain-syntax"> 1.0% inter_package 26593 objects, 1276464 bytes</span>
|
||||
<span class="plain-syntax"> 0.9% map_data 671 objects, 1127280 bytes</span>
|
||||
<span class="plain-syntax"> 0.8% id_body 942 objects, 1077648 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% adjective_meaning 202 objects, 1000304 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% excerpt_meaning 3109 objects, 970008 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% production 3878 objects, 899696 bytes</span>
|
||||
<span class="plain-syntax"> 0.6% ptoken 8408 objects, 874432 bytes</span>
|
||||
<span class="plain-syntax"> 0.6% grammatical_usage 3613 objects, 867120 bytes</span>
|
||||
<span class="plain-syntax"> 0.6% individual_form 2563 objects, 861168 bytes</span>
|
||||
<span class="plain-syntax"> 0.8% adjective_meaning 202 objects, 1000304 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% excerpt_meaning 3112 objects, 970944 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% production 3880 objects, 900160 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% ptoken 8411 objects, 874744 bytes</span>
|
||||
<span class="plain-syntax"> 0.7% grammatical_usage 3616 objects, 867840 bytes</span>
|
||||
<span class="plain-syntax"> 0.6% individual_form 2566 objects, 862176 bytes</span>
|
||||
<span class="plain-syntax"> 0.6% inter_schema_node 8917 objects, 856032 bytes</span>
|
||||
<span class="plain-syntax"> 0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
|
||||
<span class="plain-syntax"> 0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
|
||||
|
@ -150,25 +150,25 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> 0.2% rule 470 objects, 368480 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% dictionary 7590 objects, 364320 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% verb_form 386 objects, 348944 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% noun 2382 objects, 285840 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% noun 2385 objects, 286200 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% compilation_subtask 3355 objects, 268400 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes</span>
|
||||
<span class="plain-syntax"> 0.2% inference_subject 666 objects, 261072 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% vanilla_function 3683 objects, 235712 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% vanilla_function 3684 objects, 235776 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% binary_predicate 322 objects, 170016 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% hierarchy_location 1124 objects, 161856 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% linguistic_stock_item 3318 objects, 159264 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% linguistic_stock_item 3321 objects, 159408 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% rule_family_data 401 objects, 147568 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% nonterminal 758 objects, 139472 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% nonterminal 759 objects, 139656 bytes</span>
|
||||
<span class="plain-syntax"> 0.1% nascent_array 2127 objects, 136128 bytes</span>
|
||||
<span class="plain-syntax"> ---- inference 1703 objects, 122616 bytes</span>
|
||||
<span class="plain-syntax"> ---- documentation_ref 1273 objects, 112024 bytes</span>
|
||||
<span class="plain-syntax"> ---- imperative_defn 1379 objects, 99288 bytes</span>
|
||||
<span class="plain-syntax"> ---- noun_usage 2404 objects, 96160 bytes</span>
|
||||
<span class="plain-syntax"> ---- noun_usage 2407 objects, 96280 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>
|
||||
<span class="plain-syntax"> ---- inter_schema 1511 objects, 84616 bytes</span>
|
||||
<span class="plain-syntax"> ---- lexical_cluster 2519 objects, 80608 bytes</span>
|
||||
<span class="plain-syntax"> ---- lexical_cluster 2522 objects, 80704 bytes</span>
|
||||
<span class="plain-syntax"> ---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes</span>
|
||||
<span class="plain-syntax"> ---- kind_variable_declaration 1655 objects, 79440 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_tree 6 objects, 79344 bytes</span>
|
||||
|
@ -191,13 +191,13 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- ap_clause_array 2 x 400 = 800 objects, 51264 bytes</span>
|
||||
<span class="plain-syntax"> ---- HTML_tag_array 1 x 1000 objects, 48032 bytes</span>
|
||||
<span class="plain-syntax"> ---- text_substitution 437 objects, 41952 bytes</span>
|
||||
<span class="plain-syntax"> ---- anl_clause_array 1 x 1000 objects, 40032 bytes</span>
|
||||
<span class="plain-syntax"> ---- activity_list_array 1 x 1000 objects, 40032 bytes</span>
|
||||
<span class="plain-syntax"> ---- anl_clause_array 1 x 1000 objects, 40032 bytes</span>
|
||||
<span class="plain-syntax"> ---- to_family_data 497 objects, 39760 bytes</span>
|
||||
<span class="plain-syntax"> ---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes</span>
|
||||
<span class="plain-syntax"> ---- parsing_data 671 objects, 37576 bytes</span>
|
||||
<span class="plain-syntax"> ---- heading 198 objects, 36432 bytes</span>
|
||||
<span class="plain-syntax"> ---- production_list 615 objects, 34440 bytes</span>
|
||||
<span class="plain-syntax"> ---- production_list 616 objects, 34496 bytes</span>
|
||||
<span class="plain-syntax"> ---- regions_data 671 objects, 32208 bytes</span>
|
||||
<span class="plain-syntax"> ---- counting_data 671 objects, 32208 bytes</span>
|
||||
<span class="plain-syntax"> ---- property_permission 96 objects, 31488 bytes</span>
|
||||
|
@ -219,13 +219,12 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- parse_node_tree 19 objects, 16416 bytes</span>
|
||||
<span class="plain-syntax"> ---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes</span>
|
||||
<span class="plain-syntax"> ---- to_phrase_request 59 objects, 16048 bytes</span>
|
||||
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
|
||||
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
|
||||
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
|
||||
<span class="plain-syntax"> ---- JSON_value 182 objects, 16016 bytes</span>
|
||||
<span class="plain-syntax"> ---- build_vertex 129 objects, 15480 bytes</span>
|
||||
<span class="plain-syntax"> ---- adjective 137 objects, 15344 bytes</span>
|
||||
<span class="plain-syntax"> ---- pathname 375 objects, 15000 bytes</span>
|
||||
<span class="plain-syntax"> ---- generated_segment 14 objects, 14784 bytes</span>
|
||||
<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"> ---- uniqueness_count 453 objects, 10872 bytes</span>
|
||||
|
@ -239,8 +238,8 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- verb 108 objects, 6912 bytes</span>
|
||||
<span class="plain-syntax"> ---- hierarchy_attachment_point 77 objects, 6776 bytes</span>
|
||||
<span class="plain-syntax"> ---- text_literal_holder 163 objects, 6520 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_copy 54 objects, 6480 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_work 101 objects, 6464 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_copy 54 objects, 6048 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_edition 72 objects, 5184 bytes</span>
|
||||
<span class="plain-syntax"> ---- heading_tree 19 objects, 5168 bytes</span>
|
||||
<span class="plain-syntax"> ---- explicit_action_array 1 x 100 objects, 4832 bytes</span>
|
||||
|
@ -273,13 +272,13 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- build_step 24 objects, 1728 bytes</span>
|
||||
<span class="plain-syntax"> ---- pronoun_usage 42 objects, 1680 bytes</span>
|
||||
<span class="plain-syntax"> ---- table_contribution_array 1 x 100 objects, 1632 bytes</span>
|
||||
<span class="plain-syntax"> ---- plugin 25 objects, 1600 bytes</span>
|
||||
<span class="plain-syntax"> ---- inform_pipeline 24 objects, 1536 bytes</span>
|
||||
<span class="plain-syntax"> ---- compiler_feature 26 objects, 1456 bytes</span>
|
||||
<span class="plain-syntax"> ---- noun_filter_token 22 objects, 1408 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_node_array 34 objects, 1360 bytes</span>
|
||||
<span class="plain-syntax"> ---- special_meaning_holder 33 objects, 1320 bytes</span>
|
||||
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
|
||||
<span class="plain-syntax"> ---- constant_phrase 20 objects, 1280 bytes</span>
|
||||
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
|
||||
<span class="plain-syntax"> ---- invocation_options_array 1 x 100 objects, 1224 bytes</span>
|
||||
<span class="plain-syntax"> ---- direction_inference_data 30 objects, 1200 bytes</span>
|
||||
<span class="plain-syntax"> ---- JSON_requirement 36 objects, 1152 bytes</span>
|
||||
|
@ -295,12 +294,13 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- JSON_pair_requirement 26 objects, 832 bytes</span>
|
||||
<span class="plain-syntax"> ---- phrase_option_array 1 x 100 objects, 824 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_search_result 20 objects, 800 bytes</span>
|
||||
<span class="plain-syntax"> ---- internal_test 15 objects, 720 bytes</span>
|
||||
<span class="plain-syntax"> ---- web_md 5 objects, 720 bytes</span>
|
||||
<span class="plain-syntax"> ---- internal_test 15 objects, 720 bytes</span>
|
||||
<span class="plain-syntax"> ---- relation_guard 5 objects, 640 bytes</span>
|
||||
<span class="plain-syntax"> ---- implication 13 objects, 624 bytes</span>
|
||||
<span class="plain-syntax"> ---- code_generation 1 object, 576 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_warehouse_room 10 objects, 560 bytes</span>
|
||||
<span class="plain-syntax"> ---- generated_segment 14 objects, 560 bytes</span>
|
||||
<span class="plain-syntax"> ---- rulebook_outcome 17 objects, 544 bytes</span>
|
||||
<span class="plain-syntax"> ---- small_word_set 11 objects, 528 bytes</span>
|
||||
<span class="plain-syntax"> ---- inform_kit 5 objects, 520 bytes</span>
|
||||
|
@ -316,68 +316,68 @@ represent less than 1/1000th of the total.
|
|||
<span class="plain-syntax"> ---- source_file 5 objects, 360 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_genre 7 objects, 336 bytes</span>
|
||||
<span class="plain-syntax"> ---- cached_kind_declaration 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- module_request 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- door_dir_notice 5 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- module_request 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_pipeline 1 object, 312 bytes</span>
|
||||
<span class="plain-syntax"> ---- tree_inventory 1 object, 312 bytes</span>
|
||||
<span class="plain-syntax"> ---- up_family 9 objects, 288 bytes</span>
|
||||
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
|
||||
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
|
||||
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
|
||||
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
|
||||
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
|
||||
<span class="plain-syntax"> ---- verb_usage_tier 5 objects, 240 bytes</span>
|
||||
<span class="plain-syntax"> ---- inform_project 1 object, 224 bytes</span>
|
||||
<span class="plain-syntax"> ---- adjective_meaning_family 7 objects, 224 bytes</span>
|
||||
<span class="plain-syntax"> ---- inform_project 1 object, 216 bytes</span>
|
||||
<span class="plain-syntax"> ---- test_scenario 1 object, 216 bytes</span>
|
||||
<span class="plain-syntax"> ---- release_instructions 1 object, 208 bytes</span>
|
||||
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
|
||||
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
|
||||
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
|
||||
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
|
||||
<span class="plain-syntax"> ---- kit_dependency 4 objects, 192 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- attachment_instruction 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- attachment_instruction 4 objects, 160 bytes</span>
|
||||
<span class="plain-syntax"> ---- element_activation 4 objects, 128 bytes</span>
|
||||
<span class="plain-syntax"> ---- inbuild_nest 3 objects, 120 bytes</span>
|
||||
<span class="plain-syntax"> ---- local_block_value 2 objects, 112 bytes</span>
|
||||
<span class="plain-syntax"> ---- inform_kit_ittt 2 objects, 96 bytes</span>
|
||||
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
|
||||
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
|
||||
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
|
||||
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
|
||||
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
|
||||
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
|
||||
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
|
||||
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
|
||||
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
|
||||
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
|
||||
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
|
||||
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
|
||||
|
||||
<span class="plain-syntax">100.0% was used for memory not allocated for objects:</span>
|
||||
|
||||
<span class="plain-syntax"> 57.6% text stream storage 72814012 bytes in 480631 claims</span>
|
||||
<span class="plain-syntax"> 4.1% dictionary storage 5297152 bytes in 7590 claims</span>
|
||||
<span class="plain-syntax"> 56.8% text stream storage 70351240 bytes in 478774 claims</span>
|
||||
<span class="plain-syntax"> 4.2% dictionary storage 5297152 bytes in 7590 claims</span>
|
||||
<span class="plain-syntax"> ---- sorting 1520 bytes in 159 claims</span>
|
||||
<span class="plain-syntax"> 5.6% source text 7200000 bytes in 3 claims</span>
|
||||
<span class="plain-syntax"> 8.5% source text details 10800000 bytes in 2 claims</span>
|
||||
<span class="plain-syntax"> 5.8% source text 7200000 bytes in 3 claims</span>
|
||||
<span class="plain-syntax"> 8.7% source text details 10800000 bytes in 2 claims</span>
|
||||
<span class="plain-syntax"> 0.2% documentation fragments 262144 bytes in 1 claim</span>
|
||||
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
|
||||
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
|
||||
<span class="plain-syntax"> 3.6% inter symbols storage 4553008 bytes in 27952 claims</span>
|
||||
<span class="plain-syntax"> 13.2% inter bytecode storage 16767568 bytes in 14 claims</span>
|
||||
<span class="plain-syntax"> 4.9% inter links storage 6222976 bytes in 11 claims</span>
|
||||
<span class="plain-syntax"> 3.6% inter symbols storage 4553136 bytes in 27953 claims</span>
|
||||
<span class="plain-syntax"> 13.5% inter bytecode storage 16767664 bytes in 14 claims</span>
|
||||
<span class="plain-syntax"> 5.0% inter links storage 6222976 bytes in 11 claims</span>
|
||||
<span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span>
|
||||
<span class="plain-syntax"> 1.3% instance-of-kind counting 1700416 bytes in 1 claim</span>
|
||||
<span class="plain-syntax"> ---- compilation workspace for objects 21896 bytes in 25 claims</span>
|
||||
<span class="plain-syntax"> ---- lists for type-checking invocations 16000 bytes in 1 claim</span>
|
||||
<span class="plain-syntax"> ---- code generation workspace for objects 1336 bytes in 4 claims</span>
|
||||
<span class="plain-syntax"> ---- code generation workspace for objects 3480 bytes in 19 claims</span>
|
||||
<span class="plain-syntax"> 0.2% emitter array storage 280288 bytes in 1999 claims</span>
|
||||
|
||||
<span class="plain-syntax">-147.-2% was overhead - -185990064 bytes = -181630K = -177 MB</span>
|
||||
<span class="plain-syntax">-150.0% was overhead - -185895792 bytes = -181538K = -177 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
|
||||
|
@ -420,7 +420,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
|
|||
<a href="preform-diagnostics.txt" download>
|
||||
<button class="download-button">
|
||||
<img src="../docs-assets/download.png" alt="download icon" height=16 width=16>
|
||||
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 391.5kB)
|
||||
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 391.8kB)
|
||||
</button>
|
||||
</a>
|
||||
</p>
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>inform7</b></li></ul>
|
||||
<p class="purpose">The core compiler in a natural-language design system for interactive fiction. This is version 10.1.0.</p>
|
||||
<p class="purpose">The core compiler in a natural-language design system for interactive fiction. This is version 10.2.0.</p>
|
||||
<hr>
|
||||
<div class="contentspage">
|
||||
<ul class="chapterlist">
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -87,8 +87,8 @@ up individual tasks; it provides general mechanisms for issuing problem messages
|
|||
and also a "plugin" architecture enabling language features to be added. Most
|
||||
Inform users think of rooms, map connections and so on as being built in to
|
||||
the language itself, but internally we take the view that there is a purist
|
||||
Basic Inform language dealing only in data, and then a set of plugins to add
|
||||
domain-specific gadgets to that language.
|
||||
Basic Inform language dealing only in data, and then a set of optional compiler
|
||||
features to add domain-specific gadgets to that language.
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● Contents page of web: <a href="core-module/index.html" class="internal">core</a>.
|
||||
|
@ -155,8 +155,8 @@ for the moment.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>
|
|||
<ul class="footnotetexts"><li class="footnote" id="fn:2"><p class="inwebfootnote"><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> If we ever do go down the road of a full-on linker, issues like this would
|
||||
be part of what is nowadays called "ABI stability".
|
||||
<a href="#fnref:2" title="return to text"> ↩</a></p></li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>The <a href="if-module/index.html" class="internal">if</a> module consists of an extensive suite of plugins (see <span class="extract"><span class="extract-syntax">core</span></span>
|
||||
above) to add interactive fiction features to the Basic Inform language.
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>The <a href="if-module/index.html" class="internal">if</a> module consists of an extensive suite of features (see <span class="extract"><span class="extract-syntax">core</span></span>
|
||||
above) to add interactive fiction support to the Basic Inform language.
|
||||
Support for scenes, a spatial map, a protagonist character, and so on are
|
||||
all to be found here.
|
||||
</p>
|
||||
|
@ -164,7 +164,7 @@ all to be found here.
|
|||
<ul class="items"><li>● Contents page of web: <a href="if-module/index.html" class="internal">if</a>.
|
||||
</li><li>● Detailed overview: <a href="if-module/P-wtmd.html" class="internal">What This Module Does (in if)</a>.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>The <a href="multimedia-module/index.html" class="internal">multimedia</a> module consists of a few plugins (see <span class="extract"><span class="extract-syntax">core</span></span> above)
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>The <a href="multimedia-module/index.html" class="internal">multimedia</a> module consists of a few features (see <span class="extract"><span class="extract-syntax">core</span></span> above)
|
||||
to add images, sound files and external file-handling to the Basic Inform
|
||||
language.
|
||||
</p>
|
||||
|
|
|
@ -174,8 +174,8 @@ the letter <span class="extract"><span class="extract-syntax">K</span></span>:
|
|||
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CON_KIND_VARIABLE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>So much for the exotica: back onto familiar ground for anyone who uses
|
||||
Inform. Some standard kinds follow. Some belong only to plugins; if the
|
||||
plugin in question is inactive, they will remain <span class="extract"><span class="extract-syntax">NULL</span></span> and do nothing.
|
||||
Inform. Some standard kinds follow. Some belong only to features; if the
|
||||
feature in question is inactive, they will remain <span class="extract"><span class="extract-syntax">NULL</span></span> and do nothing.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -142,7 +142,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tcc</span><span class="plain-syntax"> == </span><span class="constant-syntax">compatible_with_KCC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"SNIPPET_TY"</span><span class="plain-syntax">)) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor_casting_rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dtcr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor_casting_rule</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">dtcr</span><span class="plain-syntax">-></span><span class="element-syntax">next_casting_rule</span><span class="plain-syntax"> = </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">first_casting_rule</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -174,7 +174,7 @@ protocol is applied to all of the base kinds conforming to that protocol.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing</span><span class="plain-syntax">)) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">ttd</span><span class="plain-syntax">-></span><span class="element-syntax">template_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"*UNDERSTOOD-VARIABLE"</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
|
|
|
@ -130,7 +130,7 @@ a new one if necessary, and give the subject <span class="extract"><span class="
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Requesting new nameless properties. </b>These are properties needed for implementation reasons by <a href="../runtime-module/index.html" class="internal">runtime</a>, or by
|
||||
plugins in <a href="../if-module/index.html" class="internal">if</a>, but which have no existence at the Inform 7 source text level —
|
||||
features in <a href="../if-module/index.html" class="internal">if</a>, but which have no existence at the Inform 7 source text level —
|
||||
and hence have no names. An author cannot refer to them, knows nothing of them.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -262,7 +262,7 @@ something.
|
|||
<span class="plain-syntax"> </span><a href="3-vp.html#SP7" class="function-link"><span class="function-syntax">ValueProperties::make_coincide_with_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_5" class="paragraph-anchor"></a><b>§3.5. </b>A few properties have special significance to core Inform, though plugins
|
||||
<p class="commentary firstcommentary"><a id="SP3_5" class="paragraph-anchor"></a><b>§3.5. </b>A few properties have special significance to core Inform, though features
|
||||
are interested in many others:
|
||||
</p>
|
||||
|
||||
|
|
|
@ -145,7 +145,7 @@ nameless in the source text, unrecorded in the Index, and generally invisible
|
|||
to the end user.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Core Inform creates no such properties, but many of the plugins do.
|
||||
<p class="commentary">Core Inform creates no such properties, but many of the features do.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The function comes in two forms: one where we already have an iname we want
|
||||
|
|
|
@ -78,7 +78,7 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">knowledge</a></li><li><a href="index.html#4">Chapter 4: Subjects</a></li><li><b>Inference Subjects</b></li></ul></div>
|
||||
<p class="purpose">A unified way to refer to the things propositions talk about.</p>
|
||||
|
||||
<ul class="toc"><li><a href="4-is.html#SP1">§1. Families</a></li><li><a href="4-is.html#SP3">§3. Hierarchy</a></li><li><a href="4-is.html#SP6">§6. Creation of subjects</a></li><li><a href="4-is.html#SP8">§8. Aliasing</a></li><li><a href="4-is.html#SP10">§10. Breadth</a></li><li><a href="4-is.html#SP13">§13. Access functions</a></li><li><a href="4-is.html#SP14">§14. Conversions to and from kinds and instances</a></li><li><a href="4-is.html#SP17">§17. Logging</a></li><li><a href="4-is.html#SP19">§19. Methods</a></li><li><a href="4-is.html#SP28">§28. Plugin data</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-is.html#SP1">§1. Families</a></li><li><a href="4-is.html#SP3">§3. Hierarchy</a></li><li><a href="4-is.html#SP6">§6. Creation of subjects</a></li><li><a href="4-is.html#SP8">§8. Aliasing</a></li><li><a href="4-is.html#SP10">§10. Breadth</a></li><li><a href="4-is.html#SP13">§13. Access functions</a></li><li><a href="4-is.html#SP14">§14. Conversions to and from kinds and instances</a></li><li><a href="4-is.html#SP17">§17. Logging</a></li><li><a href="4-is.html#SP19">§19. Methods</a></li><li><a href="4-is.html#SP28">§28. Feature data</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Families. </b><a href="4-is.html#SP6" class="internal">inference_subject</a> is a type which can represent anything in the model
|
||||
which a proposition can discuss: in particular, kinds, relations, variables
|
||||
|
@ -199,7 +199,7 @@ one and only subject with no broader subject:
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs_family</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">represents</span><span class="plain-syntax">; </span><span class="comment-syntax"> family-specific data</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">additional_data_for_plugins</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">]; </span><span class="comment-syntax"> and managed by those plugins</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">additional_data_for_features</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">]; </span><span class="comment-syntax"> and managed by those features</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inf_list</span><span class="plain-syntax">; </span><span class="comment-syntax"> contingently true: each </span><span class="extract"><span class="extract-syntax">inference</span></span><span class="comment-syntax"> drawn about this</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">imp_list</span><span class="plain-syntax">; </span><span class="comment-syntax"> necessarily true: each </span><span class="extract"><span class="extract-syntax">implication</span></span><span class="comment-syntax"> applying to this</span>
|
||||
|
@ -248,7 +248,7 @@ kind once the kind itself is created.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">infs</span><span class="plain-syntax">-></span><span class="identifier-syntax">infs_name_in_log</span><span class="plain-syntax"> = </span><span class="identifier-syntax">log_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">infs</span><span class="plain-syntax">-></span><span class="identifier-syntax">alias_variable</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Assertions::Assemblies::initialise_assemblies_data</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-></span><span class="element-syntax">assemblies</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">infs</span><span class="plain-syntax">-></span><span class="element-syntax">additional_data_for_plugins</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">infs</span><span class="plain-syntax">-></span><span class="element-syntax">additional_data_for_features</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::new_subject_notify</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -627,29 +627,25 @@ for an individual subject.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>§28. Plugin data. </b>See <a href="../core-module/3-pm.html" class="internal">Chapter 3: Plugins (in core)</a>, but to recap, plugins are inessential components
|
||||
of Inform which might or might not be in use for any given compilation run.
|
||||
</p>
|
||||
|
||||
<p class="commentary">If a plugin is in use, it may need to attach data of its own to a subject,
|
||||
and the following macro does that. <span class="extract"><span class="extract-syntax">name</span></span> should be the name of the plugin,
|
||||
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>§28. Feature data. </b>If a feature is in use, it may need to attach data of its own to a subject,
|
||||
and the following macro does that. <span class="extract"><span class="extract-syntax">name</span></span> should be the name of the feature,
|
||||
say <span class="extract"><span class="extract-syntax">spatial</span></span>; <span class="extract"><span class="extract-syntax">creator</span></span> a function to create and initialise the data structure,
|
||||
returning a pointer to it.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">S</span><span class="plain-syntax">)-></span><span class="element-syntax">additional_data_for_plugins</span><span class="plain-syntax">[</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">S</span><span class="plain-syntax">)-></span><span class="element-syntax">additional_data_for_features</span><span class="plain-syntax">[</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>§29. </b>Then, to access that same data, the following — though in practice each
|
||||
plugin will define further macros to make more abbreviated forms. Many of
|
||||
the plugins from the <a href="../if-module/index.html" class="internal">if</a> module are concerned only with instances — rooms
|
||||
the features from the <a href="../if-module/index.html" class="internal">if</a> module are concerned only with instances — rooms
|
||||
and doors, say — so <span class="extract"><span class="extract-syntax">DATA_ON_INSTANCE</span></span>_PCALL pays its way.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_data</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">S</span><span class="plain-syntax">)-></span><span class="element-syntax">additional_data_for_plugins</span><span class="plain-syntax">[</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="2-ins.html#SP6" class="function-link"><span class="function-syntax">Instances::as_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">))</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_data</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">S</span><span class="plain-syntax">)-></span><span class="element-syntax">additional_data_for_features</span><span class="plain-syntax">[</span><span class="identifier-syntax">name</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="2-ins.html#SP6" class="function-link"><span class="function-syntax">Instances::as_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">))</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-cr.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-ins.html">2</a></li><li class="progresschapter"><a href="3-prp.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">is</li><li class="progresssection"><a href="4-vs.html">vs</a></li><li class="progresssection"><a href="4-is2.html">is2</a></li><li class="progresssection"><a href="4-ks.html">ks</a></li><li class="progresssection"><a href="4-rs.html">rs</a></li><li class="progresssection"><a href="4-pp.html">pp</a></li><li class="progresssection"><a href="4-cos.html">cos</a></li><li class="progresschapter"><a href="5-inf.html">5</a></li><li class="progressnext"><a href="4-vs.html">❯</a></li></ul></div>
|
||||
|
|
|
@ -93,7 +93,7 @@ lists of <a href="4-pp.html#SP1" class="internal">property_permission</a> object
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_granted</span><span class="plain-syntax">; </span><span class="comment-syntax"> sentence granting the permission</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">pp_storage_data</span><span class="plain-syntax">; </span><span class="comment-syntax"> how we'll compile this at run-time</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plugin_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for plugins to attach, if they want to</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for features to attach, if they want to</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">property_permission_compilation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
|
@ -141,7 +141,7 @@ player (say), then we may create a new permission even though the player's
|
|||
kind ("person") already has one. This is intentional.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
|
||||
</p>
|
||||
|
||||
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> It means that plugins can specify different data about permissions when
|
||||
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> It means that features can specify different data about permissions when
|
||||
applied to specific instances — see the example of the jar below.
|
||||
<a href="#fnref:1" title="return to text"> ↩</a></p></li></ul>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -186,8 +186,8 @@ applied to specific instances — see the example of the jar below.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">, </span><span class="reserved-syntax">property_permission</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>§3.4. </b>Complicating matters, plugins have the ability to attach data of their
|
||||
own to a permission. For instance, the "parsing" plugin attaches the idea
|
||||
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>§3.4. </b>Complicating matters, features have the ability to attach data of their
|
||||
own to a permission. For instance, the "parsing" feature attaches the idea
|
||||
of a property being visible — we might say that every thing has an
|
||||
interior colour, but that it is invisible in the case of a dog and visible
|
||||
in the case of a broken jar.
|
||||
|
@ -197,17 +197,17 @@ in the case of a broken jar.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_PLUGINS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">-></span><span class="element-syntax">plugin_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">MAX_COMPILER_FEATURES</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">-></span><span class="element-syntax">feature_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::new_permission_notify</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_pp</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>These two macros provide access to plugin-specific permission data:
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>These two macros provide access to feature-specific permission data:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PP_PLUGIN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_pp_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">pp</span><span class="plain-syntax">-></span><span class="element-syntax">plugin_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_PLUGIN_PP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="identifier-syntax">plugin_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_plugin</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">pp</span><span class="plain-syntax">));</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_pp_data</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">pp</span><span class="plain-syntax">-></span><span class="element-syntax">feature_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">])</span>
|
||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_PP_FEATURE_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">, </span><span class="identifier-syntax">creator</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pp</span><span class="plain-syntax">)-></span><span class="identifier-syntax">feature_pp</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">##</span><span class="identifier-syntax">_feature</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">creator</span><span class="plain-syntax">(</span><span class="identifier-syntax">pp</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Boring access functions. </b></p>
|
||||
|
||||
|
|
|
@ -60,18 +60,18 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">knowledge</a></li><li><a href="index.html#5">Chapter 5: Modelling</a></li><li><b>The Naming Thicket</b></li></ul></div>
|
||||
<p class="purpose">Inform has a thicket of properties to do with names: not just the name itself, but whether it is a plural, a proper name, and so on. Here we look after these properties, and give them their initial states.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-tnt.html#SP1">§1. As a plugin</a></li><li><a href="5-tnt.html#SP5">§5. Proper named, plural named, definite article</a></li><li><a href="5-tnt.html#SP7">§7. Transferring name details</a></li><li><a href="5-tnt.html#SP8">§8. Private naming</a></li><li><a href="5-tnt.html#SP9">§9. Model completion</a></li><li><a href="5-tnt.html#SP12">§12. The adaptive person</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-tnt.html#SP1">§1. As a feature</a></li><li><a href="5-tnt.html#SP5">§5. Proper named, plural named, definite article</a></li><li><a href="5-tnt.html#SP7">§7. Transferring name details</a></li><li><a href="5-tnt.html#SP8">§8. Private naming</a></li><li><a href="5-tnt.html#SP9">§9. Model completion</a></li><li><a href="5-tnt.html#SP12">§12. The adaptive person</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. As a plugin. </b>This section of code is used even in Basic Inform, but it is structured
|
||||
as a plugin called "naming", even though it is permanently active, as a way
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. As a feature. </b>This section of code is used even in Basic Inform, but it is structured
|
||||
as a feature called "naming", even though it is permanently active, as a way
|
||||
to contain its complexity.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Naming::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP1" class="function-link"><span class="function-syntax">Naming::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP4" class="function-link"><span class="function-syntax">Naming::naming_new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP9" class="function-link"><span class="function-syntax">Naming::naming_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP1" class="function-link"><span class="function-syntax">Naming::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP4" class="function-link"><span class="function-syntax">Naming::naming_new_property_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-tnt.html#SP9" class="function-link"><span class="function-syntax">Naming::naming_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Naming::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -375,7 +375,7 @@ beebe"; but that we take care to reduce the case of "Your nose" (etc.)
|
|||
to "your nose", unless it occurs in the name of a room, like "Your Bedroom".
|
||||
</p>
|
||||
|
||||
<p class="commentary">If the "spatial" plugin is inactive, <span class="extract"><span class="extract-syntax">this_is_a_room</span></span> is always <span class="extract"><span class="extract-syntax">FALSE</span></span>.
|
||||
<p class="commentary">If the "spatial" feature is inactive, <span class="extract"><span class="extract-syntax">this_is_a_room</span></span> is always <span class="extract"><span class="extract-syntax">FALSE</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compose the I6 short-name as a piece of text</span><span class="named-paragraph-number">9.1.2.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
|
|
|
@ -140,7 +140,7 @@ respectively), but <a href="2-ins.html" class="internal">Instances</a> and <a hr
|
|||
|
||||
<p class="commentary">Finally, <a href="5-inf.html" class="internal">Chapter 5: Modelling</a> deals with the actual inferences, and with how the
|
||||
model world is constructed. The core of Inform does nothing very interesting
|
||||
here, but plugins from the <a href="../if-module/index.html" class="internal">if</a> module add some domain-specific savvy.
|
||||
here, but features from the <a href="../if-module/index.html" class="internal">if</a> module add some domain-specific savvy.
|
||||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
|
|
|
@ -182,7 +182,7 @@ number of successes.
|
|||
</li></ul>
|
||||
<pre class="undisplayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">Size of lexicon: 3112 excerpt meanings</span>
|
||||
<span class="plain-syntax"> Stored among 842 words out of total vocabulary of 10550</span>
|
||||
<span class="plain-syntax"> Stored among 842 words out of total vocabulary of 10546</span>
|
||||
<span class="plain-syntax"> 712 words have a start list: longest belongs to report (with 293 meanings)</span>
|
||||
<span class="plain-syntax"> 15 words have an end list: longest belongs to case (with 6 meanings)</span>
|
||||
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
|
||||
|
|
|
@ -61,23 +61,23 @@ which use this module:
|
|||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that the "multimedia" plugin itself does nothing except to be a parent
|
||||
<p class="commentary">Note that the "multimedia" feature itself does nothing except to be a parent
|
||||
to the other three; it doesn't even have an activation function.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">MULTIMEDIA_CREATIONS_DA</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">plugin</span><span class="plain-syntax"> *</span><span class="identifier-syntax">multimedia_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">figures_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">sounds_plugin</span><span class="plain-syntax">, *</span><span class="identifier-syntax">files_plugin</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">compiler_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">multimedia_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">figures_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">sounds_feature</span><span class="plain-syntax">, *</span><span class="identifier-syntax">files_feature</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">MultimediaModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"multimedia"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">figures_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="2-fgr.html#SP1" class="function-link"><span class="function-syntax">Figures::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"figures"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sounds_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="2-se.html#SP1" class="function-link"><span class="function-syntax">Sounds::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sounds"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">files_plugin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PluginManager::new</span><span class="plain-syntax">(&</span><a href="2-ef.html#SP1" class="function-link"><span class="function-syntax">ExternalFiles::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"glulx external files"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_plugin</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"multimedia"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">figures_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="2-fgr.html#SP1" class="function-link"><span class="function-syntax">Figures::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"figures"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sounds_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="2-se.html#SP1" class="function-link"><span class="function-syntax">Sounds::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sounds"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">files_feature</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Features::new</span><span class="plain-syntax">(&</span><a href="2-ef.html#SP1" class="function-link"><span class="function-syntax">ExternalFiles::start</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"glulx external files"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">multimedia_feature</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">MULTIMEDIA_CREATIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"figure creations"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -62,18 +62,18 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="2-ef.html#SP2">§2. One special meaning</a></li><li><a href="2-ef.html#SP6">§6. One significant kind</a></li><li><a href="2-ef.html#SP8">§8. Significant new instances</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The test group <span class="extract"><span class="extract-syntax">:files</span></span> exercises the features in this plugin.
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The test group <span class="extract"><span class="extract-syntax">:files</span></span> exercises the features in this feature.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The following is called to activate the plugin:
|
||||
<p class="commentary">The following is called to activate the feature:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExternalFiles::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ExternalFiles::start</span></span>:<br/>Multimedia Module - <a href="1-mm.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP1" class="function-link"><span class="function-syntax">ExternalFiles::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP2" class="function-link"><span class="function-syntax">ExternalFiles::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP7" class="function-link"><span class="function-syntax">ExternalFiles::files_new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP9" class="function-link"><span class="function-syntax">ExternalFiles::files_new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP1" class="function-link"><span class="function-syntax">ExternalFiles::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP2" class="function-link"><span class="function-syntax">ExternalFiles::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP7" class="function-link"><span class="function-syntax">ExternalFiles::files_new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ef.html#SP9" class="function-link"><span class="function-syntax">ExternalFiles::files_new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExternalFiles::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">,</span>
|
||||
|
@ -341,7 +341,7 @@ manages to make a figure, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">Propositions::Abstract::to_create_something</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_external_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_exf_creations</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::latest</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">files_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">files</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">files_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">files</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fd</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fd</span><span class="plain-syntax">-></span><span class="element-syntax">unextended_filename</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fd</span><span class="plain-syntax">-></span><span class="element-syntax">file_is_binary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">binary</span><span class="plain-syntax">;</span>
|
||||
|
@ -362,7 +362,7 @@ manages to make a figure, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"this is not the way to create a new external file"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which should be done with a special 'The File ... is called ...' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"sentence."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">files</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">files_data</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">files</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">files_data</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -62,15 +62,15 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="2-fgr.html#SP2">§2. One special meaning</a></li><li><a href="2-fgr.html#SP6">§6. One significant kind</a></li><li><a href="2-fgr.html#SP8">§8. Significant new instances</a></li><li><a href="2-fgr.html#SP12">§12. Blurb and manifest</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The following is called to activate the plugin:
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The following is called to activate the feature:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Figures::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Figures::start</span></span>:<br/>Multimedia Module - <a href="1-mm.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP2" class="function-link"><span class="function-syntax">Figures::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP7" class="function-link"><span class="function-syntax">Figures::figures_new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP10" class="function-link"><span class="function-syntax">Figures::figures_new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP1" class="function-link"><span class="function-syntax">Figures::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP2" class="function-link"><span class="function-syntax">Figures::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP7" class="function-link"><span class="function-syntax">Figures::figures_new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP10" class="function-link"><span class="function-syntax">Figures::figures_new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-fgr.html#SP1" class="function-link"><span class="function-syntax">Figures::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Figures::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -247,7 +247,7 @@ manages to make a figure, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">Propositions::Abstract::to_create_something</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_figure_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_figure_creations</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::latest</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">figures_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">figures_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">figd</span><span class="plain-syntax">-></span><span class="identifier-syntax">filename_of_image_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">figure_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">figd</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">figd</span><span class="plain-syntax">-></span><span class="identifier-syntax">figure_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
|
||||
|
@ -268,7 +268,7 @@ manages to make a figure, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"this is not the way to create a new figure name"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which should be done with a special 'Figure ... is the file ...' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"sentence."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">figures_data</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">figures_data</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -292,7 +292,7 @@ to the Materials folder for its project.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Figures::write_picture_manifest</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">include_cover</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cover_art_format</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">figures_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<!DOCTYPE plist PUBLIC \"-</span><span class="comment-syntax">Apple Computer//DTD PLIST 1.0//EN\" "</span>
|
||||
|
@ -331,7 +331,7 @@ the cover art, which is handled by Bibliographic Data.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Figures::write_blurb_commands</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">figures_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">figd</span><span class="plain-syntax">, </span><span class="reserved-syntax">figures_data</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">figd</span><span class="plain-syntax">-></span><span class="element-syntax">figure_number</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||
|
@ -352,7 +352,7 @@ the cover art, which is handled by Bibliographic Data.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Figures::write_copy_commands</span><span class="plain-syntax">(</span><span class="identifier-syntax">release_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rel</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">figures</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">figures_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">figd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">figd</span><span class="plain-syntax">, </span><span class="reserved-syntax">figures_data</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">figd</span><span class="plain-syntax">-></span><span class="element-syntax">figure_number</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
|
||||
|
|
|
@ -62,15 +62,15 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="2-se.html#SP2">§2. One special meaning</a></li><li><a href="2-se.html#SP6">§6. One significant kind</a></li><li><a href="2-se.html#SP8">§8. Significant new instances</a></li><li><a href="2-se.html#SP10">§10. Blurb and manifest</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The following is called to activate the plugin:
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>The following is called to activate the feature:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sounds::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Sounds::start</span></span>:<br/>Multimedia Module - <a href="1-mm.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP2" class="function-link"><span class="function-syntax">Sounds::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP7" class="function-link"><span class="function-syntax">Sounds::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP9" class="function-link"><span class="function-syntax">Sounds::new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP1" class="function-link"><span class="function-syntax">Sounds::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP2" class="function-link"><span class="function-syntax">Sounds::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP7" class="function-link"><span class="function-syntax">Sounds::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP9" class="function-link"><span class="function-syntax">Sounds::new_named_instance_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-se.html#SP1" class="function-link"><span class="function-syntax">Sounds::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Sounds::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -237,7 +237,7 @@ manages to make a sound, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">Propositions::Abstract::to_create_something</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_sound_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_sound_creations</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::latest</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PLUGIN_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FEATURE_DATA_ON_INSTANCE</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">filename_of_sound_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sound_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sd</span><span class="plain-syntax">-></span><span class="element-syntax">sound_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
|
||||
|
@ -254,7 +254,7 @@ manages to make a sound, a problem message is thrown.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"this is not the way to create a new sound name"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which should be done with a special 'Sound ... is the file ...' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"sentence."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">sounds_data</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -268,7 +268,7 @@ created from <span class="extract"><span class="extract-syntax">Figures.w</span>
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sounds::write_sounds_manifest</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Sounds::write_sounds_manifest</span></span>:<br/>Figures - <a href="2-fgr.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sd</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">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<key>Sounds</key>\n"</span><span class="plain-syntax">);</span>
|
||||
|
@ -289,7 +289,7 @@ created from <span class="extract"><span class="extract-syntax">Figures.w</span>
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sounds::write_blurb_commands</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">sd</span><span class="plain-syntax">, </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
|
||||
|
@ -308,7 +308,7 @@ created from <span class="extract"><span class="extract-syntax">Figures.w</span>
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sounds::write_copy_commands</span><span class="plain-syntax">(</span><span class="identifier-syntax">release_instructions</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rel</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">sounds</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">sd</span><span class="plain-syntax">, </span><span class="reserved-syntax">sounds_data</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ReleaseInstructions::add_aux_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">rel</span><span class="plain-syntax">,</span>
|
||||
|
|
|
@ -67,11 +67,11 @@ and where functions have names like <span class="extract"><span class="extract-s
|
|||
uses a module of utility functions called <a href="../../../inweb/foundation-module/index.html" class="internal">foundation</a>.
|
||||
For more, see <a href="../../../inweb/foundation-module/P-abgtf.html" class="internal">A Brief Guide to Foundation (in foundation)</a>.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Now in glorious Technicolor. </b>This module consists only of three independent plugins, and even those are
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Now in glorious Technicolor. </b>This module consists only of three independent features, and even those are
|
||||
very similar to each other:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <a href="2-ef.html" class="internal">External Files</a> is a plugin for reading and writing files;
|
||||
<ul class="items"><li>● <a href="2-ef.html" class="internal">External Files</a> is a feature for reading and writing files;
|
||||
</li><li>● <a href="2-fgr.html" class="internal">Figures</a> for displaying images; and
|
||||
</li><li>● <a href="2-se.html" class="internal">Sound Effects</a> for playing music or other sounds.
|
||||
</li></ul>
|
||||
|
|
|
@ -62,19 +62,19 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Instance Counting' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">runtime</a></li><li><a href="index.html#2">Chapter 2: Emission</a></li><li><b>Instance Counting</b></li></ul></div>
|
||||
<p class="purpose">Though a plugin, for convenience of implementation, this code is always active and provides for efficient loops through instances at runtime.</p>
|
||||
<p class="purpose">Though a feature, for convenience of implementation, this code is always active and provides for efficient loops through instances at runtime.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-ic.html#SP1">§1. Plugin startup</a></li><li><a href="2-ic.html#SP5">§5. The IK-count</a></li><li><a href="2-ic.html#SP7">§7. The IK-sequence</a></li><li><a href="2-ic.html#SP9">§9. The KD-count</a></li><li><a href="2-ic.html#SP10">§10. Properties of instances</a></li><li><a href="2-ic.html#SP11">§11. Loop optimisation</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-ic.html#SP1">§1. Feature startup</a></li><li><a href="2-ic.html#SP5">§5. The IK-count</a></li><li><a href="2-ic.html#SP7">§7. The IK-sequence</a></li><li><a href="2-ic.html#SP9">§9. The KD-count</a></li><li><a href="2-ic.html#SP10">§10. Properties of instances</a></li><li><a href="2-ic.html#SP11">§11. Loop optimisation</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Plugin startup. </b>Being a plugin, this needs a startup function, and here it is. It is in fact
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Feature startup. </b>Being a feature, this needs a startup function, and here it is. It is in fact
|
||||
called on every run: see <a href="../core-module/1-cm.html" class="internal">Core Module (in core)</a>.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceCounting::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP3" class="function-link"><span class="function-syntax">InstanceCounting::counting_new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP10" class="function-link"><span class="function-syntax">InstanceCounting::counting_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP1" class="function-link"><span class="function-syntax">InstanceCounting::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP3" class="function-link"><span class="function-syntax">InstanceCounting::counting_new_subject_notify</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP10" class="function-link"><span class="function-syntax">InstanceCounting::counting_complete_model</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="2-ic.html#SP1" class="function-link"><span class="function-syntax">InstanceCounting::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceCounting::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">stopwatch_timer</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">) {</span>
|
||||
|
@ -88,7 +88,7 @@ called on every run: see <a href="../core-module/1-cm.html" class="internal">Cor
|
|||
will in practice use that only for subjects representing kinds:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">COUNTING_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">COUNTING_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) </span><span class="identifier-syntax">FEATURE_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">counting_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -103,7 +103,7 @@ will in practice use that only for subjects representing kinds:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceCounting::counting_new_subject_notify</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">InstanceCounting::counting_new_subject_notify</span></span>:<br/><a href="2-ic.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_PLUGIN_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><a href="2-ic.html#SP3" class="function-link"><span class="function-syntax">InstanceCounting::new_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ATTACH_FEATURE_DATA_TO_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><a href="2-ic.html#SP3" class="function-link"><span class="function-syntax">InstanceCounting::new_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subj</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -183,7 +183,7 @@ a problem in practice; the number seldom exceeds a few hundred.
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-ic.html#SP5">§5</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Instance counts are actually useful to several other plugins, so we provide
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Instance counts are actually useful to several other features, so we provide
|
||||
the following. Note that if I is not in fact an instance of K then its IK-count
|
||||
is by definition -1.
|
||||
</p>
|
||||
|
@ -434,7 +434,7 @@ misleading to a human reader.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceCounting::optimise_loop</span><span class="plain-syntax">(</span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting_plugin</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</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">FEATURE_INACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">counting</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">COUNTING_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">)-></span><span class="element-syntax">has_instances</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
|
||||
|
|
|
@ -57,7 +57,7 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Showme Command' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">runtime</a></li><li><a href="index.html#2">Chapter 2: Emission</a></li><li><b>Showme Command</b></li></ul></div>
|
||||
<p class="purpose">A plugin to provide some support for the SHOWME testing command.</p>
|
||||
<p class="purpose">A feature to provide some support for the SHOWME testing command.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-sc.html#SP1">§1. Initialising</a></li><li><a href="2-sc.html#SP2">§2. Support for the SHOWME command</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
|
|
@ -128,8 +128,8 @@ function togglePopup(material_id) {
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">inc</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">exc</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::list_plugins</span><span class="plain-syntax">(</span><span class="identifier-syntax">inc</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::list_plugins</span><span class="plain-syntax">(</span><span class="identifier-syntax">exc</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Features::list</span><span class="plain-syntax">(</span><span class="identifier-syntax">inc</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">experimental_feature</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Features::list</span><span class="plain-syntax">(</span><span class="identifier-syntax">exc</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">experimental_feature</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#SP11" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">LANGUAGE_ELEMENTS_USED_MD_HL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-emt.html#SP7" class="function-link"><span class="function-syntax">Emit::text_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">inc</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">exc</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -67,7 +67,7 @@ function togglePopup(material_id) {
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</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">harmonium</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary">This is called only from the actions plugin; in Basic Inform no stored actions
|
||||
<p class="commentary">This is called only from the actions feature; in Basic Inform no stored actions
|
||||
exist, so if the function is called then an internal error will be thrown.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="5-bi.html#SP1">§1. Compilation data</a></li><li><a href="5-bi.html#SP2">§2. Compilation</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Compilation data. </b>This additional data is present only if the "backdrops" plugin is active:
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Compilation data. </b>This additional data is present only if the "backdrops" feature is active:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -61,18 +61,18 @@ function togglePopup(material_id) {
|
|||
|
||||
<ul class="toc"><li><a href="5-chr.html#SP1">§1. Plugin</a></li><li><a href="5-chr.html#SP2">§2. Past tense conditions</a></li><li><a href="5-chr.html#SP6">§6. Action history conditions</a></li><li><a href="5-chr.html#SP9">§9. Utility</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Plugin. </b>A little awkwardly, these two features make up the "chronology" plugin. There
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Plugin. </b>A little awkwardly, these two features make up the "chronology" feature. There
|
||||
are arguments for and against making these features doctrinally part of Basic
|
||||
Inform: or at least for making past tense conditions part of it. But Basic
|
||||
Inform has no concept of "turns", for example.
|
||||
</p>
|
||||
|
||||
<p class="commentary">In any case, for now, these features are an optional plugin, but the activation
|
||||
<p class="commentary">In any case, for now, these features are an optional feature, but the activation
|
||||
function does nothing:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Chronology::start_plugin</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Chronology::start_feature</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Past tense conditions. </b>Each past tense condition, such as "if the green door has been open", causes
|
||||
|
|
|
@ -268,7 +268,7 @@ using Inter's <span class="extract"><span class="extract-syntax">INSTANCE_IST</s
|
|||
<span class="plain-syntax"> </span><a href="2-hrr.html#SP23" class="function-link"><span class="function-syntax">Hierarchy::apply_metadata_from_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_IS_BACKDROP_MD_HL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="5-ins.html#SP4" class="function-link"><span class="function-syntax">RTInstances::xref_metadata</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_REGION_ENCLOSING_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Regions::enclosing</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ins.html#SP4" class="function-link"><span class="function-syntax">RTInstances::xref_metadata</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_SIBLING_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">object_tree_sibling</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ins.html#SP4" class="function-link"><span class="function-syntax">RTInstances::xref_metadata</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_CHILD_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">object_tree_child</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ins.html#SP4" class="function-link"><span class="function-syntax">RTInstances::xref_metadata</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_PROGENITOR_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Spatial::progenitor</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">));</span>
|
||||
|
@ -322,7 +322,7 @@ using Inter's <span class="extract"><span class="extract-syntax">INSTANCE_IST</s
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="6-inf.html#SP1" class="function-link"><span class="function-syntax">RTInferences::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_BRIEF_INFERENCES_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="6-inf.html#SP3" class="function-link"><span class="function-syntax">RTInferences::index_specific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_SPECIFIC_INFERENCES_MD_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_plugin</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">FEATURE_ACTIVE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial</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">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">part_flag</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_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_IS_A_PART_MD_HL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue