This is ~miro/src/bin/cpc, the Constraint Picture Compiler.

   attr.h		type definitions for attribute values and attr lists
   box-type.[ch]	module for creating BoxType objects
   compile.[ch]		module for compiling a constraint picture (PictObj)
   extract-objs.[ch]	module for extracting info from an IFF parse tree
   hds.[ch]		module for creating/manipulating reps of IPQL's HDS's.
   hints.[ch]		module for reading and storing cpc(1) hint files
   id-table.[ch]	module for creating/managing a hash table of ID's
   interval.[ch]	module for computing/manipulating value intervals
   objs.[chg]		module for creating/storing picture objects
   parse-pred.[chg]	module for parsing box predicates
   pred.[ly]		Lex/Yacc files describing box predicate language
   rank.[ch]		module for ordering/ranking constraint elements
   top.[chg]		top-level control file for cpc(1)
   var.h		type definitions for variables in box predicates

The steps taken by cpc(1) are:

FROM WITHIN TOP.C:

* Read and parse the "type" file
  - top.ProcessIffFile()
* Build the type tree
  - box-type.BuildTypeTree()
* Read and parse the input IFF file
  - top.ProcessIffFile()
* Read and process the "hint" file
  - hint.ProcessHintFile()
* If any errors have occurred, abort
* Open output file
* Compile picture
  - compile.CompilePict()

FROM WITHIN COMPILE.C:

* Build adjacency list for each object
  - compile.BuildAdjacencies()
* Check that each starred box is contained in some other box
  - compile.StarredBoxNotContained()
* Check that the containment graph is acyclic
  - compile.ContainmentCycle()
* Mark each box as either a "left" box or a "right" box, checking that no box
  gets more than one mark
  - compile.MarkLeftRight()
* Check that the type of each attribute agrees with the type of the value to
  which it is compared
  - compile.CheckTypes()
* Initialize various fields of each BoxType structure according to the hints
  provided by the hint file
  - compile.InitBoxTypeValues()
* Forms the set of intervals associated with each box predicate, checking that
  no interval is empty
  - interval.FormAllIntervals()
* If any of the previous steps resulted in an error, abort
* Order the objects according to the heuristics of the hint file
  - rank.OrderObjs()
