Contents
Back
Forward

15. Reading matter and consultation

Even at present... we still know very little about how access to printed materials affects human behaviour.

...Elizabeth Eisenstein, The Printing Revolution in Early Modern Europe

look up figure 18 in the engineering textbook
is a difficult line for Inform to understand, because almost anything could appear in the first part: even its format depends on what the second part is. This kind of request, and more generally
look up <any words here> in <the object>
read about <any words here> in <the object>
consult <the object> about <any words here>
cause the Consult object action. Note that second is just zero: formally, there is no second noun attached to a Consult action. The object has to parse the <any words here> part itself, in a before rule for Consult. The following variables are set up to make this possible:

consult_from holds the number of the first word in the <any...> clause;

consult_words holds the number of words in the <any...> clause (at least 1).

The words given are parsed using library routines like NextWord(), TryNumber(word-number) and so on: see Section 24 for full details. As usual, the before routine should return true if it has managed to deal with the action; returning false will make the library print "You discover nothing of interest in...''.

Little hints are placed here and there in the 'Ruins', written in the glyphs of an ancient dialect of Mayan. Our explorer has, of course, come equipped with the latest and finest scholarship on the subject:

Object dictionary "Waldeck's Mayan dictionary"
  with name "dictionary" "local" "guide" "book" "mayan"
            "waldeck" "waldeck^s",
       description "Compiled from the unreliable lithographs of the
           legendary raconteur and explorer ~Count~ Jean Frederic
           Maximilien Waldeck (1766??-1875), this guide contains
           what little is known of the glyphs used in the local
           ancient dialect.",
       before
       [ w1 w2 glyph other;  Consult:
               if (consult_words>2) jump GlyphHelp;
               wn=consult_from;
               w1 = NextWord(); ! First word of subject 
               w2 = NextWord(); ! Second word (if any) of subject 
               if (consult_words==1 && w1=='glyph' or 'glyphs')
                   jump GlyphHelp;
               !  We want to recognise both "glyph q1" and "q1 glyph":
               glyph=w1; other=w2;
               if (w1=='glyph') { glyph=w2; other=w1; }
               !  So now glyph holds the name, and other the other word
               if (consult_words==2 && other~='glyph') jump GlyphHelp;
               switch(glyph)
               {   'q1': "(This is one glyph you have memorised!)^^
                          Q1: ~sacred site~.";
                   'circle': "Circle: ~the Sun; also life, lifetime~.";
                   ...
                   default: "That glyph is so far unrecorded.";
               }
               !  All three of the ways the text can go wrong lead to
               !  this message being produced:
              .GlyphHelp; "Try ~look up <name of glyph> in book~.";
       ],
  has  proper;
Note that this understands any of the forms "q1'', "glyph q1'' or "q1 glyph'' but is careful to reject, for instance, "glyph q1 glyph''. (These aren't genuine Mayan glyphs, but some of the real ones have similar names, dating from when their syllabic equivalents weren't known: G8, the Lord of the Night, for instance.)

??EXERCISE 17:
(link to
the answer)
To mark the 500th anniversary of William Tyndale (the first English translator of the New Testament), prepare an edition of the four Gospels.

/\/\ Ordinarily, a request by the player to "read'' something is translated into an Examine action. But the "read'' verb is defined independently of the "examine'' verb in order to make it easy to separate the two requests. For instance:
Attribute legible;
...
Object textbook "textbook"
  with name "engineering" "textbook" "text" "book",
       description "What beautiful covers and spine!",
       before
       [; Consult, Read:
           "The pages are full of senseless equations.";
       ],
       has  legible;
...
[ ReadSub; <<Examine noun>>; ];
Extend "read" first * legible                        -> Read;
Note that "read" causes a Read action only for legible objects, and otherwise causes Examine in the usual way. ReadSub is coded as a translation to Examine as well, so that if a legible object doesn't provide a Read rule then an Examine happens after all.

*REFERENCES:
If you really need more elaborate topic-parsing (for, e.g., "look up <something> in the catalogue'', where any object name might appear) then extending the grammar for look may be less trouble. For a good implementation see 'Encyclopaedia Frobozzica', by Gareth Rees.

Contents / Back / Forward
Chapter I / Chapter II / Chapter III / Chapter IV / Chapter V / Chapter VI / Appendix
Mechanically translated to HTML from third edition as revised 16 May 1997. Copyright © Graham Nelson 1993, 1994, 1995, 1996, 1997: all rights reserved.