Source code for Scheme engine
and "Lists of Lists"

Copyright 1996 by Andrew Plotkin (erkyrath@netcom.com)
This source code may be copied and distributed freely. The
Scheme interpreter source may be freely used, modified, and
incorporated into other works.

There are five Inform source files in this archive: 

zlisp.inf: simple execution shell
lists.inf: game source for the competition entry itself
lists-manual.inf: the manual used by the competition entry
zlisp-core.inf: Scheme interpreter
zlisp-funs.inf: functions used by Scheme interpreter

The Scheme interpreter itself is in zlisp-core.inf and zlisp-funs.inf.
(Please don't tell me I should rename them "zscheme" -- it's not worth
the effort.) Note that zlisp-core.inf includes zlisp-funs.inf.

To compile the interpreter on its own, just compile zlisp.inf. As you'll
note, it's just a Main() function which calls LispLoop(), the top-
level function of the interpreter, which is defined in zlisp-core.inf.
This does not include the Inform libraries.

To compile "Lists and Lists" (my competition entry per se), compile
lists.inf. You'll note that this calls LispLoop(), in the before:Push
clause of the green button, just where you'd expect. This file includes
zlisp-core.inf, of course, and also includes lists-manual.inf, the
manual, which was big enough that I kept it in a separate file.

This should be enough exemplery for you to use the interpreter in your
own Inform programs, should you desire. 

The interpreter allocates a huge array to act as the Scheme memory
heap. You should use $MAX_STATIC_DATA=13000 at least -- more if your
game is large.

This code has only been compiled under Inform 5.5. I'm sure the 
interpreter would make a great link module, but you'll have to do it
yourself.

Functions in the interpreter interface:

LispLoop(): Call this to run the interpreter. It will exit when
the user types ":q".

LispReset(): Call this to reset the interpreter.

LispEscapeCodes(): Define this in your own code to define extra
escape codes (the engine only defines ":q", ":e", ":c", and ":g".)
It must be defined before you include zlisp-core.inf.

