These are the files used to make the executioner:

hence.h:  Definitions for all the hence data structures.
htypes.h: More randoms definitions
eval.h:   Definitions of flags for eval_param and eval_exp calls
rbhelp.h: Definitions of subroutines in rbhelp.c.
yucky.h:  Definitions of real yucky macros used by eval.c

grparse.l &
grparse.y: Lex & yacc scripts for parsing graphs.  These should
           soon be obsolete thanks to Keith.
grparse.inc: The output of lex on grparse.l.  Included by 
             y.tab.c (output of yacc on grparse.y)

The following goes into ~plank/lib/$ARCH/libmaster.a.  They
are routines which are solely for the master process of
the executioner.

anc.c:     Code for properly ordering ancestors, and for figuring
           out which ancestors send what information.
arc.c:	   Code for manipulating arcs.
check.c:   Does checking of graph for cycles/bad special node pairs.
cost.c:    Reads cost matrix & does the "load balancing"
execute.c: Main loops and workings of the executioner
manip.c:   Code for some random graph manipulation.
master.c:  Command line argument evaluation & main() definition.
node.c:    Mixes both parsing and code for manipulating nodes.
y.tab.c:   Yacc output of grparse.y

The following goes into ~plank/lib/$ARCH/libslave.a.  They are
routines which are solely for the slave processes of the 
executioner.

req.c:	 Code for requesting and servicing requests for arrays 
         between slave nodes.
slave.c: The main driver code for the slave nodes.
wrap.c:  Code for argument checking and type coersion -- these
         are calls made from the automatically generated wrappers.

The following goes into ~plank/lib/$ARCH/libhence.a.  They are
routines which are used by both the master and the slave
processes.

exp.c:   Code for manipulating (but not evaluating) expressions
eval.c:  Code for evaluating expressions
array.c: Code for manipulating array expressions (as opposed to
         array parameters)
param.c: Code for manipulating parameters
pvmhelp.c: Code for sending/receiving everything (constants, 
           expressions, params, etc.) in pvm.
print.c: Code for printing most of the data structures.  Mostly
         used for debugging.
trace.c: Code for emitting trace information.
type.c:  Code for doing type coersion.
hstrings.c: Common strings used in the executioner.
rbhelp.c: This is code which defines useless procedures which 
          help lint do type checking on the many types of 
          red-black trees which hence uses.

Oh, by the way, if you want to use lint on this stuff, look in
~plank/bin/jlint.  I've tried to make it so that the output from
jlint *.c is useful (i.e. doesn't contain much garbage which 
only serves to keep you from seeing useful information).

Both the master & slave executables are linked with a bunch of
libraries:

~plank/lib/$ARCH/librb.a:  This defines routines for red-black
    trees, which are binary, balanced trees.  They have the 
    advantage that they're general purpose, sorted entities 
    which have no size limits and guarantee log n time for
    all operations.  See ~plank/src/rb/README for more detail
    on the red-black tree operations.
~plank/lib/$ARCH/libdl.a:  This defines routines for doubly
    linked lists.  Their use is like rb-trees.
~plank/lib/$ARCH/liballoc.a:  This defines i_malloc and i_free, 
    which were written by Bob to help detect bad memory usage
    and give more information than "Seg fault -- core dumped".
~manchek/pvm_public/$ARCH/libpvm.a:  The pvm library.



