FROTZ V2.01 - an interpreter for all Infocom games. Complies with standard 0.2
for all games except V6 (graphic) games. Written by Stefan Jokisch in 1995-96

    This program evolved from Mark Howell's Zip. Although the source
    code is completely re-written, one can still find traces of Zip.

    Many thanks to Paul D. Doherty for his continuing support of this
    project. Thanks to Alan Sherrod for testing the performance; to
    John Kennedy and Ambat Sasi Nair for helpful hints on PC video
    boards; to Thomas Biskup, Ian Carpenter, Graeme Cree, Jason Dyer,
    Bernhard Fuchs, Joe Hachem, Kirk Klobe, Marnix Klooster and John
    Mackin for their bug reports; to David Kinder for his Amiga port.

    Frotz is freeware: It may be used and distributed freely provided
    no commercial profit is involved. (c) 1995, 1996 Stefan Jokisch,
    <jokisch@ls7.informatik.uni-dortmund.de>.

    This OS/2 port was done by Christopher J. Madsen <ac608@yfn.ysu.edu>.
    Please report bugs in it to me, and I'll forward them to Stefan if
    necessary.  If you want to be helpful, you could get the DOS
    version and see if it has the same bug.  (OS/2 and DOS saved games
    are compatible.)

There are two executables in this archive.  You only need one of them.
Frotz.exe is the standard executable, and FrotzEMX.exe is a smaller one
for people who have installed the EMX 0.9c runtime libraries.

This is a beta release, but I haven't had any problems with it.
Please give it a try and let me know how it works.  In particular, the
European character support needs testing.  I don't have any games that
use it.  If you do, *please* let me know if it works.

Features:

    - support for V1 to V8 games
    - user-defined aliases (NEW, OS/2 port only)
    - timed input ('Border Zone')
    - function key support including number pad keys ('Beyond Zork')
    - command line editing and history
    - small save files (Zip 2.0 format is still understood)
    - switches for colour setting
    - switch for setting the Tandy bit
    - low- and high-pitched beep sounds
    - cheat functions
    - multiple UNDO (via hot key, even for old V1 to V4 games)
    - input line recording and playback (via hot key)
    - support for European characters ('Zork I German')
    - emphasized, reverse and boldface text
    - fast performance without virtual memory

Features in the DOS version but not in this OS/2 port:
    - various text and graphic modes
    - built-in graphic font ('Beyond Zork')
    - mouse support ('Beyond Zork' and all V6 games)
    - sound effects via Soundblaster ('Lurking Horror' and 'Sherlock')

Special keys:

    Alt-A             - alias menu
    Alt-N             - new game (restart)
    Alt-P             - turn on input line playback
    Alt-R             - toggle input line recording on/off
    Alt-S             - set the random seed
    Alt-U             - multiple UNDO (even for old V1 to V4 games)
    Alt-X             - exit game (quit)

    Ctrl-B  or  cursor left       - move one character to the left
    Ctrl-F      cursor right      - move one character to the right
    Alt-B       ctrl-cursor left  - move to previous word
    Alt-F       ctrl-cursor right - move to next word
    Ctrl-A      home              - move to beginning of line
    Ctrl-E      end               - move to end of line
                backspace         - delete character to the left
                ctrl-backspace    - delete word to the left
    Ctrl-D      delete            - delete character below cursor
    Alt-D       ctrl-delete       - delete word below cursor
                insert            - toggle overwrite mode on/off
    Ctrl-U      escape            - delete whole input line
    Ctrl-P      cursor up         - get previous command
    Ctrl-N      cursor down       - get next command
    Ctrl-T                        - transpose characters
                page up           - scroll status window up ('Beyond Zork')
                page down         - scroll status window down ('Beyond Zork')

The history works differently in OS/2 beta 3.  When you press the up
or down arrow, Frotz looks for a line that begins with the characters
you have typed so far.  You can press the up and down arrow keys to
cycle through the matches.  Pressing any other key breaks the cycle,
so pressing up or down again will start a new search.

In addition, commands less than 4 characters are no longer recorded in
the history.

User-defined aliases:

    The OS/2 port of Frotz now supports user-defined aliases.  An
    alias is just a word that gets replaced by a string.  For example,
    in older Infocom games, you can alias 'x' to 'examine', and then
    type 'x box' instead of 'examine box'.  This can save you lots of
    typing.

    Aliases affect all input read by the 'read' routine.  In most
    games, this is just about everything (one exception is
    Bureaucracy's forms).  Aliases are case sensitive, but the game's
    parser is not.  So, you can use 'x' and 'X' for different aliases,
    or use 'x' for 'examine' and 'X' if you really want the word 'x'.

    You press Alt-A to bring up the alias menu.  It looks like this:
      Hot key -- Alias A)dd C)lear D)elete L)oad O)ff S)ave V)iew: _
    You should then press the first letter of your choice:

    A)dd
        Create an alias.  You will be prompted for an alias and its
        expansion.  The alias must be composed only of alphanumeric
        characters.  If the alias already exists, it will be replaced.

    C)lear
        Delete all aliases.  You will be prompted for confirmation.

    D)elete
        Delete one alias.  You will be prompted for the alias you want
        to delete.

    L)oad
        Load aliases from an initialization file (see below).  This
        does not erase the current aliases (unless the init file uses
        the 'clear' command).

    O)n or O)ff
        Turn alias expansion on or off.  If alias expansion is
        currently on, this choice will say "O)ff"; if it's off, the
        choice will say "O)n".  This does not affect the alias table.
        Defining a new alias automatically turns alias expansion on.

    S)ave
        Save the current aliases to an init file.  You will be
        prompted for the filename.

    V)iew
        List the contents of the alias table.

    Aliases can also contain parameters.  So, you can make aliases
    like 'dlu' (defined as 'look up %s in dictionary'), which expands
    'dlu fool's gold' to 'look up fool's gold in dictionary'.

    The parameters are introduced by a percent sign:
      %r  The rest of the input
      %s  Everything up to the next period
      %w  The next word
      %%  A single percent sign

    You can't have more than one %s or %r in an alias, and %w will not
    move past a period or comma.

