This is a list of possible errors reported by sources in the
directory miro/src/lib/structures. All errors are reported by making
calls to one of the error routines in miro/src/lib/parse/error.c. The
errors are broken down by the source file they are reported from.

N.B. The "Programmer Errors" below are only tested for if the source
files are compiled with the macro DEBUG defined.

============================= Semantic Errors ==========================

ARROW.C

"an ARROW with sysname = XX already exists"
   Each ARROW in the IFF file must have a different value for the
   'sysname' property name. Each extra occurrence of an ARROW with
   sysname = XX will cause this error to be reported.

"this ARROW does not connect a user box to a file box"
   The 'role' attribute of the 'from' box must be "user", and the
   'role' attribute of the "to" box must be "file"; if not, this
   error is reported.

"arrow parity 'foo' should be either 'pos' or 'neg'"
   The value associated with the property name "parity" must be either
   the string "pos" or the string "neg"; if it isn't, this error is
   reported.

BOX-RELATIONS.C

"child box XX has a different role from its parent"
   Each INSIDE relation specifies sysnames of parent and child
   box(es). These boxes must always have the same roles; if they do
   not, this error is reported; XX is the sysname of the child box.

BOX.C

"a BOX with sysname = XX already exists"
   Each BOX in the IFF file must have a different value for the
   'sysname' property name. Each extra occurrence of an BOX with
   sysname = XX will cause this error to be reported.

"box role 'foo' should be either 'user' or 'file'"
   The value associated with the property name "role" must be either
   the string "user" or the string "file"; if it isn't, this error is
   reported.

"box with sysname XX does not exist"
   When some property value is an integer corresponding to the sysname
   of some box, that box must have been declared with that sysname in
   the input file. This error is reported if some box is referenced
   (by its sysname) without such a box being declared.

============================= Programmer Errors ==========================

"arrow.c: actual # of pos arrows = XX"
   The program keeps two separate counts of the number of positive
   arrows. The counts are compared for foolproofness; if they are
   different, this message is generated.

"arrow.c: actual # of neg arrows = XX"
   The program keeps two separate counts of the number of negative
   arrows. The counts are compared for foolproofness; if they are
   different, this message is generated.

"arrow.c: prop_val_type should be IdValType instead of 0xXX"
   The ConvertParity() routine assumes its first argument is a pointer
   to a PropVal with PropValTypeOf IdPValType; if it isn't, this error
   is reported; XX is the hex representation of the encountered PropValType.

"box-relations.c: current parent not initialized adding child index XX"
   Before each call to SetChildOfContainment() is made to assert
   that some child box is directly contained in some parent box,
   that parent box must be "initialized" via a call to the function
   SetParentOfContainment(). If that call is not made, this error
   will be reported. Actually, it seems that only the *first* parent
   must be initialized, so this test is unlikely to fail.

"box.c: actual number of boxes is XX"
   The program keeps two separate counts of the number of boxes of
   each role; this error is generated if NumberOfBoxes(role) is not
   exactly the value XX. This error can only occur if the debug mode
   that generates a full list of boxes is turned on.

"box.c: actual number of atomic boxes is XX"
   The program keeps two separate counts of the number of atomic boxes
   of each role; this error is generated if NumberOfAtomicBoxes(role)
   is not exactly the value XX. This error can only occur if the debug
   mode that generates a full list of boxes is turned on.

"box.c: prop_val_type should be IdValType instead of 0xXX"
   The ConvertBoxRole() and ConvertBoxName() routines assume their
   first arguments are pointers to PropVal's with PropValTypeOf
   IdPValType; if they aren't, this error is reported; XX is the hex
   representation of the encountered PropValType.

"sysname-hash.c: AddSysName(): don't know SysNameDropType XX"
   The function AddSysName() only understands certain values for its
   second argument, which is of type SysNameDropType. The values it
   understands are BoxDrop and ArrowDrop. Any other values passed as
   the second argument to AddSysName() cause this error to be
   reported; XX is the value of the incorrect argument.
