mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
1695 lines
235 KiB
HTML
1695 lines
235 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>21/rb</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '21/rl2' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#21">Chapter 21: Rules and Rulebooks</a></li><li><b>Rulebooks</b></li></ul><p class="purpose">To create, manage, compile and index rulebooks, the content of which is a linked list of booked rules together with some general conventions as to how they are to be used.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP8">§8. Construction</a></li><li><a href="#SP11">§11. Affected by placements</a></li><li><a href="#SP12">§12. Reading properties of rulebooks</a></li><li><a href="#SP13">§13. Rulebook variables</a></li><li><a href="#SP15">§15. Indexing and logging rulebooks</a></li><li><a href="#SP16">§16. Name parsing of rulebooks</a></li><li><a href="#SP19">§19. Rule attachments</a></li><li><a href="#SP20">§20. Compilation</a></li><li><a href="#SP21">§21. Parsing rulebook properties</a></li><li><a href="#SP23">§23. Rules index</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>A rulebook consists of some general properties together with a linked list
|
|
of booked rules, which constitute its entries. Some rulebooks are created
|
|
explicitly by the user's source text, some are created explicitly by the
|
|
Standard Rules, while others are "automatically generated" as a result
|
|
of other creations by Inform. For instance, each new scene ending generates
|
|
a rulebook. There are numerous other examples because a rulebook is the
|
|
natural and most flexible way to provide a "hook" by which to attach
|
|
behaviour to a world model.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">In some ways phrases and rules are really subsidiary ideas, and the
|
|
rulebook is the fundamental level of programming in Inform 7. The reason it
|
|
turns up so late in the source code is that many of the other data
|
|
structures were building up to this one: a <code class="display"><span class="extract">rulebook</span></code> contains <code class="display"><span class="extract">booking</span></code>s
|
|
which refer to <code class="display"><span class="extract">phrase</span></code>s whose usage is defined with <code class="display"><span class="extract">specification</span></code>s, and
|
|
whose definition is stored in the <code class="display"><span class="extract">parse_node</span></code> tree until it can be
|
|
resolved as a list of <code class="display"><span class="extract">invocation</span></code>s.
|
|
</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The semantics of rulebooks have grown over time. At one time they looked
|
|
only at the current action, and did something accordingly, but there was
|
|
no real sense in which they passed information. They then began to apply
|
|
to objects or actions (this was called the "focus") and, in a few cases,
|
|
returned information by ending in success, failure or neither (the
|
|
"outcome"). Gradually they became more function-like: today, the focus can
|
|
be a value of any kind, or else the current action; and the outcome can be
|
|
success, failure, neither, a named outcome, or else a value of any kind.
|
|
Moreover they can have variables shared by all rules in the current
|
|
instantiation of the rulebook. A rulebook is thus able to do anything which
|
|
a function X--> Y in a standard programming language can do; in 2009, it
|
|
was a particular goal of the rewriting of the kinds system to ensure that
|
|
rulebooks could, in principle, do anything which functions could do in a
|
|
language such as Haskell.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">rulebook</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">primary_name</span><span class="plain">; </span> <span class="comment">name in source text</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">alternative_name</span><span class="plain">; </span> <span class="comment">alternative form of name</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fragmentation_stem_length</span><span class="plain">; </span> <span class="comment">to do with parsing, but 0 for most rulebooks</span>
|
|
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">focus</span><span class="plain"> </span><span class="identifier">my_focus</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">outcomes</span><span class="plain"> </span><span class="identifier">my_outcomes</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">automatically_generated</span><span class="plain">; </span> <span class="comment">so that the index can omit these</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">runs_during_activities</span><span class="plain">; </span> <span class="comment">allow "while..." clauses to name these</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">used_by_future_action_activity</span><span class="plain">; </span> <span class="comment">like "deciding the scope of something..."</span>
|
|
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">booking</span><span class="plain"> *</span><span class="identifier">rule_list</span><span class="plain">; </span> <span class="comment">linked list of booked rules</span>
|
|
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">placement_affecting</span><span class="plain"> *</span><span class="identifier">placement_list</span><span class="plain">; </span> <span class="comment">linked list of explicit placements</span>
|
|
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">stacked_variable_owner</span><span class="plain"> *</span><span class="identifier">owned_by_rb</span><span class="plain">; </span> <span class="comment">rulebook variables owned here</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">stacked_variable_owner_list</span><span class="plain"> *</span><span class="identifier">accessible_from_rb</span><span class="plain">; </span> <span class="comment">and which can be named here</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">stv_creator_iname</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">rb_package</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">rb_iname</span><span class="plain">; </span> <span class="comment">run-time storage/routine holding contents</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">rulebook</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure rulebook is accessed in 21/rl, 21/rps, 25/cp and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The following is used only to store the result of parsing text as a
|
|
rulebook name:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">rulebook_match</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">matched_rulebook</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">match_from</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">match_length</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">advance_words</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tail_words</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">article_used</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">placement_requested</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">rulebook_match</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure rulebook_match is accessed in 22/pu and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>The contents of rulebooks can be unexpected if sentences are used which
|
|
explicitly list, or unlist, rules. To make the index more useful in these
|
|
cases, we keep a linked list, for each rulebook, of all sentences which
|
|
have affected it in this way:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">placement_affecting</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">placement_sentence</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">placement_affecting</span><span class="plain"> *</span><span class="identifier">next</span><span class="plain">;</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">placement_affecting</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure placement_affecting is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>As rulebooks are declared, the first few are quietly copied into
|
|
a small array: that way, we can always obtain a pointer to, say, the
|
|
turn sequence rules by looking up <code class="display"><span class="extract">built_in_rulebooks[TURN_SEQUENCE_RB]</span></code>.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAX_BUILT_IN_RULEBOOKS</span><span class="plain"> 64</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">MAX_BUILT_IN_RULEBOOKS</span><span class="plain">];</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">stacked_variable_owner_list</span><span class="plain"> *</span><span class="identifier">all_action_processing_vars</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>Many of the standard rulebooks need to have numbers which are
|
|
predictable, because they need to be referred to by number by the I6
|
|
library code. Because of this, it is important not to change the numbers
|
|
below without checking the corresponding I6 Constant declarations in the
|
|
<code class="display"><span class="extract">Definitions.i6t</span></code> file: the two sets of declarations must exactly match. They
|
|
must also exactly match the sequence in which these rulebooks are created
|
|
in the Standard Rules file.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">STARTUP_RB</span><span class="plain"> 0 </span> <span class="comment">Startup rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SHUTDOWN_RB</span><span class="plain"> 1 </span> <span class="comment">Shutdown rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">TURN_SEQUENCE_RB</span><span class="plain"> 11 </span> <span class="comment">Turn sequence rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SCENE_CHANGING_RB</span><span class="plain"> 12 </span> <span class="comment">Scene changing rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">WHEN_PLAY_BEGINS_RB</span><span class="plain"> 13 </span> <span class="comment">When play begins</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">WHEN_PLAY_ENDS_RB</span><span class="plain"> 14 </span> <span class="comment">When play ends</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">WHEN_SCENE_BEGINS_RB</span><span class="plain"> 15 </span> <span class="comment">When scene begins</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">WHEN_SCENE_ENDS_RB</span><span class="plain"> 16 </span> <span class="comment">When scene ends</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">EVERY_TURN_RB</span><span class="plain"> 17 </span> <span class="comment">Every turn</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ACTION_PROCESSING_RB</span><span class="plain"> 18 </span> <span class="comment">Action-processing rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SETTING_ACTION_VARIABLES_RB</span><span class="plain"> 19 </span> <span class="comment">Setting action variables rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SPECIFIC_ACTION_PROCESSING_RB</span><span class="plain"> 20 </span> <span class="comment">Specific action-processing rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PLAYERS_ACTION_AWARENESS_RB</span><span class="plain"> 21 </span> <span class="comment">Player's action awareness rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ACCESSIBILITY_RB</span><span class="plain"> 22 </span> <span class="comment">Accessibility rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">REACHING_INSIDE_RB</span><span class="plain"> 23 </span> <span class="comment">Reaching inside rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">REACHING_OUTSIDE_RB</span><span class="plain"> 24 </span> <span class="comment">Reaching outside rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">VISIBILITY_RB</span><span class="plain"> 25 </span> <span class="comment">Visibility rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PERSUASION_RB</span><span class="plain"> 26 </span> <span class="comment">Persuasion rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">UNSUCCESSFUL_ATTEMPT_BY_RB</span><span class="plain"> 27 </span> <span class="comment">Unsuccessful attempt by</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">BEFORE_RB</span><span class="plain"> 28 </span> <span class="comment">Before rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">INSTEAD_RB</span><span class="plain"> 29 </span> <span class="comment">Instead rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CHECK_RB</span><span class="plain"> 30 </span> <span class="comment">Check</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">CARRY_OUT_RB</span><span class="plain"> 31 </span> <span class="comment">Carry out rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">AFTER_RB</span><span class="plain"> 32 </span> <span class="comment">After rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">REPORT_RB</span><span class="plain"> 33 </span> <span class="comment">Report</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">DOES_THE_PLAYER_MEAN_RB</span><span class="plain"> 34 </span> <span class="comment">Does the player mean...? rules</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MULTIPLE_ACTION_PROCESSING_RB</span><span class="plain"> 35 </span> <span class="comment">For changing or reordering multiple actions</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Construction. </b>When a rulebook is to be created, we do a little treatment on its name. We
|
|
remove any article, and also strip off the suffix "rules" or "rulebook"
|
|
as redundant — see below for why. Since we want to insure that phrase/rule
|
|
preambles are unambiguous, we also want to make sure that keywords introducing
|
|
phrase definitions and timed events don't open the rulebook name.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">new</span><span class="plain">-</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">definite</span><span class="plain">-</span><span class="identifier">article</span><span class="plain">> <</span><span class="identifier">new</span><span class="plain">-</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]</span>
|
|
<span class="plain"><</span><span class="identifier">new</span><span class="plain">-</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> </span><span class="identifier">rules</span><span class="plain">/</span><span class="reserved">rulebook</span><span class="plain"> | ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="identifier">at</span><span class="plain"> *** | ==> </span><<span class="cwebmacro">Issue PM_RulebookWithAt problem</span> <span class="cwebmacronumber">8.1</span>>
|
|
<span class="identifier">to</span><span class="plain"> *** | ==> </span><<span class="cwebmacro">Issue PM_RulebookWithTo problem</span> <span class="cwebmacronumber">8.2</span>>
|
|
<span class="reserved">definition</span><span class="plain"> *** | ==> </span><<span class="cwebmacro">Issue PM_RulebookWithDefinition problem</span> <span class="cwebmacronumber">8.3</span>>
|
|
<span class="plain">... ==> 0</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_RulebookWithAt problem</span> <span class="cwebmacronumber">8.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookWithAt</span><span class="plain">),</span>
|
|
<span class="string">"this would create a rulebook whose name begins with 'at'"</span><span class="plain">,</span>
|
|
<span class="string">"which is forbidden since it would lead to ambiguities in "</span>
|
|
<span class="string">"the way people write rules. A rule beginning with 'At' "</span>
|
|
<span class="string">"is one which happens at a given time, whereas a rule "</span>
|
|
<span class="string">"belonging to a rulebook starts with the name of that "</span>
|
|
<span class="string">"rulebook, so a rulebook named 'at ...' would make such "</span>
|
|
<span class="string">"a rule inscrutable."</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_2"></a><b>§8.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_RulebookWithTo problem</span> <span class="cwebmacronumber">8.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookWithTo</span><span class="plain">),</span>
|
|
<span class="string">"this would create a rulebook whose name begins with 'to'"</span><span class="plain">,</span>
|
|
<span class="string">"which is forbidden since it would lead to ambiguities in "</span>
|
|
<span class="string">"the way people write rules. A rule beginning with 'To' "</span>
|
|
<span class="string">"is one which defines a phrase, whereas a rule "</span>
|
|
<span class="string">"belonging to a rulebook starts with the name of that "</span>
|
|
<span class="string">"rulebook, so a rulebook named 'to ...' would make such "</span>
|
|
<span class="string">"a rule inscrutable."</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8_3"></a><b>§8.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_RulebookWithDefinition problem</span> <span class="cwebmacronumber">8.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookWithDefinition</span><span class="plain">),</span>
|
|
<span class="string">"this would create a rulebook whose name begins with 'definition'"</span><span class="plain">,</span>
|
|
<span class="string">"which is forbidden since it would lead to ambiguities in "</span>
|
|
<span class="string">"the way people write rules. A rule beginning with 'Definition' "</span>
|
|
<span class="string">"is one which defines an adjective, whereas a rule "</span>
|
|
<span class="string">"belonging to a rulebook starts with the name of that "</span>
|
|
<span class="string">"rulebook, so a rulebook named 'to ...' would make such "</span>
|
|
<span class="string">"a rule inscrutable."</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>When a rulebook is created — say, "coordination" — Inform constructs
|
|
alternative names for it using the following — say, making "coordination
|
|
rules" and "coordination rulebook":
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">construction</span><span class="plain">> ::=</span>
|
|
<span class="plain">... </span><span class="identifier">rules</span><span class="plain"> |</span>
|
|
<span class="plain">... </span><span class="reserved">rulebook</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Whereas, at run-time, rulebooks are special cases of rules (they have the
|
|
same kind of value, though their I6 values are such as to make it possible
|
|
to distinguish them), within I7 rulebooks and rules have entirely different
|
|
data structures. There are two constructor functions: a basic one, used
|
|
for those created by typical source text, and an advanced one used when
|
|
rulebooks are automatically created as a result of other structures being
|
|
built (for instance, scene endings).
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="functiontext">Rulebooks::new</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">create_as</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="functiontext">Hierarchy::markup_wording</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="constant">RULEBOOK_NAME_HMD</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">new</span><span class="plain">-</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">new</span><span class="plain">-</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>, 1);</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain"> = </span><span class="identifier">W</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>alternative_name</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_package</span><span class="plain"> = </span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">RUN_FN_HL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_package</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain"> = </span><span class="functiontext">Rules::Bookings::list_new</span><span class="plain">();</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>used_by_future_action_activity</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>runs_during_activities</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">parameter_kind</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">producing_kind</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">Kinds::binary_construction_material</span><span class="plain">(</span><span class="identifier">create_as</span><span class="plain">, &</span><span class="identifier">parameter_kind</span><span class="plain">, &</span><span class="identifier">producing_kind</span><span class="plain">);</span>
|
|
|
|
<span class="functiontext">Rulebooks::Outcomes::initialise_focus</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_focus</span><span class="plain">), </span><span class="identifier">parameter_kind</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain"> = 0;</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">def</span><span class="plain"> = </span><span class="constant">NO_OUTCOME</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> == </span><span class="constant">INSTEAD_RB</span><span class="plain">) </span><span class="identifier">def</span><span class="plain"> = </span><span class="constant">FAILURE_OUTCOME</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> == </span><span class="constant">AFTER_RB</span><span class="plain">) </span><span class="identifier">def</span><span class="plain"> = </span><span class="constant">SUCCESS_OUTCOME</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> == </span><span class="constant">UNSUCCESSFUL_ATTEMPT_BY_RB</span><span class="plain">) </span><span class="identifier">def</span><span class="plain"> = </span><span class="constant">SUCCESS_OUTCOME</span><span class="plain">;</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::initialise_outcomes</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">), </span><span class="identifier">producing_kind</span><span class="plain">, </span><span class="identifier">def</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>placement_list</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain"> = </span><span class="functiontext">StackedVariables::new_owner</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>accessible_from_rb</span><span class="plain"> = </span><span class="functiontext">StackedVariables::add_owner_to_list</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">);</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>stv_creator_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> < </span><span class="constant">MAX_BUILT_IN_RULEBOOKS</span><span class="plain">)</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">] = </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">ACTION_PROCESSING_RB</span><span class="plain">])</span>
|
|
<span class="identifier">all_action_processing_vars</span><span class="plain"> = </span><span class="functiontext">StackedVariables::add_owner_to_list</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">Nouns::new_proper_noun</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">, </span><span class="identifier">NEUTER_GENDER</span><span class="plain">,</span>
|
|
<span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">PARSE_EXACTLY_NTOPT</span><span class="plain">,</span>
|
|
<span class="constant">RULEBOOK_MC</span><span class="plain">, </span><span class="functiontext">Rvalues::from_rulebook</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
<span class="identifier">word_assemblage</span><span class="plain"> </span><span class="identifier">wa</span><span class="plain"> =</span>
|
|
<span class="identifier">Preform::Nonparsing::merge</span><span class="plain">(<</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">construction</span><span class="plain">>, 0,</span>
|
|
<span class="identifier">WordAssemblages::from_wording</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">WordAssemblages::to_wording</span><span class="plain">(&</span><span class="identifier">wa</span><span class="plain">);</span>
|
|
<span class="identifier">Nouns::new_proper_noun</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">, </span><span class="identifier">NEUTER_GENDER</span><span class="plain">,</span>
|
|
<span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">PARSE_EXACTLY_NTOPT</span><span class="plain">,</span>
|
|
<span class="constant">RULEBOOK_MC</span><span class="plain">, </span><span class="functiontext">Rvalues::from_rulebook</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
<span class="identifier">wa</span><span class="plain"> = </span><span class="identifier">Preform::Nonparsing::merge</span><span class="plain">(<</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">construction</span><span class="plain">>, 1,</span>
|
|
<span class="identifier">WordAssemblages::from_wording</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
|
<span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">WordAssemblages::to_wording</span><span class="plain">(&</span><span class="identifier">wa</span><span class="plain">);</span>
|
|
<span class="identifier">Nouns::new_proper_noun</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">, </span><span class="identifier">NEUTER_GENDER</span><span class="plain">,</span>
|
|
<span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">PARSE_EXACTLY_NTOPT</span><span class="plain">,</span>
|
|
<span class="constant">RULEBOOK_MC</span><span class="plain">, </span><span class="functiontext">Rvalues::from_rulebook</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">outcomes</span><span class="plain"> *</span><span class="functiontext">Rulebooks::get_outcomes</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> &(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="functiontext">Rulebooks::contains_kind</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Kinds::binary_construction</span><span class="plain">(</span><span class="identifier">CON_rule</span><span class="plain">,</span>
|
|
<span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">),</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::get_outcome_kind</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">)));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="functiontext">Rulebooks::to_kind</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Kinds::binary_construction</span><span class="plain">(</span><span class="identifier">CON_rulebook</span><span class="plain">,</span>
|
|
<span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">),</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::get_outcome_kind</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">)));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="functiontext">Rulebooks::new_automatic</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">basis</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">oc</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">ata</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">ubfaa</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">rda</span><span class="plain">, </span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain"> = </span><span class="functiontext">Rulebooks::new</span><span class="plain">(</span>
|
|
<span class="identifier">Kinds::binary_construction</span><span class="plain">(</span><span class="identifier">CON_rulebook</span><span class="plain">, </span><span class="identifier">basis</span><span class="plain">, </span><span class="identifier">K_nil</span><span class="plain">), </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::set_default_outcome</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">), </span><span class="identifier">oc</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::set_focus_ata</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_focus</span><span class="plain">), </span><span class="identifier">ata</span><span class="plain">);</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>used_by_future_action_activity</span><span class="plain"> = </span><span class="identifier">ubfaa</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>runs_during_activities</span><span class="plain"> = </span><span class="identifier">rda</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::set_alt_name</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain">) {</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>alternative_name</span><span class="plain"> = </span><span class="identifier">AW</span><span class="plain">;</span>
|
|
<span class="identifier">Nouns::new_proper_noun</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">, </span><span class="identifier">NEUTER_GENDER</span><span class="plain">,</span>
|
|
<span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">PARSE_EXACTLY_NTOPT</span><span class="plain">,</span>
|
|
<span class="constant">RULEBOOK_MC</span><span class="plain">, </span><span class="functiontext">Rvalues::from_rulebook</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::fragment_by_actions</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain">) {</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::requires_specific_action</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">CHECK_RB</span><span class="plain">]) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">CARRY_OUT_RB</span><span class="plain">]) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">REPORT_RB</span><span class="plain">]) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain"> > 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::new is used in 9/tc (<a href="9-tc.html#SP5_4_2_4">§5.4.2.4</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::get_outcomes is used in 21/fao (<a href="21-fao.html#SP10">§10</a>), 22/prcd (<a href="22-prcd.html#SP10_1">§10.1</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::contains_kind is used in 21/rl (<a href="21-rl.html#SP15">§15</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::to_kind is used in 14/rv (<a href="14-rv.html#SP1">§1</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::new_automatic is used in 21/ac (<a href="21-ac.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::set_alt_name appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::fragment_by_actions appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::requires_specific_action is used in 21/rb (<a href="21-rb.html#SP9">§9</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Affected by placements. </b>Needed to make a useful index.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::affected_by_placement</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">where</span><span class="plain">) {</span>
|
|
<span class="reserved">placement_affecting</span><span class="plain"> *</span><span class="identifier">npl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">placement_affecting</span><span class="plain">);</span>
|
|
<span class="identifier">npl</span><span class="plain">-</span><span class="element">>placement_sentence</span><span class="plain"> = </span><span class="identifier">where</span><span class="plain">;</span>
|
|
<span class="identifier">npl</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>placement_list</span><span class="plain">;</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>placement_list</span><span class="plain"> = </span><span class="identifier">npl</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::rb_no_placements</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">placement_affecting</span><span class="plain"> *</span><span class="identifier">npl</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>placement_list</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">npl</span><span class="plain">) { </span><span class="identifier">t</span><span class="plain">++; </span><span class="identifier">npl</span><span class="plain"> = </span><span class="identifier">npl</span><span class="plain">-</span><span class="element">>next</span><span class="plain">; }</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::rb_index_placements</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">placement_affecting</span><span class="plain"> *</span><span class="identifier">npl</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>placement_list</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">npl</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"class=\</span><span class="plain">"</span><span class="string">smaller\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>NB:</i> %W"</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">npl</span><span class="plain">-</span><span class="element">>placement_sentence</span><span class="plain">));</span>
|
|
<span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">npl</span><span class="plain">-</span><span class="element">>placement_sentence</span><span class="plain">)));</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="identifier">npl</span><span class="plain"> = </span><span class="identifier">npl</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::affected_by_placement is used in 21/rps (<a href="21-rps.html#SP18">§18</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::rb_no_placements appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::rb_index_placements is used in <a href="#SP15">§15</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. Reading properties of rulebooks. </b>Those readable from outside the current section.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rulebooks::Outcomes::get_focus</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_focus</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rulebooks::Outcomes::get_focus_parameter_kind</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_focus</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::used_by_future_actions</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>used_by_future_action_activity</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::is_empty</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rules::Bookings::list_is_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">rc</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::no_rules</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> 0;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rules::Bookings::no_rules_in_list</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::rule_in_rulebook</span><span class="plain">(</span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rules::Bookings::list_contains</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">booking</span><span class="plain"> *</span><span class="functiontext">Rulebooks::first_booking</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::runs_during_activities</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>runs_during_activities</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::focus is used in <a href="#SP19">§19</a>, <a href="#SP20">§20</a>, 22/pu (<a href="22-pu.html#SP11_3_1_1">§11.3.1.1</a>, <a href="22-pu.html#SP21_1_1">§21.1.1</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::get_parameter_kind is used in <a href="#SP10">§10</a>, <a href="#SP24_1">§24.1</a>, 22/pu (<a href="22-pu.html#SP21_1_1">§21.1.1</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::used_by_future_actions is used in 21/ac (<a href="21-ac.html#SP14">§14</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::is_empty is used in <a href="#SP24">§24</a>, 21/ac (<a href="21-ac.html#SP9">§9</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::no_rules is used in <a href="#SP24">§24</a>, 21/ac (<a href="21-ac.html#SP9">§9</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::rule_in_rulebook is used in 21/rps (<a href="21-rps.html#SP18">§18</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::first_booking is used in 21/fao (<a href="21-fao.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::runs_during_activities is used in 22/pu (<a href="22-pu.html#SP11_3_1_1">§11.3.1.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. Rulebook variables. </b>Any new rulebook variable name is vetted by being run through this:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">variable</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">unfortunate</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><<span class="cwebmacro">Issue PM_RulebookVariableAnd problem</span> <span class="cwebmacronumber">13.1</span>>
|
|
<span class="plain">... ==> </span><span class="identifier">TRUE</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13_1"></a><b>§13.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_RulebookVariableAnd problem</span> <span class="cwebmacronumber">13.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVariableAnd</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, which I am reading as a request to make "</span>
|
|
<span class="string">"a new named variable for a rulebook - a value associated "</span>
|
|
<span class="string">"with a rulebook and which has a name. The request seems to "</span>
|
|
<span class="string">"say that the name in question is '%2', but I'd prefer to "</span>
|
|
<span class="string">"avoid 'and', 'or', 'with', or 'having' in such names, please."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP13">§13</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::add_variable</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">cnode</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">) != </span><span class="constant">PROPERTYCALLED_NT</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVarUncalled</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, which I am reading as a request to make "</span>
|
|
<span class="string">"a new named variable for an rulebook - a value associated "</span>
|
|
<span class="string">"with a action and which has a name. But since you only give "</span>
|
|
<span class="string">"a kind, not a name, I'm stuck. ('The every turn rulebook has a "</span>
|
|
<span class="string">"number called importance' is right, 'The every turn rulebook has a "</span>
|
|
<span class="string">"number' is too vague.)"</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">variable</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">))) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> == </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">spec</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">s</span><span class="plain">-</span><span class="identifier">type</span><span class="plain">-</span><span class="identifier">expression</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">))) </span><span class="identifier">spec</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Specifications::is_description</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">Descriptions::is_qualified</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">))) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVariableTooSpecific</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, which I am reading as a request to make "</span>
|
|
<span class="string">"a new named variable for a rulebook - a value associated "</span>
|
|
<span class="string">"with a rulebook and which has a name. The request seems to "</span>
|
|
<span class="string">"say that the value in question is '%2', but this is too "</span>
|
|
<span class="string">"specific a description. (Instead, a kind of value "</span>
|
|
<span class="string">"(such as 'number') or a kind of object (such as 'room' "</span>
|
|
<span class="string">"or 'thing') should be given. To get a property whose "</span>
|
|
<span class="string">"contents can be any kind of object, use 'object'.)"</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::is</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">, </span><span class="constant">CONSTANT_NT</span><span class="plain">)) {</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Offending SP: $T"</span><span class="plain">, </span><span class="identifier">spec</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVariableBadKind</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, but '%2' is not the name of a kind of "</span>
|
|
<span class="string">"value which I know (such as 'number' or 'text')."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="functiontext">Specifications::to_kind</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVariableKindless</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, but I was expecting to see a kind of value there, "</span>
|
|
<span class="string">"and '%2' isn't something I recognise as a kind."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">)) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_RulebookVariableVague</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"You wrote %1, but saying that a variable is a 'value' "</span>
|
|
<span class="string">"does not give me a clear enough idea what it will hold. "</span>
|
|
<span class="string">"You need to say what kind of value: for instance, 'A door "</span>
|
|
<span class="string">"has a number called street address.' is allowed because "</span>
|
|
<span class="string">"'number' is specific about the kind of value."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="functiontext">StackedVariables::add_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">cnode</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">), </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::make_stvs_accessible</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">stacked_variable_owner</span><span class="plain"> *</span><span class="identifier">stvo</span><span class="plain">) {</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>accessible_from_rb</span><span class="plain"> = </span><span class="functiontext">StackedVariables::add_owner_to_list</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>accessible_from_rb</span><span class="plain">, </span><span class="identifier">stvo</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Rulebooks::get_stv_creator_iname</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>stv_creator_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>stv_creator_iname</span><span class="plain"> =</span>
|
|
<span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">RULEBOOK_STV_CREATOR_FN_HL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_package</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>stv_creator_iname</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::rulebook_var_creators</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">StackedVariables::owner_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="functiontext">StackedVariables::compile_frame_creator</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">,</span>
|
|
<span class="functiontext">Rulebooks::get_stv_creator_iname</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">memory_economy_in_force</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RULEBOOK_VAR_CREATORS_HL</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">StackedVariables::owner_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">)) </span><span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Emit::array_iname_entry</span><span class="plain">(</span><span class="functiontext">StackedVariables::frame_creator</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
|
<span class="functiontext">Emit::array_end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">Make slow lookup routine</span> <span class="cwebmacronumber">14.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::add_variable is used in 9/ma (<a href="9-ma.html#SP3_3_25_2">§3.3.25.2</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::make_stvs_accessible is used in 21/ac (<a href="21-ac.html#SP6">§6</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::get_stv_creator_iname is used in <a href="#SP14_1">§14.1</a>.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::rulebook_var_creators is used in 1/mr (<a href="1-mr.html#SP4_15">§4.15</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14_1"></a><b>§14.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Make slow lookup routine</span> <span class="cwebmacronumber">14.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">SLOW_LOOKUP_HL</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rb_s</span><span class="plain"> = </span><span class="functiontext">LocalVariables::add_named_call_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"rb"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">SWITCH_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val_symbol</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">rb_s</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">StackedVariables::owner_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>owned_by_rb</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">CASE_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) (</span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">));</span>
|
|
<span class="identifier">Produce::code</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">RETURN_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val_iname</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_value</span><span class="plain">, </span><span class="functiontext">Rulebooks::get_stv_creator_iname</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::inv_primitive</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">RETURN_BIP</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::down</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">Produce::val</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Produce::up</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
|
|
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP14">§14</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP15"></a><b>§15. Indexing and logging rulebooks. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::log_name_only</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Rulebook %d (%W)"</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::log</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="functiontext">Rulebooks::log_name_only</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">);</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">": "</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::Bookings::list_log</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="functiontext">Rulebooks::no_rule_context</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="identifier">rc</span><span class="element">.action_context</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">rc</span><span class="element">.scene_context</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="identifier">rc</span><span class="element">.not_used</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::phrase_fits_rule_context</span><span class="plain">(</span><span class="reserved">phrase</span><span class="plain"> *</span><span class="identifier">ph</span><span class="plain">, </span><span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">) {</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rc</span><span class="element">.scene_context</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ph</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Phrases::Context::get_scene</span><span class="plain">(&(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>runtime_context_data</span><span class="plain">)) != </span><span class="identifier">rc</span><span class="element">.scene_context</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="functiontext">Rulebooks::action_context</span><span class="plain">(</span><span class="identifier">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="identifier">rc</span><span class="element">.action_context</span><span class="plain"> = </span><span class="identifier">an</span><span class="plain">;</span>
|
|
<span class="identifier">rc</span><span class="element">.scene_context</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="functiontext">Rulebooks::scene_context</span><span class="plain">(</span><span class="identifier">scene</span><span class="plain"> *</span><span class="identifier">s</span><span class="plain">) {</span>
|
|
<span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="identifier">rc</span><span class="element">.action_context</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">rc</span><span class="element">.scene_context</span><span class="plain"> = </span><span class="identifier">s</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">billing</span><span class="plain">, </span><span class="reserved">rule_context</span><span class="plain"> </span><span class="identifier">rc</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">resp_count</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">suppress_outcome</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">billing</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"No billing for rb index"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">billing</span><span class="plain">[0] != 0) {</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rc</span><span class="element">.action_context</span><span class="plain">) </span><span class="identifier">suppress_outcome</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rules::Bookings::list_is_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">rc</span><span class="plain">)) </span><span class="identifier">suppress_outcome</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">t</span><span class="plain"> = </span><span class="functiontext">Rules::Bookings::list_index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">rc</span><span class="plain">, </span><span class="identifier">billing</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">resp_count</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::index_outcomes</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, &(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">), </span><span class="identifier">suppress_outcome</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::rb_index_placements</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::index_action_rules</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">code</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">desc</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">resp_count</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">Rules::Bookings::list_suppress_indexed_links</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">code</span><span class="plain"> >= 0) </span><span class="identifier">t</span><span class="plain"> += </span><span class="functiontext">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">], </span><span class="identifier">desc</span><span class="plain">,</span>
|
|
<span class="functiontext">Rulebooks::action_context</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">), </span><span class="identifier">resp_count</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">) </span><span class="identifier">t</span><span class="plain"> += </span><span class="functiontext">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">desc</span><span class="plain">, </span><span class="functiontext">Rulebooks::no_rule_context</span><span class="plain">(), </span><span class="identifier">resp_count</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::Bookings::list_resume_indexed_links</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> > 0) </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::log_name_only is used in 22/pu (<a href="22-pu.html#SP17">§17</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::log is used in 1/cm (<a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::no_rule_context is used in <a href="#SP24">§24</a>, 21/ac (<a href="21-ac.html#SP9">§9</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::phrase_fits_rule_context is used in 21/rb (<a href="21-rb.html#SP17">§17</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::action_context appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::scene_context appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::index is used in <a href="#SP24">§24</a>, 21/ac (<a href="21-ac.html#SP9">§9</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::index_action_rules appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP16"></a><b>§16. Name parsing of rulebooks. </b>The following internal finds the "stem" of a rule, that is, the part
|
|
which identifies which rulebook it will go into. For example, in
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Before printing the name of the peach: ...</p>
|
|
|
|
</blockquote>
|
|
|
|
<blockquote>
|
|
<p>Instead of eating: ...</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">the stems are "before printing the name" and "instead". It makes use
|
|
of <rulebook-stem-inner> below, and then does some direct parsing.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> ? {</span>
|
|
<span class="reserved">rulebook_match</span><span class="plain"> </span><span class="identifier">rm</span><span class="plain"> = </span><span class="functiontext">Rulebooks::rb_match_from_description</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">parsed_rm</span><span class="plain"> = </span><span class="identifier">rm</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">) + </span><span class="identifier">rm</span><span class="element">.advance_words</span><span class="plain"> - 1;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b>Suppose this is our rule:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The first rule for printing the name of something: ...</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">the following grammar peels away the easier-to-read indications at the
|
|
front. It notes the use of "The", and the placement "first"; it throws
|
|
away other verbiage so that <rulebook-stem-name> matches
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>printing the name of something</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph"><rulebook-stem> then takes over again and searches for the longest possible
|
|
rulebook name at the start of the stem. So if there were a rulebook called
|
|
"printing", it wouldn't match here, because "printing the name" is longer.
|
|
(<rulebook-stem> doesn't match the "of".)
|
|
</p>
|
|
|
|
<p class="inwebparagraph">Productions (a) and (b) of <rulebook-stem-name> are slightly hacky exceptions
|
|
to allow for the "when S begins" rulebooks, where S can be any description
|
|
of a scene rather than just a scene's name. In effect, the stem here consists
|
|
of the two outer words and is discontiguous.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">indefinite</span><span class="plain">-</span><span class="identifier">article</span><span class="plain">> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> | ==> </span><span class="identifier">INDEF_ART</span><span class="plain">; <<</span><span class="identifier">place</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[2]</span>
|
|
<span class="plain"><</span><span class="identifier">definite</span><span class="plain">-</span><span class="identifier">article</span><span class="plain">> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> | ==> </span><span class="identifier">DEF_ART</span><span class="plain">; <<</span><span class="identifier">place</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[2]</span>
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> ==> </span><span class="identifier">NO_ART</span><span class="plain">; <<</span><span class="identifier">place</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> ::=</span>
|
|
<span class="reserved">rule</span><span class="plain"> </span><span class="reserved">for</span><span class="plain">/</span><span class="identifier">about</span><span class="plain">/</span><span class="identifier">on</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">MIDDLE_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="reserved">rule</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">MIDDLE_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="identifier">first</span><span class="plain"> </span><span class="reserved">rule</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">FIRST_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="identifier">first</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">FIRST_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="identifier">last</span><span class="plain"> </span><span class="reserved">rule</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">LAST_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="identifier">last</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">LAST_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ==> </span><span class="constant">MIDDLE_PLACEMENT</span><span class="plain">; <<</span><span class="identifier">len</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ::=</span>
|
|
<span class="plain">{</span><span class="identifier">when</span><span class="plain"> ... </span><span class="identifier">begins</span><span class="plain">} | ==> 2; <<</span><span class="reserved">rulebook</span><span class="plain">:</span><span class="identifier">m</span><span class="plain">>> = </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">WHEN_SCENE_BEGINS_RB</span><span class="plain">] </span> <span class="comment">scenes\_plugin</span>
|
|
<span class="plain">{</span><span class="identifier">when</span><span class="plain"> ... </span><span class="identifier">ends</span><span class="plain">} | ==> 2; <<</span><span class="reserved">rulebook</span><span class="plain">:</span><span class="identifier">m</span><span class="plain">>> = </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">WHEN_SCENE_ENDS_RB</span><span class="plain">] </span> <span class="comment">scenes\_plugin</span>
|
|
<span class="plain">... ==> 0; <<</span><span class="reserved">rulebook</span><span class="plain">:</span><span class="identifier">m</span><span class="plain">>> = </span><span class="identifier">NULL</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">rulebook_match</span><span class="plain"> </span><span class="functiontext">Rulebooks::rb_match_from_description</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">initial_w1</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">), </span><span class="identifier">modifier_words</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">art</span><span class="plain"> = </span><span class="identifier">NO_ART</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain"> = </span><span class="constant">MIDDLE_PLACEMENT</span><span class="plain">;</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="reserved">rulebook_match</span><span class="plain"> </span><span class="identifier">rm</span><span class="plain">;</span>
|
|
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">inner</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">stem</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>, 1);</span>
|
|
<span class="identifier">art</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>; </span><span class="identifier">pl</span><span class="plain"> = <<</span><span class="identifier">place</span><span class="plain">>>;</span>
|
|
|
|
<span class="identifier">modifier_words</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">) - </span><span class="identifier">initial_w1</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">rm</span><span class="element">.advance_words</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">rm</span><span class="element">.match_from</span><span class="plain"> = </span><span class="identifier">initial_w1</span><span class="plain">;</span>
|
|
<span class="identifier">rm</span><span class="element">.tail_words</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">rm</span><span class="element">.article_used</span><span class="plain"> = </span><span class="identifier">art</span><span class="plain">;</span>
|
|
<span class="identifier">rm</span><span class="element">.placement_requested</span><span class="plain"> = </span><span class="identifier">pl</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == <<</span><span class="reserved">rulebook</span><span class="plain">:</span><span class="identifier">m</span><span class="plain">>>) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> < <<</span><span class="identifier">len</span><span class="plain">>>) {</span>
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = <<</span><span class="identifier">len</span><span class="plain">>>;</span>
|
|
<span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::starts_with</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> < </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">)) {</span>
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">);</span>
|
|
<span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::starts_with</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>alternative_name</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> < </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>alternative_name</span><span class="plain">)) {</span>
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>alternative_name</span><span class="plain">);</span>
|
|
<span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> == 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">rm</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">rm</span><span class="element">.advance_words</span><span class="plain"> = </span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain"> == <<</span><span class="reserved">rulebook</span><span class="plain">:</span><span class="identifier">m</span><span class="plain">>>) {</span>
|
|
<span class="identifier">rm</span><span class="element">.tail_words</span><span class="plain"> = 1;</span>
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = 1;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w1a</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">) + </span><span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> - 1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">w1a</span><span class="plain"> != </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">))</span>
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> = </span><span class="identifier">rm</span><span class="element">.matched_rulebook</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">rm</span><span class="element">.match_length</span><span class="plain"> += </span><span class="identifier">modifier_words</span><span class="plain">;</span>
|
|
<span class="identifier">rm</span><span class="element">.advance_words</span><span class="plain"> += </span><span class="identifier">modifier_words</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rm</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::rb_match_from_description is used in <a href="#SP16">§16</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP19"></a><b>§19. Rule attachments. </b>The following routine contains a bit of a surprise: that the act of
|
|
placing a BR within a given rulebook can change it, by altering the way
|
|
it acts on its applicability test. This is a device needed to manage
|
|
the parallel rulebooks for action processing for the main player character
|
|
and for third parties. Though the code below does not make this apparent,
|
|
the changes propagate down through the BR to the phrase structure itself.
|
|
This is necessary because they manifest themselves in the compiled code
|
|
of the phrase, but it is also unfortunate, because it is possible that
|
|
the same phrase is used by more than one BR. If it should happen that
|
|
BRs are created to place the same phrase into two different rulebooks,
|
|
therefore, and which have different actor-testing settings, the outcome
|
|
would be confusing. (As unlikely as this seems, it did once happen to a
|
|
user in beta-testing.)
|
|
</p>
|
|
|
|
<p class="inwebparagraph">All work on the sequence of rules in rulebooks is delegated to the
|
|
sub-section on linked lists of booked rules in the section on Rules.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::attach_rule</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">booking</span><span class="plain"> *</span><span class="identifier">the_new_rule</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">placing</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">side</span><span class="plain">, </span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">ref_rule</span><span class="plain">) {</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULE_ATTACHMENTS</span><span class="plain">, </span><span class="string">"Attaching booked rule $b at sentence:\</span><span class="plain">n</span><span class="string"> $T"</span><span class="plain">,</span>
|
|
<span class="identifier">the_new_rule</span><span class="plain">, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULE_ATTACHMENTS</span><span class="plain">, </span><span class="string">"Rulebook before attachment: $K"</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">) == </span><span class="identifier">ref_rule</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">side</span><span class="plain"> != </span><span class="constant">INSTEAD_SIDE</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BeforeOrAfterSelf</span><span class="plain">),</span>
|
|
<span class="string">"a rule can't be before or after itself"</span><span class="plain">,</span>
|
|
<span class="string">"so this makes no sense to me."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">BEFORE_RB</span><span class="plain">]) ||</span>
|
|
<span class="plain">(</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">AFTER_RB</span><span class="plain">]) ||</span>
|
|
<span class="plain">(</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">INSTEAD_RB</span><span class="plain">])) {</span>
|
|
<span class="reserved">phrase</span><span class="plain"> *</span><span class="identifier">ph</span><span class="plain"> = </span><span class="functiontext">Rules::get_I7_definition</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ph</span><span class="plain">) {</span>
|
|
<span class="identifier">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain"> = </span><span class="functiontext">Phrases::Context::required_action</span><span class="plain">(&(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>runtime_context_data</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">an</span><span class="plain">) && (</span><span class="identifier">PL::Actions::is_out_of_world</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">)))</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_OOWinIWRulebook</span><span class="plain">),</span>
|
|
<span class="string">"this rulebook has no effect on actions which happen out of world"</span><span class="plain">,</span>
|
|
<span class="string">"so I'm not going to let you file this rule in it. ('Check', "</span>
|
|
<span class="string">"'Carry out' and 'Report' work fine for out of world actions: "</span>
|
|
<span class="string">"but 'Before', 'Instead' and 'After' have no effect on them.)"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain"> == </span><span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">SETTING_ACTION_VARIABLES_RB</span><span class="plain">]) {</span>
|
|
<span class="functiontext">Rules::set_never_test_actor</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="functiontext">Rulebooks::Outcomes::modify_rule_to_suit_focus</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_focus</span><span class="plain">),</span>
|
|
<span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">side</span><span class="plain"> == </span><span class="constant">INSTEAD_SIDE</span><span class="plain">) {</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULE_ATTACHMENTS</span><span class="plain">,</span>
|
|
<span class="string">"Copying actor test flags from rule being replaced\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::copy_actor_test_flags</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">), </span><span class="identifier">ref_rule</span><span class="plain">);</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULE_ATTACHMENTS</span><span class="plain">,</span>
|
|
<span class="string">"Copying former rulebook's variable permissions to displaced rule\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::acquire_stvol</span><span class="plain">(</span><span class="identifier">ref_rule</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>accessible_from_rb</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">) == </span><span class="constant">ACTION_FOCUS</span><span class="plain">)</span>
|
|
<span class="functiontext">Rules::acquire_action_variables</span><span class="plain">(</span><span class="identifier">ref_rule</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
|
|
<span class="functiontext">Rules::acquire_stvol</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">), </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>accessible_from_rb</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">) == </span><span class="constant">ACTION_FOCUS</span><span class="plain">)</span>
|
|
<span class="functiontext">Rules::acquire_action_variables</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>fragmentation_stem_length</span><span class="plain"> > 0)</span>
|
|
<span class="functiontext">Rules::suppress_action_testing</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
|
|
<span class="functiontext">Phrases::Context::ensure_avl</span><span class="plain">(</span><span class="functiontext">Rules::Bookings::get_rule</span><span class="plain">(</span><span class="identifier">the_new_rule</span><span class="plain">));</span>
|
|
|
|
<span class="functiontext">Rules::Bookings::list_add</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">the_new_rule</span><span class="plain">, </span><span class="identifier">placing</span><span class="plain">, </span><span class="identifier">side</span><span class="plain">, </span><span class="identifier">ref_rule</span><span class="plain">);</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULE_ATTACHMENTS</span><span class="plain">, </span><span class="string">"Rulebook after attachment: $K"</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::detach_rule</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">the_new_rule</span><span class="plain">) {</span>
|
|
<span class="functiontext">Rules::Bookings::list_remove</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">the_new_rule</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::attach_rule is used in 21/rb (<a href="21-rb.html#SP9">§9</a>), 21/rps (<a href="21-rps.html#SP18">§18</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::detach_rule is used in 21/rps (<a href="21-rps.html#SP18">§18</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP20"></a><b>§20. Compilation. </b>We do not actually compile the I6 routines for a rulebook here, but simply
|
|
act as a proxy. The I6 arrays making the rulebooks available to run-time
|
|
code are the real outcome of the code in this section.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::compile_rule_phrases</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">i</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">max_i</span><span class="plain">) {</span>
|
|
<span class="functiontext">Rules::Bookings::list_judge_ordering</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rules::Bookings::list_is_empty_of_i7_rules</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
|
|
<span class="functiontext">Rules::Bookings::list_compile_rule_phrases</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">max_i</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::rulebooks_array_array</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RULEBOOKS_ARRAY_HL</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">)</span>
|
|
<span class="functiontext">Emit::array_iname_entry</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_iname</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
|
<span class="functiontext">Emit::array_end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::compile_rulebooks</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Rules::Bookings::start_list_compilation</span><span class="plain">();</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">act</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">) == </span><span class="constant">ACTION_FOCUS</span><span class="plain">) </span><span class="identifier">act</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain">) </span><span class="identifier">act</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">par</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">) == </span><span class="constant">PARAMETER_FOCUS</span><span class="plain">) </span><span class="identifier">par</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULEBOOK_COMPILATION</span><span class="plain">, </span><span class="string">"Compiling rulebook: %W = %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_iname</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::Bookings::list_compile</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rb_iname</span><span class="plain">, </span><span class="identifier">act</span><span class="plain">, </span><span class="identifier">par</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Rules::check_placement_safety</span><span class="plain">();</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::RulebookNames_array</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">RULEBOOKNAMES_HL</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">memory_economy_in_force</span><span class="plain">) {</span>
|
|
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
|
<span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(0);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rbt</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">rbt</span><span class="plain">, </span><span class="string">"%~W rulebook"</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::array_text_entry</span><span class="plain">(</span><span class="identifier">rbt</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rbt</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Emit::array_end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::compile_rule_phrases is used in 22/cs (<a href="22-cs.html#SP10_2">§10.2</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::rulebooks_array_array is used in 22/cs (<a href="22-cs.html#SP12">§12</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::compile_rulebooks is used in 22/cs (<a href="22-cs.html#SP12">§12</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::RulebookNames_array is used in 22/cs (<a href="22-cs.html#SP12">§12</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21"></a><b>§21. Parsing rulebook properties. </b>Rulebooks do not have properties as such. The syntax which would create these
|
|
creates rulebook variables instead, which are much more useful. However, we
|
|
do allow the following syntax:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Visibility rules have outcomes there is sufficient light (failure) and there is insufficient light (success).</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">where Inform sees that the subject ("visibility rules") is a rulebook, and
|
|
parses the object noun phrase with the following:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="reserved">property</span><span class="plain">> ::=</span>
|
|
<span class="identifier">outcome</span><span class="plain">/</span><span class="reserved">outcomes</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="identifier">outcome</span><span class="plain">-</span><span class="identifier">list</span><span class="plain">> | ==> </span><span class="identifier">TRUE</span>
|
|
<span class="reserved">default</span><span class="plain"> <</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="reserved">default</span><span class="plain">-</span><span class="identifier">outcome</span><span class="plain">> | ==> </span><span class="identifier">FALSE</span>
|
|
<span class="plain">... ==> </span><<span class="cwebmacro">Issue PM_NonOutcomeProperty problem</span> <span class="cwebmacronumber">21.1</span>>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21_1"></a><b>§21.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_NonOutcomeProperty problem</span> <span class="cwebmacronumber">21.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_NonOutcomeProperty</span><span class="plain">),</span>
|
|
<span class="string">"the only properties of a rulebook are its outcomes"</span><span class="plain">,</span>
|
|
<span class="string">"for the time being at least."</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP21">§21</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">outcomes</span><span class="plain"> *</span><span class="identifier">outcomes_being_parsed</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::parse_properties</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
|
|
<span class="identifier">outcomes_being_parsed</span><span class="plain"> = &(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="reserved">rulebook</span><span class="plain">-</span><span class="reserved">property</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="functiontext">Rulebooks::kind_from_context</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">phrase</span><span class="plain"> *</span><span class="identifier">ph</span><span class="plain"> = </span><span class="identifier">phrase_being_compiled</span><span class="plain">;</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ph</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rules::Bookings::list_contains_ph</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>rule_list</span><span class="plain">, </span><span class="identifier">ph</span><span class="plain">))</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Rulebooks::Outcomes::get_outcome_kind</span><span class="plain">(&(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>my_outcomes</span><span class="plain">));</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::parse_properties is used in 9/ma (<a href="9-ma.html#SP3_3_18">§3.3.18</a>).</p>
|
|
|
|
<p class="endnote">The function Rulebooks::kind_from_context is used in 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="25-cii.html#SP7">§7</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23"></a><b>§23. Rules index. </b>The Rules page of the index is essentially a trawl through the more
|
|
popular rulebooks, showing their contents in logical order.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::index_page</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> == 1) {</span>
|
|
<<span class="cwebmacro">Index the segment for the main action rulebooks</span> <span class="cwebmacronumber">23.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the sequence of play rulebooks</span> <span class="cwebmacronumber">23.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the Understanding rulebooks</span> <span class="cwebmacronumber">23.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the description rulebooks</span> <span class="cwebmacronumber">23.9</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the accessibility rulebooks</span> <span class="cwebmacronumber">23.7</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the light and darkness rulebooks</span> <span class="cwebmacronumber">23.8</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the top-level rulebooks</span> <span class="cwebmacronumber">23.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the action processing rulebooks</span> <span class="cwebmacronumber">23.5</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the segment for the responses</span> <span class="cwebmacronumber">23.6</span>><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">) > 0)</span>
|
|
<<span class="cwebmacro">Index the segment for new rulebooks and activities</span> <span class="cwebmacronumber">23.10</span>><span class="plain">;</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ef</span><span class="plain"> != </span><span class="identifier">standard_rules_extension</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">) > 0)</span>
|
|
<<span class="cwebmacro">Index the segment for the rulebooks in this extension</span> <span class="cwebmacronumber">23.11</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::index_page appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_1"></a><b>§23.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the top-level rulebooks</span> <span class="cwebmacronumber">23.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>The top level</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"An Inform story file spends its whole time working through "</span>
|
|
<span class="string">"these three master rulebooks. They can be altered, just as all "</span>
|
|
<span class="string">"rulebooks can, but it's generally better to leave them alone."</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Startup rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">STARTUP_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">STARTING_VIRTUAL_MACHINE_ACT</span><span class="plain">, 2);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_BANNER_TEXT_ACT</span><span class="plain">, 2);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Turn sequence rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">TURN_SEQUENCE_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">CONSTRUCTING_STATUS_LINE_ACT</span><span class="plain">, 2);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Shutdown rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">SHUTDOWN_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">AMUSING_A_VICTORIOUS_PLAYER_ACT</span><span class="plain">, 2);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_PLAYERS_OBITUARY_ACT</span><span class="plain">, 2);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">DEALING_WITH_FINAL_QUESTION_ACT</span><span class="plain">, 2);</span>
|
|
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_2"></a><b>§23.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the sequence of play rulebooks</span> <span class="cwebmacronumber">23.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>Rules added to the sequence of play</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These rulebooks are the best places to put rules timed to happen "</span>
|
|
<span class="string">"at the start, at the end, or once each turn. (Each is run through at "</span>
|
|
<span class="string">"a carefully chosen moment in the relevant top-level rulebook.) It is "</span>
|
|
<span class="string">"also possible to have rules take effect at specific times of day "</span>
|
|
<span class="string">"or when certain events happen. Those are listed in the Scenes index, "</span>
|
|
<span class="string">"alongside rules taking place when scenes begin or end."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"When play begins"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_wpb"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">WHEN_PLAY_BEGINS_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Every turn"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_et"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">EVERY_TURN_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"When play ends"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_wpe"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">WHEN_PLAY_ENDS_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_3"></a><b>§23.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the Understanding rulebooks</span> <span class="cwebmacronumber">23.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>How commands are understood</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"'Understanding' here means turning a typed command, like GET FISH, "</span>
|
|
<span class="string">"into one or more actions, like taking the red herring. This is all handled "</span>
|
|
<span class="string">"by a single large rule (the parse command rule), but that rule makes use "</span>
|
|
<span class="string">"of the following activities and rulebooks in its work."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Does the player mean"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_dtpm"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">DOES_THE_PLAYER_MEAN_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">READING_A_COMMAND_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">DECIDING_SCOPE_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">DECIDING_CONCEALED_POSSESS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">DECIDING_WHETHER_ALL_INC_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">CLARIFYING_PARSERS_CHOICE_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">ASKING_WHICH_DO_YOU_MEAN_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_A_PARSER_ERROR_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">SUPPLYING_A_MISSING_NOUN_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">SUPPLYING_A_MISSING_SECOND_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">IMPLICITLY_TAKING_ACT</span><span class="plain">, 1);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_4"></a><b>§23.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the main action rulebooks</span> <span class="cwebmacronumber">23.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>Rules governing actions</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These rules are the ones which tell Inform how actions work, "</span>
|
|
<span class="string">"and which affect how they happen in particular cases."</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Persuasion"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_per"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">PERSUASION_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Unsuccessful attempt by"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_fail"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">UNSUCCESSFUL_ATTEMPT_BY_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Before"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_before"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">BEFORE_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Instead"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_instead"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">INSTEAD_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Check"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="string">"Check rules are tied to specific actions, and there are too many "</span>
|
|
<span class="string">"to index here. For instance, the check taking rules can only ever "</span>
|
|
<span class="string">"affect the taking action, so they are indexed on the detailed index "</span>
|
|
<span class="string">"page for taking."</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Carry out"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="string">"Carry out rules are tied to specific actions, and there are too many "</span>
|
|
<span class="string">"to index here."</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"After"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_after"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">AFTER_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Report"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="string">"Report rules are tied to specific actions, and there are too many "</span>
|
|
<span class="string">"to index here."</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_5"></a><b>§23.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the action processing rulebooks</span> <span class="cwebmacronumber">23.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>How actions are processed</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These form the technical machinery for dealing with actions, and are "</span>
|
|
<span class="string">"called on at least once every turn. They seldom need to be changed."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Action-processing rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">ACTION_PROCESSING_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Specific action-processing rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">SPECIFIC_ACTION_PROCESSING_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 2, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Player's action awareness rules"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">PLAYERS_ACTION_AWARENESS_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 3, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_6"></a><b>§23.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the responses</span> <span class="cwebmacronumber">23.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>How responses are printed</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"The Standard Rules, and some extensions, reply to the player's "</span>
|
|
<span class="string">"commands with messages which are able to be modified."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_RESPONSE_ACT</span><span class="plain">, 1);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_7"></a><b>§23.7. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the accessibility rulebooks</span> <span class="cwebmacronumber">23.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>How accessibility is judged</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These rulebooks are used when deciding who can reach what, and "</span>
|
|
<span class="string">"who can see what."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Reaching inside"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_ri"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">REACHING_INSIDE_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Reaching outside"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rules_ri"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">REACHING_OUTSIDE_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Visibility"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"visibility"</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">VISIBILITY_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_8"></a><b>§23.8. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the light and darkness rulebooks</span> <span class="cwebmacronumber">23.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>Light and darkness</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These activities control how we describe darkness."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_NAME_OF_DARK_ROOM_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_DESC_OF_DARK_ROOM_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_NEWS_OF_DARKNESS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_NEWS_OF_LIGHT_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">REFUSAL_TO_ACT_IN_DARK_ACT</span><span class="plain">, 1);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_9"></a><b>§23.9. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the description rulebooks</span> <span class="cwebmacronumber">23.9</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>How things are described</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"These activities control what is printed when naming rooms or "</span>
|
|
<span class="string">"things, and their descriptions."</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_THE_NAME_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_THE_PLURAL_NAME_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_A_NUMBER_OF_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_ROOM_DESC_DETAILS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_INVENTORY_DETAILS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">LISTING_CONTENTS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">GROUPING_TOGETHER_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">WRITING_A_PARAGRAPH_ABOUT_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">LISTING_NONDESCRIPT_ITEMS_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_LOCALE_DESCRIPTION_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">CHOOSING_NOTABLE_LOCALE_OBJ_ACT</span><span class="plain">, 1);</span>
|
|
<span class="functiontext">Activities::index_by_number</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">PRINTING_LOCALE_PARAGRAPH_ACT</span><span class="plain">, 1);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_10"></a><b>§23.10. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for new rulebooks and activities</span> <span class="cwebmacronumber">23.10</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>From the source text</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">that is, not in an extension at all</span>
|
|
<<span class="cwebmacro">Index rulebooks occurring in this part of the source text</span> <span class="cwebmacronumber">23.10.1</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_11"></a><b>§23.11. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the segment for the rulebooks in this extension</span> <span class="cwebmacronumber">23.11</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>From the extension "</span><span class="plain">);</span>
|
|
<span class="functiontext">Extensions::IDs::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">Extensions::Files::get_eid</span><span class="plain">(</span><span class="identifier">ef</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Index rulebooks occurring in this part of the source text</span> <span class="cwebmacronumber">23.10.1</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23_10_1"></a><b>§23.10.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index rulebooks occurring in this part of the source text</span> <span class="cwebmacronumber">23.10.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">activity</span><span class="plain"> *</span><span class="identifier">av</span><span class="plain">;</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
|
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">))</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">,</span><span class="reserved"> activity</span><span class="plain">) {</span>
|
|
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">-</span><span class="element">>name</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
|
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">))</span>
|
|
<span class="functiontext">Activities::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">av</span><span class="plain">, 1);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP23_10">§23.10</a>, <a href="#SP23_11">§23.11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Rulebooks::noteworthy_rulebooks</span><span class="plain">(</span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">ef</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nb</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">activity</span><span class="plain"> *</span><span class="identifier">av</span><span class="plain">;</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="reserved">rulebook</span><span class="plain">) {</span>
|
|
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>automatically_generated</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
|
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">,</span><span class="reserved"> activity</span><span class="plain">) {</span>
|
|
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">-</span><span class="element">>name</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">ef</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) ||</span>
|
|
<span class="plain">(</span><span class="functiontext">SourceFiles::get_extension_corresponding</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">) == </span><span class="identifier">ef</span><span class="plain">)) </span><span class="identifier">nb</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::index_scene</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>The scene-changing machinery</b>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Scene changing"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="constant">SCENE_CHANGING_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unique_xtra_no</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">doc_link</span><span class="plain">,</span>
|
|
<span class="reserved">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">,</span><span class="reserved"> activity</span><span class="plain"> *</span><span class="identifier">av</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">indent</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hide_behind_plus</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">xtra_no</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">) </span><span class="identifier">xtra_no</span><span class="plain"> = </span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="identifier">xtra_no</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain">) + </span><span class="identifier">av</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">xtra_no</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">rulebook</span><span class="plain">) + </span><span class="identifier">NUMBER_CREATED</span><span class="reserved">(activity</span><span class="plain">) + </span><span class="identifier">unique_xtra_no</span><span class="plain">++;</span>
|
|
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">col</span><span class="plain"> = </span><span class="string">"e0e0e0"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="identifier">col</span><span class="plain"> = </span><span class="string">"e8e0c0"</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">) </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Rulebooks::no_rules</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Activities::no_rules</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">name</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">, </span><span class="string">"%s"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">, </span><span class="string">"nameless"</span><span class="plain">);</span>
|
|
<span class="identifier">string_position</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">Str::start</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">start</span><span class="plain">, </span><span class="identifier">Characters::tolower</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">start</span><span class="plain">)));</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hide_behind_plus</span><span class="plain">) {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">indent</span><span class="plain">+1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::extra_link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">xtra_no</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> == 0) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Write the titling line of an index rules box</span> <span class="cwebmacronumber">24.1</span>><span class="plain">;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (%d rule%s)"</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, (</span><span class="identifier">n</span><span class="plain">==1)?</span><span class="string">""</span><span class="plain">:</span><span class="string">"s"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> == 0) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">Index::extra_div_open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">xtra_no</span><span class="plain">, </span><span class="identifier">indent</span><span class="plain">+1, </span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">indent</span><span class="plain">, </span><span class="string">""</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::open_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">, </span><span class="identifier">ROUND_BOX_TOP</span><span class="plain">+</span><span class="identifier">ROUND_BOX_BOTTOM</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">HTML::begin_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, 0, 4, 0, 0, 0);</span>
|
|
<span class="identifier">HTML::first_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
|
|
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>%S</b>"</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Write the titling line of an index rules box</span> <span class="cwebmacronumber">24.1</span>><span class="plain">;</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">HTML::next_html_column_right_justified</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">, </span><span class="string">"Before %S:"</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>b</i> "</span><span class="plain">);</span>
|
|
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">, </span><span class="string">"Rule for %S:"</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>f</i> "</span><span class="plain">);</span>
|
|
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">, </span><span class="string">"After %S:"</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>a</i>"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">skeleton</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">HTML::Javascript::paste_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>name</i>"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">textual_name</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">rb</span><span class="plain">) && (</span><span class="functiontext">Rulebooks::is_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="functiontext">Rulebooks::no_rule_context</span><span class="plain">())))</span>
|
|
<span class="identifier">text</span><span class="plain"> = </span><span class="string">"There are no rules in this rulebook."</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 2, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%s"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ignore_me</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="string">""</span><span class="plain">, </span><span class="functiontext">Rulebooks::no_rule_context</span><span class="plain">(), &</span><span class="identifier">ignore_me</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="functiontext">Activities::index_details</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">av</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hide_behind_plus</span><span class="plain">) {</span>
|
|
<span class="identifier">Index::extra_div_close</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">HTML::close_coloured_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">, </span><span class="identifier">ROUND_BOX_TOP</span><span class="plain">+</span><span class="identifier">ROUND_BOX_BOTTOM</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Rulebooks::noteworthy_rulebooks is used in <a href="#SP23">§23</a>.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::index_scene appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Rulebooks::index_rules_box is used in <a href="#SP23_1">§23.1</a>, <a href="#SP23_2">§23.2</a>, <a href="#SP23_3">§23.3</a>, <a href="#SP23_4">§23.4</a>, <a href="#SP23_5">§23.5</a>, <a href="#SP23_7">§23.7</a>, <a href="#SP23_10_1">§23.10.1</a>, 21/ac (<a href="21-ac.html#SP9">§9</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24_1"></a><b>§24.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write the titling line of an index rules box</span> <span class="cwebmacronumber">24.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">doc_link</span><span class="plain">) > 0) </span><span class="identifier">Index::DocReferences::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">doc_link</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ... "</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" activity"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">rb</span><span class="plain">) && (</span><span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">), </span><span class="identifier">K_action_name</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
|
<span class="identifier">Kinds::Textual::write_articled</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">Rulebooks::get_parameter_kind</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" based"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" rulebook"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain"> = -1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rb</span><span class="plain">) </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>primary_name</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">av</span><span class="plain">) </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">av</span><span class="plain">-</span><span class="element">>name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wn</span><span class="plain"> >= 0) </span><span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP24">§24</a> (twice).</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="21-rb.html">Back to 'Rule Bookings'</a></li><li><a href="21-fao.html">Continue with 'Focus and Outcome'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|