Add special RST roles for the Inform entities.
[ibg.git] / appendices / f.rst
1 ==============================
2  Appendix F -- Inform library
3 ==============================
4
5 .. |ADD| replace:: **+**
6
7 .. The ⊕ symbol doesn't work in LaTeX.
8
9 .. default-role:: samp
10
11 .. only:: html
12
13    .. image:: /images/picL.png
14       :align: left
15
16 |L|\ibrary files define Inform's model world, turning a conventional
17 programming language into a text adventure development system.  Here are
18 the library constants, variables and routines, the standard object
19 properties and attributes, the verb grammars and actions.
20
21 Library objects
22 ===============
23
24 :obj:`compass`
25   A :attr:`container` object holding the twelve direction objects
26   :obj:`d_obj`, :obj:`e_obj`, :obj:`in_obj`, :obj:`n_obj`, :obj:`ne_obj`,
27   :obj:`nw_obj`, :obj:`out_obj`, :obj:`s_obj`, :obj:`se_obj`,
28   :obj:`sw_obj`, :obj:`u_obj`, :obj:`w_obj`.
29
30 :obj:`LibraryMessages`
31   If defined (between Includes of `Parser` and `VerbLib`), changes standard
32   library messages:
33
34   | `Object LibraryMessages`
35   |   `with before [;`
36   |        `{action}: "{string}";`
37   |        `{action}: "{string}";`
38   |        `{action}: switch (lm_n) {`
39   |                `{value}: "{string}";`
40   |                `{value}: "{string}",`
41   |                    `(a) lm_o,".";`
42   |                `...`
43   |                `}`
44   |            `...`
45   |        `];`
46
47 :obj:`selfobj`
48   The default player object.  Avoid: use instead the :var:`player`
49   variable, which usually refers to :obj:`selfobj`.
50
51 :obj:`thedark`
52   A pseudo-room which becomes the :var:`location` when there is no light
53   (although the player object is not moved there).
54
55 Library constants
56 =================
57
58 In addition to the standard constants :const:`true` (1), :const:`false` (0)
59 and :const:`nothing` (0), the Library defines :const:`NULL` (-1) for an
60 `{action}`, `{property}` or `{pronoun}` whose current value is undefined.
61
62 `LIBRARY_PARSER`, `LIBRARY_ENGLISH`, `LIBRARY_VERBLIB` and
63 `LIBRARY_GRAMMAR` are defined to mark the end of inclusion of `Parser.h`,
64 `English.h`, `VerbLib.h` and `Grammar.h` respectively.
65
66 User-defined constants
67 ======================
68
69 Some constants control features rather than represent values.
70
71 `AMUSING_PROVIDED`
72   Activates the `Amusing` entry point.
73
74 `COMMENT_CHARACTER = '{char}'`
75   Introduces a comment line ignored by the parser (default "*").
76
77 `DEATH_MENTION_UNDO`
78   Offers "UNDO the last move" at game end.
79
80 `DEBUG`
81   Activates the debug commands.
82
83 `Headline = "{string}"`
84   **Mandatory**: game style, copyright info, etc.
85
86 `MANUAL_PRONOUNS`
87   Pronouns reflect only objects mentioned by the player.
88
89 `MAX_CARRIED = {expr}`
90   Limit on direct possessions that the player can carry (default 100).
91
92 `MAX_SCORE = {expr}`
93   Maximum game score (default 0).
94
95 `MAX_TIMERS = {expr}`
96   Limit on active timers/daemons (default 32).
97
98 `NO_PLACES`
99   "`OBJECTS`" and "`PLACES`" verbs are barred.
100
101 `NO_SCORE`
102   Game doesn't use scoring.
103
104 `NUMBER_TASKS = {expr}`
105   Number of `scored` tasks (default 1).
106
107 `OBJECT_SCORE = {expr}`
108   For taking a `scored` object for the first time (default 4).
109
110 `ROOM_SCORE = {expr}`
111   For visiting a `scored` room for the first time (default 5).
112
113 `SACK_OBJECT = {obj_id}`
114   A `container` object where the game places held objects.
115
116 `START_MOVE = {expr}`
117   Initial value of turns counter (default 0).
118
119 `Story = "{string}"`
120   **Mandatory**: the name of the story.
121
122 `TASKS_PROVIDED`
123   Activates the task scoring system.
124
125 `USE_MODULES`
126   Activates linking with pre-compiled library modules.
127
128 `WITHOUT_DIRECTIONS`
129   De-activates standard compass directions (bar "`IN`" and "`OUT`").  Place
130   alternative directions in the :obj:`compass`.
131
132 Library variables
133 =================
134
135 .. index::
136    pair: action; library variable
137
138 :var:`action`
139   The current `{action}`.
140
141 .. index::
142    pair: actor; library variable
143
144 :var:`actor`
145   The target of an instruction: the player, or an NPC.
146
147 .. index::
148    pair: deadflag; library variable
149
150 :var:`deadflag`
151   Normally 0: 1 indicates a regular death, 2 indicates that the player has
152   won, 3 or more denotes a user-defined end.
153
154 .. index::
155    pair: inventory_stage; library variable
156
157 :var:`inventory_stage`
158   Used by :prop:`invent` and :prop:`list_together` properties.
159
160 .. index::
161    pair: keep_silent; library variable
162
163 :var:`keep_silent`
164   Normally :const:`false`; :const:`true` makes most :ref:`group 2 actions
165   <group-2-actions>` silent.
166
167 .. index::
168    pair: location; library variable
169
170 :var:`location`
171   The player's current room; unless that's dark, when it contains
172   :obj:`thedark`, :var:`real_location` contains the room.
173
174 .. index::
175    pair: notify_mode; library variable
176
177 :var:`notify_mode`
178   Normally :const:`true`: :const:`false` remains silent when score changes.
179
180 .. index::
181    pair: noun; library variable
182
183 :var:`noun`
184   The primary focus object for the current action.
185
186 .. index::
187    pair: player; library variable
188
189 :var:`player`
190   The object acting on behalf of the human player.
191
192 .. index::
193    pair: real_location; library variable
194
195 :var:`real_location`
196   The player's current room when in the dark.
197
198 .. index::
199    pair: score; library variable
200
201 :var:`score`
202   The current score.
203
204 .. index::
205    pair: second; library variable
206
207 :var:`second`
208   The secondary focus object for the current action.
209
210 .. index::
211    pair: self; library variable
212
213 :var:`self`
214   The object which received a message.  (Note: a run-time variable, not a
215   compile-time constant.)
216
217 .. index::
218    pair: sender; library variable
219
220 :var:`sender`
221   The object which sent a message (or `nothing`).
222
223 .. index::
224    pair: task_scores; library variable
225
226 :var:`task_scores`
227   A byte array holding scores for the task scoring system.
228
229 .. index::
230    pair: the_time; library variable
231
232 :var:`the_time`
233   The game's clock, in minutes 0..1439 since midnight.
234
235 .. index::
236    pair: turns; library variable
237
238 :var:`turns`
239   The game's turn counter.
240
241 .. index::
242    pair: wn; library variable
243
244 :var:`wn`
245   The input stream word number, counting from 1.
246
247 .. _library-routines:
248
249 Library routines
250 ================
251
252 .. index::
253    pair: Achieved; library routine
254
255 `Achieved({expr})`
256   A scored task has been achieved.
257
258 .. index::
259    pair: AfterRoutines; library routine
260
261 `AfterRoutines()`
262   In a :ref:`group 2 action <group-2-actions>`, controls output of "after"
263   messages.
264
265 .. index::
266    pair: AllowPushDir; library routine
267
268 `AllowPushDir()`
269   An object can be pushed from one location to another.
270
271 .. index::
272    pair: Banner; library routine
273
274 `Banner()`
275   Prints the game banner.
276
277 .. index::
278    pair: ChangePlayer; library routine
279
280 `ChangePlayer({obj_id,flag})`
281   Player assumes the persona of the `{obj_id}`.  If the optional `{flag}`
282   is :const:`true`, room descriptions include "(as `{object}`)".
283
284 .. index::
285    pair: CommonAncestor; library routine
286
287 `CommonAncestor({obj_id1,obj_id2})`
288   Returns the nearest object which has a parental relationship to both
289   `{obj_ids}`, or `nothing`.
290
291 .. index::
292    pair: DictionaryLookup; library routine
293
294 `DictionaryLookup({byte_array,length})`
295   Returns address of word in dictionary, or 0 if not found.
296
297 .. index::
298    pair: DrawStatusLine; library routine
299
300 `DrawStatusLine()`
301   Refreshes the status line; happens anyway at end of each turn.
302
303 .. index::
304    pair: GetGNAOfObject; library routine
305
306 `GetGNAOfObject({obj_id})`
307   Returns gender-number-animation 0..11 of the `{obj_id}`.
308
309 .. index::
310    pair: HasLightSource; library routine
311
312 `HasLightSource({obj_id})`
313   Returns :const:`true` if the `{obj_id}` has light.
314
315 .. index::
316    pair: IndirectlyContains; library routine
317
318 `IndirectlyContains({parnt_obj_id,obj_id})`
319   Returns :const:`true` if `{obj_id}` is currently a child or grand-child
320   or great-grand-child... of the `{parent_object}`.
321
322 .. index::
323    pair: IsSeeThrough; library routine
324
325 `IsSeeThrough({obj_id})`
326   Returns :const:`true` if light can pass through the `{obj_id}`.
327
328 .. index::
329    pair: Locale; library routine
330
331 `Locale({obj_id,"string1","string2"})`
332   Describes the contents of `{obj_id}`, and returns their number.  After
333   objects with own paragraphs, the rest are listed preceded by `{string1}`
334   or `{string2}`.
335
336 .. index::
337    pair: LoopOverScope; library routine
338
339 `LoopOverScope({routine_id,actor})`
340   Calls `{routine_id}({obj_id})` for each `{obj_id}` in scope.  If the
341   optional `{actor}` is supplied, that defines the scope.
342
343 .. index::
344    pair: MoveFloatingObjects; library routine
345
346 `MoveFloatingObjects()`
347   Adjusts positions of game's `found_in` objects.
348
349 .. index::
350    pair: NextWord; library routine
351
352 `NextWord()`
353   Returns the next dictionary word in the input stream, incrementing
354   :var:`wn` by one.  Returns :const:`false` if the word is not in the
355   dictionary, or if the input stream is exhausted.
356
357 .. index::
358    pair: NextWordStopped; library routine
359
360 `NextWordStopped()`
361   Returns the next dictionary word in the input stream, incrementing
362   :var:`wn` by one.  Returns :const:`false` if the word is not in the
363   dictionary, -1 if the input stream is exhausted.
364
365 .. index::
366    pair: NounDomain; library routine
367
368 `NounDomain({obj_id1,obj_id2,type})`
369   Performs object parsing; see also `ParseToken()`.
370
371 .. index::
372    pair: ObjectIsUntouchable; library routine
373
374 `ObjectIsUntouchable({obj_id,flag})`
375   Tests whether there is a barrier - a container object which is not open -
376   between player and `{obj_id}`.  Unless the optional `{flag}` is
377   :const:`true`, outputs "You can't because ... is in the way".  Returns
378   :const:`true` is a barrier is found, otherwise :const:`false`.
379
380 .. index::
381    pair: OffersLight; library routine
382
383 `OffersLight({obj_id})`
384   Returns :const:`true` if the `{obj_id}` offers light.
385
386 .. index::
387    pair: ParseToken; library routine
388
389 `ParseToken({type,value})`
390   Performs general parsing; see also `NounDomain()`.
391
392 .. index::
393    pair: PlaceInScope; library routine
394
395 `PlaceInScope({obj_id})`
396   Used in an :prop:`add_to_scope` property or `scope=` token to put the
397   `{obj_id}` into scope for the parser.
398
399 .. index::
400    pair: PlayerTo; library routine
401
402 `PlayerTo({obj_id,flag})`
403   Moves the player to `{obj_id}`.  Prints its description unless optional
404   `{flag}` is 1 (no description) or 2 (as if walked in).
405
406 .. index::
407    pair: PrintOrRun; library routine
408
409 `PrintOrRun({obj_id,property,flag})`
410   If `{obj_id.property}` is a string, output it (followed by a newline
411   unless optional `{flag}` is :const:`true`), and return :const:`true`.  If
412   it's a routine, run it and return what the routine returns.
413
414 .. index::
415    pair: PronounNotice; library routine
416
417 `PronounNotice({obj_id})`
418   Associates an appropriate pronoun with the `{obj_id}`.
419
420 .. index::
421    pair: PronounValue; library routine
422
423 `PronounValue('{pronoun}')`
424   Returns the object to which '`it`' (or '`him`', '`her`', '`them`')
425   currently refers, or :const:`nothing`.
426
427 .. index::
428    pair: ScopeWithin; library routine
429
430 `ScopeWithin({obj_id})`
431   Used in an :prop:`add_to_scope` property or `scope=` token to put the
432   contents of the `{obj_id}` in scope for the parser.
433
434 .. index::
435    pair: SetPronoun; library routine
436
437 `SetPronoun('{pronoun}',{obj_id})`
438   Defines the `{obj_id}` to which a given pronoun refers.
439
440 .. index::
441    pair: SetTime; library routine
442
443 `SetTime({expr1,expr2})`
444   Sets `the_time` to `{expr1}` (in mins 0..1439 since midnight), running at
445   `{expr2}` -
446
447   | +ve: `{expr2}` minutes pass each turn;
448   | -ve: `{-expr2}` turns take one minute;
449   | zero: time stands still.
450
451 .. index::
452    pair: StartDaemon; library routine
453
454 `StartDaemon({obj_id})`
455   Starts the `{obj_id}`\'s daemon.
456
457 .. index::
458    pair: StartTimer; library routine
459
460 `StartTimer({obj_id,expr})`
461   Starts the `{obj_id}`\'s timer, initialising its :prop:`time_left` to
462   `{expr}`.  The object's :prop:`time_out` property will be called after
463   that number of turns have elapsed.
464
465 .. index::
466    pair: StopDaemon; library routine
467
468 `StopDaemon({obj_id})`
469   Stops the `{obj_id}`\'s daemon.
470
471 .. index::
472    pair: StopTimer; library routine
473
474 `StopTimer({obj_id})`
475   Stops the `{obj_id}`\'s timer.
476
477 .. index::
478    pair: TestScope; library routine
479
480 `TestScope({obj_id,actor})`
481   Returns :const:`true` if the `{obj_id}` is in scope, otherwise
482   :const:`false`.  If the optional `{actor}` is supplied, that defines the
483   scope.
484
485 .. index::
486    pair: TryNumber; library routine
487
488 `TryNumber({expr})`
489   Parses word `{expr}` in the input stream as a number, recognising
490   decimals, also English words one..twenty.  Returns the number 1..10000,
491   or -1000 if the parse fails.
492
493 .. index::
494    pair: UnsignedCompare; library routine
495
496 `UnsignedCompare({expr1,expr2})`
497   Returns -1 if `{expr1}` is less than `{expr2}`, 0 if `{expr1}` equals
498   `{expr2}`, and 1 if `{expr1}` is greater than `{expr2}`.  Both
499   expressions are unsigned, in the range 0..65535.
500
501 .. index::
502    pair: WordAddress; library routine
503
504 `WordAddress({expr})`
505   Returns a byte array containing the raw text of word `{expr}` in the
506   input stream.
507
508 .. index::
509    pair: WordInProperty; library routine
510
511 `WordInProperty({word,obj_id,property})`
512   Returns :const:`true` if the dictionary `{word}` is listed in the
513   `{property}` values for the `{obj_id}`.
514
515 .. index::
516    pair: WordLength; library routine
517
518 `WordLength({expr})`
519   Returns the length of word `{expr}` in the input stream.
520
521 .. index::
522    pair: WriteListFrom; library routine
523
524 `WriteListFrom({obj_id,expr})`
525   Outputs a list of `{obj_id}` and its siblings, in the given style, an
526   `{expr}` formed by adding any of: `ALWAYS_BIT`, `CONCEAL_BIT`,
527   `DEFART_BIT`, `ENGLISH_BIT`, `FULLINV_BIT`, `INDENT_BIT`, `ISARE_BIT`,
528   `NEWLINE_BIT`, `PARTINV_BIT`, `RECURSE_BIT`, `TERSE_BIT`, `WORKFLAG_BIT`.
529
530 .. index::
531    pair: YesOrNo; library routine
532
533 `YesOrNo()`
534   Returns :const:`true` if the player types "`YES`", :const:`false` for
535   "`NO`".
536
537 .. index::
538    pair: ZRegion; library routine
539
540 `ZRegion({arg})`
541   Returns the type of its `{arg}` : 3 for a string address, 2 for a routine
542   address, 1 for an object number, or 0 otherwise.
543
544 .. _object-props:
545
546 Object properties
547 =================
548
549 Where the `value` of a property can be a routine, several formats are
550 possible (but remember: embedded "`]`" returns :const:`false`, standalone
551 "`]`" returns :const:`true`):
552
553   | `{property} [; {stmt}; {stmt}; ... ]`
554   | `{property} [; return {routine_id}(); ]`
555   | `{property} [; {routine_id}(); ]`
556   | `{property} {routine_id}`
557
558 In this appendix, |ADD| marks an additive property.  Where a `Class` and an
559 `Object` of that class both define the same property, the value specified
560 for the `Object` normally overrides the value inherited from the `Class`.
561 However, if the property is additive then both values apply, with the
562 Object's value being considered first.
563
564 .. index::
565    pair: add_to_scope; library property
566
567 :prop:`add_to_scope`
568   For an object: additional objects which follow it in and out of scope.
569   The `{value}` can be a space-separated list of `{obj_ids}`, or a routine
570   which invokes `PlaceInScope()` or `ScopeWithin()` to specify objects.
571
572 .. index::
573    pair: after; library property
574
575 :prop:`after` |ADD|
576   For an object: receives every `{action}` and `{fake_action}` for which
577   this is the `{noun}`.  For a room: receives every `{action}` which occurs
578   here.
579
580   The `{value}` is a routine of structure similar to a `switch` statement,
581   having cases for the appropriate `{actions}` (and an optional `default`
582   as well); it is invoked after the action has happened, but before the
583   player has been informed.  The routine should return :const:`false` to
584   continue, telling the player what has happened, or :const:`true` to stop
585   processing the action and produce no further output.
586
587 .. index::
588    pair: article; library property
589
590 :prop:`article`
591   For an object: the object's indefinite article - the default is
592   automatically "a", "an" or "some".  The `{value}` can be a string, or a
593   routine which outputs a string.
594
595 .. index::
596    pair: articles; library property
597
598 :prop:`articles`
599   For a non-English object: its definite and indefinite articles.  The
600   `{value}` is an array of strings.
601
602 .. index::
603    pair: before; library property
604
605 :prop:`before` |ADD|
606   For an object: receives every `{action}` and `{fake_action}` for which
607   this is the `{noun}`.  For a room: receives every action which occurs
608   here.
609
610   The `{value}` is a routine invoked before the action has happened.  See
611   :prop:`after`.
612
613 .. index::
614    pair: cant_go; library property
615
616 :prop:`cant_go`
617   For a room: the message when the player attempts an impossible exit.  The
618   `{value}` can be a string, or a routine which outputs a string.
619
620 .. index::
621    pair: capacity; library property
622
623 :prop:`capacity`
624   For a :attr:`container` or :attr:`supporter` object: the number of
625   objects which can be placed in or on it - the default is 100.
626
627   For the player: the number which can be carried - :obj:`selfobj` has an
628   initial capacity of `MAX_CARRIED`.
629
630   The `{value}` can be a number, or a routine which returns a number.
631
632 .. index::
633    pair: d_to; library property
634
635 :prop:`d_to`
636   For a room: a possible exit.  The `{value}` can be
637
638   * :const:`false` (the default): not an exit;
639   * a string: output to explain why this is not an exit;
640   * a `{room}`: the exit leads to this room;
641   * a :obj:`door` object: the exit leads through this door;
642   * a routine which should return :const:`false`, a string, a `{room}`, a
643     :obj:`door` object, or :const:`true` to signify "not an exit" and
644     produce no further output.
645
646 .. index::
647    pair: daemon; library property
648
649 :prop:`daemon`
650   The `{value}` is a routine which can be activated by
651   `StartDaemon({obj_id})` and which then runs once each turn until
652   deactivated by `StopDaemon({obj_id})`.
653
654 .. index::
655    pair: describe; library property
656
657 :prop:`describe` |ADD|
658   For an object: called before the object's description is output.  For a
659   room: called before the room's (long) description is output.
660
661   The `{value}` is a routine which should return :const:`false` to continue,
662   outputting the usual description, or :const:`true` to stop processing and
663   produce no further output.
664
665 .. index::
666    pair: description; library property
667
668 :prop:`description`
669   For an object: its description (output by `Examine`).
670
671   For a room: its long description (output by `Look`).
672
673   The `{value}` can be a string, or a routine which outputs a string.
674
675 .. index::
676    pair: door_dir; library property
677
678 :prop:`door_dir`
679   For a :obj:`compass` object (:obj:`d_obj`, :obj:`e_obj`, ...): the
680   direction in which an attempt to move to this object actually leads.
681
682   For a :obj:`door` object: the direction in which this door leads.
683
684   The `{value}` can be a directional property (:prop:`d_to`, :prop:`e_to`,
685   \...), or a routine which returns such a property.
686
687 .. index::
688    pair: door_to; library property
689
690 :prop:`door_to`
691   For a `door` object: where it leads.  The value can be
692
693   * :const:`false` (the default): leads nowhere;
694   * a string: output to explain why door leads nowhere;
695   * a `{room}`: the door leads to this room;
696   * a routine which should return :const:`false`, a string, a `{room}`, or
697     :const:`true` to signify "leads nowhere" without producing any output.
698
699 .. index::
700    pair: e_to; library property
701
702 :prop:`e_to`
703   See :prop:`d_to`.
704
705 .. index::
706    pair: each_turn; library property
707
708 :prop:`each_turn` |ADD|
709   Invoked at the end of each turn (after all appropriate daemons and
710   timers) whenever the object is in scope.  The `{value}` can be a string,
711   or a routine.
712
713 .. index::
714    pair: found_in; library property
715
716 :prop:`found_in`
717   For an object: the rooms where this object can be found, unless it has
718   the :attr:`absent` attribute.  The `{value}` can be
719
720   * a space-separated list of `{rooms}` (where this object can be found) or
721      `{obj_ids}` (whose locations are tracked by this object);
722   * a routine which should return :const:`true` if this object can be found
723      in the current location, otherwise :const:`false`.
724
725 .. index::
726    pair: grammar; library property
727
728 :prop:`grammar`
729   For an :attr:`animate` or :attr:`talkable` object: the `{value}` is a
730   routine called when the parser knows that this object is being addressed,
731   but has yet to test the grammar.  The routine should return
732   :const:`false` to continue, :const::const:`true` to indicate that the
733   routine has parsed the entire command, or a dictionary word ('`word`' or
734   -'`word`').
735
736 .. index::
737    pair: in_to; library property
738
739 :prop:`in_to`
740   See :prop:`d_to`.
741
742 .. index::
743    pair: initial; library property
744
745 :prop:`initial`
746   For an object: its description before being picked up.
747
748   For a room: its description when the player enters the room.
749
750   The `{value}` can be a string, or a routine which outputs a string.
751
752 .. index::
753    pair: inside_description; library property
754
755 :prop:`inside_description`
756   For an `enterable` object: its description, output as part of the room
757   description when the player is inside the object.
758
759   The `{value}` can be a string, or a routine which outputs a string.
760
761 .. index::
762    pair: invent; library property
763
764 :prop:`invent`
765   For an object: the `{value}` is a routine for outputting the object's
766   inventory listing, which is called twice.  On the first call nothing has
767   been output; :var:`inventory_stage` has the value 1, and the routine
768   should return :const:`false` to continue, or :const:`true` to stop
769   processing and produce no further output.  On the second call the
770   object's indefinite article and short name have been output, but not any
771   subsidiary information; :var:`inventory_stage` has the value 2, and the
772   routine should return :const:`false` to continue, or :const:`true` to
773   stop processing and produce no further output.
774
775 .. index::
776    pair: life; library property
777
778 :prop:`life` |ADD|
779   For an `animate` object: receives person-to-person actions (`Answer`,
780   `Ask`, `Attack`, `Give`, `Kiss`, `Order`, `Show`, `Tell`, `ThrowAt` and
781   `WakeOther`) for which this is the `{noun}`.  The `{value}` is a routine
782   of structure similar to a `switch` statement, having cases for the
783   appropriate `{actions}` (and an optional default as well).  The routine
784   should return :const:`false` to continue, telling the player what has
785   happened, or :const:`true` to stop processing the action and produce no
786   further output.
787
788 .. index::
789    pair: list_together; library property
790
791 :prop:`list_together`
792   For an object: groups related objects when outputting an inventory or
793   room contents list.  The `{value}` can be
794
795   * a `{number}`: all objects having this value are grouped;
796   * a `{string}`: all objects having this value are grouped as a count of
797     the string;
798   * a routine which is called twice.  On the first call nothing has been
799     output; :var:`inventory_stage` has the value 1, and the routine should
800     return :const:`false` to continue, or :const::const:`true` to stop
801     processing and produce no further output.  On the second call the list
802     has been output; :var:`inventory_stage` has the value 2, and there is
803     no test on the return value.
804
805 .. index::
806    pair: n_to; library property
807
808 :prop:`n_to`
809   See :prop:`d_to`.
810
811 .. index::
812    pair: name; library property
813
814 :prop:`name` |ADD|
815   Defines a space-separated list of words which are added to the Inform
816   dictionary.  Each word can be supplied in apostrophes '...'  or quotes
817   "..."; in all other cases only words in apostrophes update the
818   dictionary.
819
820   For an object: identifies this object.
821
822   For a room: outputs "does not need to be referred to".
823
824 .. index::
825    pair: ne_to; library property
826
827 :prop:`ne_to`
828   See :prop:`d_to`.
829
830 .. index::
831    pair: number; library property
832
833 :prop:`number`
834   For an object or room: the `{value}` is a general-purpose variable freely
835   available for use by the program.  A :var:`player` object must provide
836   (but not use) this variable.
837
838 .. index::
839    pair: nw_to; library property
840
841 :prop:`nw_to`
842   See :prop:`d_to`.
843
844 .. index::
845    pair: orders; library property
846
847 :prop:`orders` |ADD|
848   For an :attr:`animate` or :attr:`talkable` object: the `{value}` is a
849   routine called to carry out the player's orders.  The routine should
850   return :const:`false` to continue, or :const:`true` to stop processing
851   the action and produce no further output.
852
853 .. index::
854    pair: out_to; library property
855
856 :prop:`out_to`
857   See :prop:`d_to`.
858
859 .. index::
860    pair: parse_name; library property
861
862 :prop:`parse_name`
863   For an object: the `{value}` is a routine called to parse an object's
864   name.  The routine should return zero if the text makes no sense, -1 to
865   cause the parser to resume, or the positive number of words matched.
866
867 .. index::
868    pair: plural; library property
869
870 :prop:`plural`
871   For an object: its plural form, when in the presence of others like it.
872   The `{value}` can be a string, or a routine which outputs a string.
873
874 .. index::
875    pair: react_after; library property
876
877 :prop:`react_after`
878   For an object: detects nearby actions - those which take place when this
879   object is in scope.  The `{value}` is a routine invoked after the action
880   has happened, but before the player has been informed.  See :prop:`after`.
881
882 .. index::
883    pair: react_before; library property
884
885 :prop:`react_before`
886   For an object: detects nearby actions - those which take place when this
887   object is in scope.  The `{value}` is a routine invoked before the action
888   has happened.  See :prop:`after`.
889
890 .. index::
891    pair: s_to; library property
892
893 :prop:`s_to`
894   See :prop:`d_to`.
895
896 .. index::
897    pair: se_to; library property
898
899 :prop:`se_to`
900   See :prop:`d_to`.
901
902 .. index::
903    pair: short_name; library property
904
905 :prop:`short_name`
906   For an object: an alternative or extended short name.  The `{value}` can
907   be a string, or a routine which outputs a string.  The routine should
908   return :const:`false` to continue by outputting the object's *actual*
909   short name (from the head of the object definition), or :const:`true` to
910   stop processing the action and produce no further output.
911
912 .. index::
913    pair: short_name_indef; library property
914
915 :prop:`short_name_indef`
916   For a non-English object: the short name when preceded by an indefinite
917   object.  The `{value}` can be a string, or a routine which outputs a
918   string.
919
920 .. index::
921    pair: sw_to; library property
922
923 :prop:`sw_to`
924   See :prop:`d_to`.
925
926 .. index::
927    pair: time_left; library property
928
929 :prop:`time_left`
930   For a timer object: the `{value}` is a variable to hold the number of
931   turns left until this object's timer - activated and initialised by
932   `StartTimer({obj_id})` - counts down to zero and invokes the object's
933   `time_out` property.
934
935 .. index::
936    pair: time_out; library property
937
938 :prop:`time_out`
939   For a timer object: the `{value}` is a routine which is run when the
940   object's :prop:`time_left` value - initialised by `StartTimer({obj_id})`,
941   and not in the meantime cancelled by `StopTimer({obj_id})` - counts down
942   to zero.
943
944 .. index::
945    pair: u_to; library property
946
947 :prop:`u_to`
948   See :prop:`d_to`.
949
950 .. index::
951    pair: w_to; library property
952
953 :prop:`w_to`
954   See :prop:`d_to`.
955
956 .. index::
957    pair: when_closed; library property
958
959 :prop:`when_closed`
960
961 .. index::
962    pair: when_open; library property
963
964 :prop:`when_open`
965   For a :attr:`container` or :attr:`door` object: used when including this
966   object in a room's long description.  The `{value}` can be a string, or a
967   routine which outputs a string.
968
969 .. index::
970    pair: when_off; library property
971
972 :prop:`when_off`
973
974 .. index::
975    pair: when_on; library property
976
977 :prop:`when_on`
978   For a :attr:`switchable` object: used when including this object in a
979   room's long description.  The `{value}` can be a string, or a routine
980   which outputs a string.
981
982 .. index::
983    pair: with_key; library property
984
985 :prop:`with_key`
986   For a :attr:`lockable` object: the `{obj_id}` (generally some kind of
987   key) needed to lock and unlock the object, or :const:`nothing` if no key
988   fits.
989
990 .. _object-attrs:
991
992 Object attributes
993 =================
994
995 .. index::
996    pair: absent; library attribute
997
998 :attr:`absent`
999    For a floating object (one with a :prop:`found_in` property, which can
1000    appear in many rooms): is no longer there.
1001
1002 .. index::
1003    pair: animate; library attribute
1004
1005 :attr:`animate`
1006    For an object: is a living creature.
1007
1008 .. index::
1009    pair: clothing; library attribute
1010
1011 :attr:`clothing`
1012    For an object: can be worn.
1013
1014 .. index::
1015    pair: concealed; library attribute
1016
1017 :attr:`concealed`
1018    For an object: is present but hidden from view.
1019
1020 .. index::
1021    pair: container; library attribute
1022
1023 :attr:`container`
1024    For an object: other objects can be put in (but not on) it.
1025
1026 .. index::
1027    pair: door; library attribute
1028
1029 :attr:`door`
1030    For an object: is a door or bridge between rooms.
1031
1032 .. index::
1033    pair: edible; library attribute
1034
1035 :attr:`edible`
1036    For an object: can be eaten.
1037
1038 .. index::
1039    pair: enterable; library attribute
1040
1041 :attr:`enterable`
1042    For an object: can be entered.
1043
1044 .. index::
1045    pair: female; library attribute
1046
1047 :attr:`female`
1048    For an :attr:`animate` object: is female.
1049
1050 .. index::
1051    pair: general; library attribute
1052
1053 :attr:`general`
1054    For an object or room: a general-purpose flag.
1055
1056 .. index::
1057    pair: light; library attribute
1058
1059 :attr:`light`
1060    For an object or room: is giving off light.
1061
1062 .. index::
1063    pair: lockable; library attribute
1064
1065 :attr:`lockable`
1066    For an object: can be locked; see the :prop:`with_key` property.
1067
1068 .. index::
1069    pair: locked; library attribute
1070
1071 :attr:`locked`
1072    For an object: can't be opened.
1073
1074 .. index::
1075    pair: male; library attribute
1076
1077 :attr:`male`
1078    For an :attr:`animate` object: is male.
1079
1080 .. index::
1081    pair: moved; library attribute
1082
1083 :attr:`moved`
1084    For an object: is being, or has been, taken by the player.
1085
1086 .. index::
1087    pair: neuter; library attribute
1088
1089 :attr:`neuter`
1090    For an :attr:`animate` object: is neither male nor female.
1091
1092 .. index::
1093    pair: on; library attribute
1094
1095 :attr:`on`
1096    For a :attr:`switchable` object: is switched on.
1097
1098 .. index::
1099    pair: open; library attribute
1100
1101 :attr:`open`
1102    For a :attr:`container` or door object: is open.
1103
1104 .. index::
1105    pair: openable; library attribute
1106
1107 :attr:`openable`
1108    For a :attr:`container` or :attr:`door` object: can be opened.
1109
1110 .. index::
1111    pair: pluralname; library attribute
1112
1113 :attr:`pluralname`
1114    For an object: is plural.
1115
1116 .. index::
1117    pair: proper; library attribute
1118
1119 :attr:`proper`
1120    For an object: the short name is a proper noun, therefore not to be
1121    preceded by "The" or "the".
1122
1123 .. index::
1124    pair: scenery; library attribute
1125
1126 :attr:`scenery`
1127    For an object: can't be taken; is not listed in a room description.
1128
1129 .. index::
1130    pair: scored; library attribute
1131
1132 :attr:`scored`
1133    For an object: awards `OBJECT_SCORE` points when taken for the first
1134    time.  For a room: awards `ROOM_SCORE` points when visited for the
1135    first time.
1136
1137 .. index::
1138    pair: static; library attribute
1139
1140 :attr:`static`
1141    For an object: can't be taken.
1142
1143 .. index::
1144    pair: supporter; library attribute
1145
1146 :attr:`supporter`
1147    For an object: other objects can be put on (but not in) it.
1148
1149 .. index::
1150    pair: switchable; library attribute
1151
1152 :attr:`switchable`
1153    For an object: can be switched off or on.
1154
1155 .. index::
1156    pair: talkable; library attribute
1157
1158 :attr:`talkable`
1159    For an object: can be addressed in "object, do this" style.
1160
1161 .. index::
1162    pair: transparent; library attribute
1163
1164 :attr:`transparent`
1165    For a :attr:`container` object: objects inside it are visible.
1166
1167 .. index::
1168    pair: visited; library attribute
1169
1170 :attr:`visited`
1171    For a room: is being, or has been, visited by the player.
1172
1173 .. index::
1174    pair: workflag; library attribute
1175
1176 :attr:`workflag`
1177    Temporary internal flag, also available to the program.
1178
1179 .. index::
1180    pair: worn; library attribute
1181
1182 :attr:`worn`
1183    For a :attr:`clothing` object: is being worn.
1184
1185 .. _entry-points:
1186
1187 Optional entry points
1188 =====================
1189
1190 These routines, if you supply them, are called when shown.
1191
1192 `AfterLife()`
1193   Player has died; `deadflag=0` resurrects.
1194
1195 `AfterPrompt()`
1196   The ">" prompt has been output.
1197
1198 `Amusing()`
1199   Player has won; `AMUSING_PROVIDED` is defined.
1200
1201 `BeforeParsing()`
1202   The parser has input some text, set up the buffer and parse tables, and
1203   initialised :var:`wn` to 1.
1204
1205 `ChooseObjects({object,flag})`
1206   Parser has found "`ALL`" or an ambiguous noun phrase and decided that
1207   `{object}` should be excluded (`flag` is 0), or included (`flag` is 1).
1208   The routine should return 0 to let this stand, 1 to force inclusion, or 2
1209   to force exclusion.  If `flag` is 2, parser is undecided; routine should
1210   return appropriate score 0..9.
1211
1212 `DarkToDark()`
1213   The player has gone from one dark room to another.
1214
1215 `DeathMessage()`
1216   The player has died; `deadflag` is 3 or more.
1217
1218 `GamePostRoutine()`
1219   Called after all actions.
1220
1221 `GamePreRoutine()`
1222   Called before all actions.
1223
1224 `Initialise()`
1225   **Mandatory; note British spelling**: called at start.  Must set
1226   `location`; can return 2 to suppress game banner.
1227
1228 `InScope()`
1229   Called during parsing.
1230
1231 `LookRoutine()`
1232   Called at the end of every `Look` description.
1233
1234 `NewRoom()`
1235   Called when room changes, before description is output.
1236
1237 `ParseNoun({object})`
1238   Called to parse the `{object}`\'s name.
1239
1240 `ParseNumber({byte_array,length})`
1241   Called to parse a number.
1242
1243 `ParserError({number})`
1244   Called to handle an error.
1245
1246 `PrintRank()`
1247   Completes the output of the score.
1248
1249 `PrintTaskName({number})`
1250   Prints the name of the task.
1251
1252 `PrintVerb({addr})`
1253   Called when an unusual verb is printed.
1254
1255 `TimePasses()`
1256   Called after every turn.
1257
1258 `UnknownVerb()`
1259   Called when an unusual verb is encountered.
1260
1261 .. _group-1-actions:
1262
1263 Group 1 actions
1264 ===============
1265
1266 Group 1 actions support the 'meta' verbs.  These are the standard actions
1267 and their triggering verbs.
1268
1269 ==============  =====================================================
1270 `CommandsOff`   "`RECORDING OFF`"
1271 `CommandsOn`    "`RECORDING [ON]`"
1272 `CommandsRead`  "`REPLAY`"
1273 `FullScore`     "`FULLSCORE`", "`FULL [SCORE]`"
1274 `LMode1`        "`BRIEF`", "`NORMAL`"
1275 `LMode2`        "`LONG`", "`VERBOSE`"
1276 `LMode3`        "`SHORT`", "`SUPERBRIEF`"
1277 `NotifyOff`     "`NOTIFY OFF`"
1278 `NotifyOn`      "`NOTIFY [ON]`"
1279 `Objects`       "`OBJECTS`"
1280 `Places`        "`PLACES`"
1281 `Pronouns`      "`[PRO]NOUNS`"
1282 `Quit`          "`DIE`", "`Q[UIT]`"
1283 `Restart`       "`RESTART`"
1284 `Restore`       "`RESTORE`"
1285 `Save`          "`CLOSE`"
1286 `Score`         "`SCORE`"
1287 `ScriptOff`     "`[TRAN]SCRIPT OFF`", "`NOSCRIPT`", "`UNSCRIPT`"
1288 `ScriptOn`      "`[TRAN]SCRIPT [ON]`"
1289 `Verify`        "`VERIFY`"
1290 `Version`       "`VERSION`"
1291 ==============  =====================================================
1292
1293 and the debug tools.
1294
1295 ===============   ===================================================
1296 `ActionsOff`      "`ACTIONS OFF`"
1297 `ActionsOn`       "`ACTIONS [ON]`"
1298 `ChangesOff`      "`CHANGES OFF`"
1299 `ChangesOn`       "`CHANGES [ON]`"
1300 `Gonear`          "`GONEAR`"
1301 `Goto`            "`GOTO`"
1302 `Predictable`     "`RANDOM`"
1303 `RoutinesOff`     "`MESSAGES OFF`", "`ROUTINES OFF`"
1304 `RoutinesOn`      "`MESSAGES [ON]`", "`ROUTINES [ON]`"
1305 `Scope`           "`SCOPE`"
1306 `Showobj`         "`SHOWOBJ`"
1307 `Showverb`        "`SHOWVERB`"
1308 `TimersOff`       "`DAEMONS OFF`", "`TIMERS OFF`"
1309 `TimersOn`        "`DAEMONS [ON]`", "`TIMERS [ON]`"
1310 `TraceLevel`      "`TRACE number`"
1311 `TraceOff`        "`TRACE OFF`"
1312 `TraceOn`         "`TRACE [ON]`"
1313 `XAbstract`       "`ABSTRACT`"
1314 `XPurloin`        "`PURLOIN`"
1315 `XTree`           "`TREE`"
1316 ===============   ===================================================
1317
1318 .. _group-2-actions:
1319
1320 Group 2 actions
1321 ===============
1322
1323 Group 2 actions usually work, given the right circumstances.
1324
1325 .. tabularcolumns:: |l|p{5in}|
1326
1327 =============   =============================================================
1328 `Close`         "`CLOSE [UP]`", "`COVER [UP]`", "`SHUT [UP]`"
1329 `Disrobe`       "`DISROBE`", "`DOFF`", "`REMOVE`", "`SHED`", "`TAKE OFF`"
1330 `Drop`          "`DISCARD`", "`DROP`", "`PUT DOWN`", "`THROW`"
1331 `Eat`           "`EAT`"
1332 `Empty`         "`EMPTY [OUT]`"
1333 `EmptyT`        "`EMPTY IN|INTO|ON|ONTO|TO`"
1334 `Enter`         "`CROSS`", "`ENTER`", "`GET IN|INTO|ON|ONTO`",
1335                 "`GO IN|INSIDE|INTO|THROUGH`",
1336                 "`LEAVE IN|INSIDE|INTO|THROUGH`", "`LIE IN|INSIDE|ON`",
1337                 "`LIE ON TOP OF`",
1338                 "`RUN IN|INSIDE|INTO|THROUGH`", "`SIT IN|INSIDE|ON`",
1339                 "`SIT ON TOP OF`", "`STAND ON`",
1340                 "`WALK IN|INSIDE|INTO|THROUGH`"
1341 `Examine`       "`CHECK,`" "`DESCRIBE`", "`EXAMINE`",
1342                 "`L[OOK] AT`", "`READ`", "`WATCH`", "`X`"
1343 `Exit`          "`EXIT`", "`GET OFF|OUT|UP`",
1344                 "`LEAVE`", "`OUT[SIDE]`", "`STAND [UP]`"
1345 `GetOff`        "`GET OFF`"
1346 `Give`          "`FEED [TO]`", "`GIVE [TO]`", "`OFFER [TO]`", "`PAY [TO]`"
1347 `Go`            "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
1348 `GoIn`          "`CROSS`", "`ENTER`", "`IN[SIDE]`"
1349 `Insert`        "`DISCARD IN|INTO`",
1350                 "`DROP DOWN|IN|INTO`",
1351                 "`INSERT IN|INTO`",
1352                 "`PUT IN|INSIDE|INTO`",
1353                 "`THROW DOWN|IN|INTO`"
1354 `Inv`           "`I[NV]`", "`INVENTORY`", "`TAKE INVENTORY`"
1355 `InvTall`       "`I[NV] TALL`", "`INVENTORY TALL`"
1356 `InvWide`       "`I[NV] WIDE`", "`INVENTORY WIDE`"
1357 `Lock`          "`LOCK WITH`"
1358 `Look`          "`L[OOK]`"
1359 `Open`          "`OPEN`", "`UNCOVER`", "`UNDO`", "`UNWRAP`"
1360 `PutOn`         "`DISCARD ON|ONTO`",
1361                 "`DROP ON|ONTO`",
1362                 "`PUT ON|ONTO`",
1363                 "`THROW ON|ONTO`"
1364 `Remove`        "`GET FROM`", "`REMOVE FROM`", "`TAKE FROM|OFF`"
1365 `Search`        "`L[OOK] IN|INSIDE|INTO|THROUGH`", "`SEARCH`"
1366 `Show`          "`DISPLAY [TO]`", "`PRESENT [TO]`", "`SHOW [TO]`"
1367 `SwitchOff`     "`CLOSE OFF`", "`SCREW OFF`",
1368                 "`SWITCH OFF`", "`TURN OFF`",
1369                 "`TWIST OFF`"
1370 `SwitchOn`      "`SCREW ON`", "`SWITCH ON`",
1371                 "`TURN ON`", "`TWIST ON`"
1372 `Take`          "`CARRY`", "`GET`", "`HOLD`",
1373                 "`PEEL [OFF]`", "`PICK UP`",
1374                 "`REMOVE`", "`TAKE`"
1375 `Transfer`      "`CLEAR TO`", "`MOVE TO`",
1376                 "`PRESS TO`", "`PUSH TO`",
1377                 "`SHIFT TO`", "`TRANSFER TO`"
1378 `Unlock`        "`OPEN WITH`", "`UNDO WITH`",
1379                 "`UNLOCK WITH`"
1380 `VagueGo`       "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
1381 `Wear`          "`DON`", "`PUT ON`", "`WEAR`"
1382 =============   =============================================================
1383
1384 .. _group-3-actions:
1385
1386 Group 3 actions
1387 ===============
1388
1389 Group 3 actions are by default stubs which output a message and stop at the
1390 "before" stage (so there is no "after" stage).
1391
1392 .. tabularcolumns:: |l|p{5in}|
1393
1394 =============   =============================================================
1395 `Answer`        "`ANSWER TO`", "`SAY TO`",
1396                 "`SHOUT TO`", "`SPEAK TO`"
1397 `Ask`           "`ASK ABOUT`"
1398 `AskFor`        "`ASK FOR`"
1399 `Attack`        "`ATTACK`", "`BREAK`", "`CRACK`",
1400                 "`DESTROY`", "`FIGHT`", "`HIT`",
1401                 "`KILL`", "`MURDER`", "`PUNCH`",
1402                 "`SMASH`", "`THUMP`", "`TORTURE`",
1403                 "`WRECK`"
1404 `Blow`          "`BLOW`"
1405 `Burn`          "`BURN [WITH]`", "`LIGHT [WITH]`"
1406 `Buy`           "`BUY`" "`PURCHASE`"
1407 `Climb`         "`CLIMB [OVER|UP]`", "`SCALE`"
1408 `Consult`       "`CONSULT ABOUT|ON`",
1409                 "`LOOK UP IN`",
1410                 "`READ ABOUT IN`", "`READ IN`"
1411 `Cut`           "`CHOP,`" "`CUT`", "`PRUNE`", "`SLICE`"
1412 `Dig`           "`DIG [WITH]`"
1413 `Drink`         "`DRINK`", "`SIP`", "`SWALLOW`"
1414 `Fill`          "`FILL`"
1415 `Jump`          "`HOP`", "`JUMP`", "`SKIP`"
1416 `JumpOver`      "`HOP OVER`", "`JUMP OVER`", "`SKIP OVER`"
1417 `Kiss`          "`EMBRACE`", "`HUG`", "`KISS`"
1418 `Listen`        "`HEAR`", "`LISTEN [TO]`"
1419 `LookUnder`     "`LOOK UNDER`"
1420 `Mild`          Various mild swearwords.
1421 `No`            "`NO`"
1422 `Pray`          "`PRAY`"
1423 `Pull`          "`DRAG`" "`PULL`"
1424 `Push`          "`CLEAR`", "`MOVE`", "`PRESS`",
1425                 "`PUSH`", "`SHIFT`"
1426 `PushDir`       "`CLEAR`", "`MOVE`", "`PRESS`",
1427                 "`PUSH`", "`SHIFT`"
1428 `Rub`           "`CLEAN`", "`DUST`", "`POLISH`",
1429                 "`RUB`", "`SCRUB`", "`SHINE`",
1430                 "`SWEEP`", "`WIPE`"
1431 `Set`           "`ADJUST`", "`SET`"
1432 `SetTo`         "`ADJUST TO`", "`SET TO`"
1433 `Sing`          "`SING`"
1434 `Sleep`         "`NAP`", "`SLEEP`"
1435 `Smell`         "`SMELL`", "`SNIFF`"
1436 `Sorry`         "`SORRY`"
1437 `Squeeze`       "`SQUASH`", "`SQUEEZE`"
1438 `Strong`        Various strong swearwords.
1439 `Swim`          "`DIVE`", "`SWIM`"
1440 `Swing`         "`SWING [ON]`"
1441 `Taste`         "`TASTE`"
1442 `Tell`          "`TELL ABOUT`"
1443 `Think`         "`THINK`"
1444 `ThrowAt`       "`THROW AGAINST|AT|ON|ONTO`"
1445 `Tie`           "`ATTACH [TO]`", "`FASTEN [TO]`",
1446                 "`FIX [TO]`", "`TIE [TO]`"
1447 `Touch`         "`FEEL,`" "`FONDLE`", "`GROPE`", "`TOUCH`"
1448 `Turn`          "`ROTATE`", "`SCREW`", "`TURN`",
1449                 "`TWIST`", "`UNSCREW`"
1450 `Wait`          "`WAIT`" "`Z`"
1451 `Wake`          "`AWAKE[N]`", "`WAKE [UP]`"
1452 `WakeOther`     "`AWAKE[N]`", "`WAKE [UP]`"
1453 `Wave`          "`WAVE`"
1454 `WaveHands`     "`WAVE`"
1455 `Yes`           "`Y[ES]`"
1456 =============   =============================================================
1457
1458 Fake actions
1459 ============
1460
1461 Fake actions handle some special cases, or represent "real" actions from
1462 the viewpoint of the second object.
1463
1464 .. tabularcolumns:: |l|p{5in}|
1465
1466 ================   ========================================================
1467 `LetGo`            Generated by `Remove`.
1468 `ListMiscellany`   Outputs a range of inventory messages.
1469 `Miscellany`       Outputs a range of utility messages.
1470 `NotUnderstood`    Generated when parser fails to interpret some `orders`.
1471 `Order`            Receives things not handled by `orders`.
1472 `PluralFound`      Tells the parser that `parse_name()` has identified a
1473                    plural object.
1474 `Prompt`           Outputs the prompt, normally ">".
1475 `Receive`          Generated by `Insert` and `PutOn`.
1476 `TheSame`          Generated when parser can't distinguish between two
1477                    objects.
1478 `ThrownAt`         Generated by `ThrowAt`.
1479 ================   ========================================================