This is the ~/thesis/src/bin/ipql directory. It contains Common Lisp source
code for implementing the IPQL language interpretter.

   func-ops.{cl,fasl}	functional operations module
   hds.{cl,fasl}	hierarchical data structures classes/module
   ipql.{cl,fasl}	IPQL language functions (top-level module)
   iter.{cl,fasl}	HDS iterators module
   objs.{cl,fasl}	picture object type/functions

To use the IPQL interpretter, follow these steps:

1. Start up a Common Lisp process from this directory (or make it the
   "current" directory from within Common Lisp). From within gnu-emacs, this
   can be done by using "M-x cd" followed by "M-x allegro". From within
   allegro CL, this is done with (chdir "<dir-name>"). For example, we could
   use (chdir "~/miro/src/bin/ipql") to change to this directory.
2. Load the file ipql.fasl in this directory (this will cause all of the other
   fasl files to autoload). Alternatively, load any constraint that "requires"
   the ipql module.
3. Create a "loadable" instance from an IFF file. Use the "iff2ipql" script to
   translate an IFF file into a Lisp ".l" file. To translate an IFF file
   created by the Miro editor, first run "iff2ciff" to compress each entry
   onto one line; pipe the output into "iff2ipql" to convert it. After the
   ".l" file has been created, it can be compiled for faster loading.
4. Type or load a constraint file. This constraint should contain the
   LOAD-INSTANCE function. That function will prompt you for a filename; give
   the name of the file created in step 3.

A constraint consists of the following parts; see the examples in
"~/miro/iff/ipql/constraint/".

1. (new-constraint) ; initialize the lists of HDS's (there are 4 in all)
2. DEFVAR statements for declaring HDS variables
3. HDS construction functions
4. (load-instance)  ; asks user for name of instance file and loads it
5. DEFVAR statements for declaring constraint variables
6. CONSTRAINT-BEGIN, THICK, THIN-RANGE, THIN, and CONSTRAINT-END statements
   to implement the constraint.

