|BOOK ONE: PROGRAMMING|
|Chapter I: The Inform Programming Language|
|Section 1||The language of routines|
|1 -- First principles|
|2 -- Example 1: Hello World|
|3 -- Example 2: Elsinore|
|4 -- Numbers and variables|
|5 -- Arithmetic expressions|
|6 -- Arguments and return values|
|7 -- Example 3: Cubes|
|8 -- Conditions: if, true and false|
|9 -- Example 4: Factorials|
|10 -- Code blocks, else and switch|
|11 -- while, do... until, for, break, continue|
|12 -- Example 5: A number puzzle|
|13 -- quit and jump; saving the program state|
|14 -- Printing output|
|15 -- Example 6: Printing in hexadecimal|
|16 -- Built-in functions 1: random and indirect|
|17 -- Accepting input|
|Section 2||The language of data|
|1 -- Directives and constants|
|2 -- Global variables|
|3 -- Arrays|
|4 -- Example 7: Shuffling a pack of cards|
|5 -- Seven special data structures|
|Section 3||The language of objects|
|1 -- Objects and communication|
|2 -- Built-in functions 2: the object tree|
|3 -- Creating objects 1: setting up the object tree|
|4 -- Statements for objects: move, remove, objectloop|
|5 -- Creating objects 2: with properties|
|6 -- private properties and encapsulation|
|7 -- Attributes, give and has|
|8 -- Classes and inheritance|
|9 -- Messages|
|10 -- Access to superclass values|
|11 -- Philosophy|
|12 -- Sending messages to routines, strings or classes|
|13 -- Creating and deleting objects|
|14 -- Footnote on common vs. individual properties|
|Chapter II: Using the Compiler|
|Section 4||The language of Inform|
ICL (Inform Control Language); Include; conditional compilation: If..., Ifnot, Endif; Message; linking in the library; writing new modules to link in.
|Section 5||Compiler options and memory settings|
Switches; memory sizes; typical memory usage; raising memory settings.
|Section 6||All the Inform error messages|
Fatal errors; errors, including linker and assembler errors; warnings, including obsolete usage warnings.
|BOOK TWO: DESIGNING|
|Chapter III: Fundamentals|
|Section 7||Getting started|
Beginning to lay 'Ruins'; including the library files; the Initialise routine; some properties of mushrooms; name, description and initial; edible foodstuffs; introducing before and after rules; the stone steps; self-destructing rules.
|Section 8||Introducing messages and classes|
Recap of message-sending: a parrot; classes for treasure artifacts: the pygmy statuette, the honeycomb; how clashes are sorted out in class inheritance, additivity.
|Section 9||Actions and reactions|
Actions are attempts; generating them with <, <<; the action, noun and second variables (and inp1, inp2); the ## notation; the standard actions, in Groups 1 to 3; creating new actions, the Blorple example; fake actions like ThrownAt; how actions are processed, over 'Before', 'During' and 'After' stages.
|Chapter IV: The Model World|
|Section 10||Places, scenery, directions and the map|
Giving 'Ruins' a small map; n_to, d_to, etc.; when you cant_go; scenery objects; default rules; rooms have before and after too; a mist object, present in many rooms, using found_in; the five senses and reaction rules; direction objects in the compass.
|Section 11||Containers, supporters and sub-objects|
Containers: container, supporter, capacity, open, openable; locks and keys: locked, lockable, with_key; LetGo and Receive to trap use of a container: a horrifying chasm; the Search action; transparent objects have visible sub-objects; a television set with buttons.
How to create a door; door_to, door_dir; when_open, when_closed; a stone door for 'Ruins'; a two-way door, the 'Advent' grate; why door_dir is needed and how to trap every attempt to go through.
|Section 13||Switchable objects|
switchable and on: when_on, when_off; the Gotham City searchlight; a sodium lamp; describe taking precedence.
|Section 14||Things to enter, travel in and push around|
enterable objects: a slab altar; vehicles: KAR 1; special rule about the Go action when inside something enterable; the PushDir action: a huge pumice-stone ball; pushing up and down.
|Section 15||Reading matter and consultation|
The Consult action, "look up''; consult_from and consult_words: a dictionary of glyphs, Tyndale's Bible; making "read'' and "examine'' different.
|Section 16||Living creatures and conversation|
animate objects and the life rule; a mummified priest, Blofeld, a coiled snake; some people are transparent; orders: actions for other people; talkable objects; parsing conversation: Zen and Charlotte; untypeable verbs; fake fake actions; several voice-activated machines; applications of scope: telepathy and phone calls.
|Section 17||The light and the dark|
Light and darkness is automatically managed; the definition of 'when there is light'; OffersLight and HasLightSource; going from darkness to darkness and the DarkToDark entry point; modifying the darkness object.
|Section 18||Daemons and the passing of time|
Daemons and the daemon property; starting and stopping them; background daemons; timers (fuses); time_left and time_out; each_turn events for places and nearby objects; the time of day; changing it with SetTime; on the status line; midnight, sunrise, sunset; the exact sequence of events at end-of-turn.
|Section 19||Starting, moving, changing and killing the player|
What Initialise should do; the location; initial restoration; teleportation and the PlayerTo routine; what happens when the room changes: NewRoom, initial for a room, visited; giving the player his own before rule; using ChangePlayer to transform him into any object; multi-character games; life and deadflag; the DeathMessage routine; resurrection and the AfterLife routine.
|Section 20||Miscellaneous constants and scoring|
Story and Headline; MAX_CARRIED; the automatic rucksack SACK_OBJECT; 'amusing' rewards for the victorious; two scoring systems: MAX_SCORE, OBJECT_SCORE, ROOM_SCORE; tasks: TASKS_PROVIDED, NUMBER_TASKS, task_scores, PrintTaskName; rankings and PrintRank; automatic score notification and notify_mode; "objects'' and "places'' verbs, removable with NO_PLACES.
|Section 21||Extending and redefining the Library|
Enriching the model; amulets and their spells; making a new library file; new common properties; changing default values of these; the LibraryMessages system for changing messages like "Dropped.''; changing the prompt; the last resort, using Replace directives; even on 'hardware' functions like random.
|Chapter V: Describing and Parsing|
|Section 22||Describing objects and rooms|
print (The) obj, ... (the) obj and so on; indefinite and definite article; proper nouns; the short_name of an object; invent strings and routines; exactly how inventory lines are printed; a matchbook; describe routines; exactly how rooms are described; Locale.
|Section 23||Listing and grouping objects|
The list-maker WriteListFrom; its style bitmap; examples: tall and wide inventories; grouping similar items together in lists: foodstuffs, Scrabble pieces and denominations of coin.
|Section 24||How nouns are parsed|
How name is used; a fried green tomato turning red; the parser breaks text into a stream of words; wn and NextWord; reading words as numbers or from their raw text; a parse_name routine is much more flexible than name; the ParseNoun entry point; distinguishing adjectives from nouns.
|Section 25||Plural names for duplicated objects|
Collections of indistinguishable objects; a bag of six coins; the plural property for printing out plurals; definition of 'indistinguishable'; writing parse_name routines to allow plurals to be understood; class of crowns.
|Section 26||How verbs are parsed|
The parser's fundamental method; BeforeParsing entry point; the actor and verb word; synonyms for verbs; definitions of grammar, line and token; action_to_be; Verb directive: a simplified "take'' grammar; meta verbs; grammar creates actions; creating an "xyzzy'' verb; how to Extend grammar for an existing verb: pushing numbered buttons; priority: replace, first, last; splitting synonymous verbs apart with Extend only; the UnknownVerb and PrintVerb entry points.
|Section 27||Tokens of grammar|
Full list of grammar tokens; prepositions; noun and held; implicit taking; tokens allowing multiple objects like "all''; filtering out nouns by attribute: "use'' verb; and by general routine: "free'' verb; parsing numbers: "type'' verb, ParseNumber; general parsing routines; reading from the parser's raw text buffer and parse table; exercises, including French, telephone and floating-point numbers, times of day, adding a third parameter to a grammar line.
|Section 28||Scope and what you can see|
The definition of 'in scope'; touchability is stricter than scope; answering questions: "what is a grue''; scope=... tokens with programmable scope; scope_stage, ScopeWithin and PlaceInScope; changing the global definition of 'in scope' using InScope; scope_reason; looping over and testing scope; making the rules more sensitive to darkness; a long room divided by a glass wall; the add_to_scope property for component parts of containers.
|Section 29||Helping the parser out of trouble|
Parser error messages and ParserError; ambiguity-resolution and influencing it with ChooseObjects; making "eat'' prefer edible objects; redefining "all''.
|Chapter VI: Testing and Hacking|
|Section 30||Debugging verbs and tracing|
Suite of debugging verbs: "purloin'', "abstract'', "tree'', "scope'', "goto'', "gonear'', "actions'', "routines'', "timers'', "trace'', "recording'', "replay'', "random''; transcriptions; the random-number generator; Infix-format debugging files; how to crash the game interpreter at run-time; the levels of parser tracing; compiling with debugging code.
|Section 31||Limitations on the run-time format|
Formats of the Z-machine; restrictions: memory, vocabulary, dictionary resolution, attributes, properties, names, special effects, objects, memory management, global variables, "undo'' verb, function arguments; using Abbreviate to save run-time memory.
|Section 32||Boxes, menus and drawings|
Asking yes/no questions with YesOrNo; the status line; character graphics, escape characters; proportional- and fixed-pitch fonts, font; epigrams in boxes and box; menus of text options, DoMenu, pretty_flag, menu_item; an example menu; submenus are allowed; changing the text style to bold-face, underlining, reverse video.
|Section 33||Descending into assembly language|
Assembly language @; reliability of interpreters; table of opcodes worth knowing about; upper and lower windows: splitting, setting the window, moving the cursor, clearing the screen, word-breaking; the colour scheme; a bell sound; keyboard reading in real-time; function and cursor keys; tokenising with dictionaries; encoding dictionary entries; input/output streams; the stack frame: throw and catch; examples: a title page, drawing status lines, formatting and centering text.
|APPENDIX: Tables and summaries|
|Section A1||Inform operators|
|Section A2||Inform statements|
|Section A3||Inform directives|
|Section A5||Library attributes|
|Section A6||Library properties|
|Section A7||Library-defined objects and routines|
|Section A8||Library actions|
|Section A9||Library message numbers|
|Section A10||Entry points and meaningful constants|
|Section A11||What order the program should be in|
|Section A12||A short Inform lexicon|