<pclass="commentary firstcommentary"><aid="SP1"class="paragraph-anchor"></a><b>§1. Reporting. </b>All RTPs are produced by calling the following routine, which takes one
<pclass="commentary">The arguments <spanclass="extract"><spanclass="extract-syntax">par1</span></span>, <spanclass="extract"><spanclass="extract-syntax">par2</span></span> and <spanclass="extract"><spanclass="extract-syntax">par3</span></span> are optional parameters clarifying the
message; <spanclass="extract"><spanclass="extract-syntax">ln</span></span> is an optional parameter specifying a paragraph number in the
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"*** Run-time problem P"</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">n</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to access an inappropriate relation for "</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">the</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Too many rulebooks in simultaneous use.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to access non-existent property for "</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">the</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">".^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Since "</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">the</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">" is not allowed the property ~"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">PrintPropertyName</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par2</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~, it is against the rules to try to use it.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Although "</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">the</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">" is allowed to have the property ~"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">PrintPropertyName</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par2</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~, no value was ever given, so it can't now be used.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Too many activities are going on at once.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to abandon an activity which wasn't going on.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to end an activity which wasn't going on.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"You can't divide by zero.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to access property for a value which didn't fit: "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">"if this were a number it would be "</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">".^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to look up a non-existent column in the table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to look up a non-existent correspondence in the table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to look up a non-existent row in the table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to look up a non-existent entry at column "</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">par2</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">", row "</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">par3</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">" of the table '"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">PrintTableName</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"'.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to blank out a row from a non-existent table (value "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to access an entry from a non-existent table.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to choose a blank row in a table with none left: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to choose a random row in an entirely blank table: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to repeat through a table in a tricky column order: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to sort a table whose ordering must remain fixed: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to save a table to a file whose data is unstable: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"File being read has too many rows or columns to fit into table: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"File being read is not a previously saved table: table '"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to find route or count steps through an implicit</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to use a property of the 'nothing' non-object: property "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to 'decide on V' where V is the wrong kind of object.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to 'decide on nothing'.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"The list-writer has run out of memory.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"The memory stack is exhausted.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Phrase applied to an incompatible kind of value.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to use list item which does not exist.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to resize list to "</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">" entries - there must "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">"always be 0 or more.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Syntax error in regular expression.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"This interpreter does not support Unicode.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"You can't take the square root of a negative number.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"You can't implicitly repeat through the values of this kind: "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">"a problem arising from a description which started out here - ~"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to set a variable to the wrong kind of object: "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">"you wrote '"</span><spanclass="plain-syntax">, (</span><spanclass="reserved-syntax">string</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par2</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"', which sets the value to "</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">the</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par1</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="string-syntax">" - but that doesn't have the kind '"</span><spanclass="plain-syntax">, (</span><spanclass="reserved-syntax">string</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">par3</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"'.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to change a relation for objects with the wrong kinds: "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"> (</span><spanclass="reserved-syntax">string</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">RlnGetF</span><spanclass="plain-syntax">(</span><spanclass="identifier-syntax">par3</span><spanclass="plain-syntax">, </span><spanclass="identifier-syntax">RR_DESCRIPTION</span><spanclass="plain-syntax">), </span><spanclass="string-syntax">", but you tried to "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"This use of '[text]' is too complicated.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"This change of the relation's nature is impossible in play.^"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"This operation can't be done with the relation '"</span><spanclass="plain-syntax">,</span>
<pclass="commentary firstcommentary"><aid="SP2"class="paragraph-anchor"></a><b>§2. Low-Level Errors. </b>The following is a residue from the old I6 library, and most of its possible
<spanclass="plain-syntax"></span><spanclass="constant-syntax">1</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"preposition not found (this should not occur)"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">2</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Property value not routine or string: ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">property</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p2</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~ of ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">name</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p1</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">3</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Entry in property list not routine or string: ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">property</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p2</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~ list of ~"</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">4</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Too many timers/daemons are active simultaneously.</span>
<spanclass="string-syntax"> The limit is the library constant MAX_TIMERS (currently "</span><spanclass="plain-syntax">,</span>
<spanclass="plain-syntax"></span><spanclass="identifier-syntax">MAX_TIMERS</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">") and should be increased"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">5</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Object ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">name</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~ has no ~time_left~ property"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">7</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"The object ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">name</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~ can only be used as a player object if it has</span>
<spanclass="string-syntax"> the ~number~ property"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">8</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Attempt to take random entry from an empty table array"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">9</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">p1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">" is not a valid direction property number"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">10</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"The player-object is outside the object tree"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">11</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"The room ~"</span><spanclass="plain-syntax">, (</span><spanclass="identifier-syntax">name</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">p1</span><spanclass="plain-syntax">, </span><spanclass="string-syntax">"~ has no ~description~ property"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">12</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"Tried to set a non-existent pronoun using SetPronoun"</span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="constant-syntax">13</span><spanclass="plain-syntax">: </span><spanclass="reserved-syntax">print</span><spanclass="plain-syntax"></span><spanclass="string-syntax">"A 'topic' token can only be followed by a preposition"</span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3"class="paragraph-anchor"></a><b>§3. Argument Type Checking Failed. </b>This is called when run-time type checking for the argument of a phrase
<pclass="commentary firstcommentary"><aid="SP4"class="paragraph-anchor"></a><b>§4. Return Type Checking Failed. </b>Similarly, though in a more restricted set of circumstances. Inform can usually
the following routine. The value <spanclass="extract"><spanclass="extract-syntax">V</span></span> is a valid "object", but that means
it can be <spanclass="extract"><spanclass="extract-syntax">nothing</span></span>, and we must check that it matches a given I7 kind <spanclass="extract"><spanclass="extract-syntax">K</span></span>
(where <spanclass="extract"><spanclass="extract-syntax">nothing</span></span> is not valid).
<pclass="commentary firstcommentary"><aid="SP5"class="paragraph-anchor"></a><b>§5. Whether Provides. </b>This routine defines the phrase "if O provides P": there are three tests
to pass, and if any of the three fail, we return <spanclass="extract"><spanclass="extract-syntax">false</span></span>. (The <spanclass="extract"><spanclass="extract-syntax">issue_rtp</span></span>
<pclass="commentary firstcommentary"><aid="SP6"class="paragraph-anchor"></a><b>§6. Scan Property Metadata. </b>The supplied metadata table is a series of zero-terminated lists of objects
(or class objects, representing I7 kinds). Each such list corresponds to a single
<pclass="commentary firstcommentary"><aid="SP7"class="paragraph-anchor"></a><b>§7. Read Property. </b>Some value properties belong to other values (those created in tables), and
<pclass="commentary firstcommentary"><aid="SP8"class="paragraph-anchor"></a><b>§8. Write Property. </b>This routine's name must consist of the read-value-property routine's name
<pclass="commentary firstcommentary"><aid="SP9"class="paragraph-anchor"></a><b>§9. Printing Property Names. </b>Inform doesn't print property names prettily; it more or less prints them