Initialization Files:

    Aliases can be defined in initialization files.  Frotz
    automatically loads the file 'frotz.frc' from the directory
    defined by the HOME environment variable (or the current directory
    if HOME is not defined).  It then loads the file 'story.frc' from
    the current directory (where 'story' is the name of the game file,
    with the extension replaced by '.frc').

    You can also load init files while playing the game with the
    'Alt-A L' command.  The 'Alt-A S' command creates an init file.

    Init files can contain the following commands (one per line):

    alias ALIAS EXPANSION
        Define ALIAS as an alias for EXPANSION.  If ALIAS is already
        defined, it is replaced by the new one.

    unalias ALIAS
        Delete ALIAS from the alias table (if it exists).

    clear
        Delete all aliases.

    % COMMENT
        Any line that begins with a percent sign is a comment, and is
        ignored.  You cannot have partial-line comments;
        'alias x examine % comment' defines 'x' as an alias for
        'examine % comment'.

Command line options:

    -f #     set the foreground colour
    -b #     set the background colour
    -e #     set the emphasis colour
    -F #     set the foreground colour for reverse mode
    -B #     set the background colour for reverse mode

    -w #     set the screen width
    -h #     set the screen height
    -l #     set the left margin
    -r #     set the right margin
    -c #     set the number of context lines to keep when scrolling

    -u #     set the number of undo slots for multiple undo

    -o       monitor object movement
    -O       monitor object locating
    -a       monitor attribute assignment
    -A       monitor attribute testing

    -t       set the Tandy bit (see below)
    -x       enable abbreviations for older games (see below)

    @file    Read additional command line options from FILE (one per line)

    Colours range from 0 to 15.

    Frotz also looks for options in the environment variable FROTZOPT.

Questions and answers:

    Q: What is Frotz?
    A: Frotz runs text adventures which come in so-called story files:
       ZORK1.DAT, TRINITY.DAT, CURSES.Z5, JIGSAW.Z8, ARTHUR.ZIP etc.

    Q: Where can I find story files to use with Frotz?
    A: First, you can use the files from your original Infocom games. It
       is possible to play Atari ST, Amiga or Macintosh games on your PC
       once you manage to transfer the story files. Some people even
       extracted story files from old Atari 800, Apple II and C-64 disks!
       Second, there is also an increasing number of new games available
       on the Internet. Check the if-archive at ftp.gmd.de.

    Q: Why does Frotz stop with an error message?
    A: Your story file may be corrupt. Be sure to download story files in
       binary mode.

    Q: Is there a way to exit Frotz in emergency situations?
    A: Try ctrl-C or ctrl-break.  You may have to add the command
       "BREAK=ON" to your CONFIG.SYS.

    Q: What do I need to play graphic games?
    A: You need the DOS version of Frotz.  Sorry, this OS/2 version is
       strictly text-only.  However, the DOS version runs fine under OS/2.

    Q: What do I need for sound?
    A: You need the DOS version of Frotz.  Sorry, this OS/2 version
       doesn't support sounds yet.  I hope to add this in the future.

    Q: How can I send transscription to the printer?
    A: Type "PRN." as the file name. (Notice the '.', it's important.)

    Q: Why is it impossible to save or restore?
    A: When your story file is stored on a floppy disk, do not remove the
       disk during save and restore.

    Q: Why doesn't multiple undo work as often as it should?
    A: The number of undo slots is limited by your free memory.

    Q: Why do I get weird characters instead of accented letters?
    A: Activate code page 850 (consult your OS/2 manual).  Alternatively,
       the default code page 437 displays most important characters
       (e.g. French, German or Spanish letters) properly.

    Q: Why don't the number pad keys work in 'Beyond Zork'?
    A: NumLock must be set.

    Q: How can I scroll the status window in 'Beyond Zork'?
    A: Use page up/down instead of cursor up/down.

    Q: What is this Tandy bit?
    A: Some old Infocom games were sold by the Tandy Corporation. These
       games behave slightly different when this bit is set. For example,
       'The Witness' gets censored: bastards turn into idiots, private
       dicks into private eyes and so on.

    Q: How does Frotz add abbreviations to older games?
    A: In beta 5, the -x command line option is now implemented via
       the user-defined alias feature.  It simply adds the following aliases:
         g  again
         x  examine
         z  wait
       Because of this, -x is now redundant and may go away in the future.

List of fatal errors:

    - "Byte swapped story file"
    - "Call to illegal address"
    - "Call to non-routine" [1]
    - "Cannot open story file"
    - "Division by zero"
    - "Error reading save file"
    - "Illegal attribute number"
    - "Illegal object number" [2]
    - "Jump to illegal address"
    - "No such property"
    - "Out of memory"
    - "Print at illegal address"
    - "Stack overflow" [3]
    - "Store out of dynamic memory"
    - "Story file read error"
    - "Text buffer overflow"
    - "Unknown opcode"
    - "Unsupported Z-code version"

    [1] The first byte of a routine must be less than 16.
    [2] In V4 and above, object numbers > 2000 are considered illegal.
    [3] This condition is only checked on every call instruction.
