QIS OASIS Parser Error Messages

last revised 01/05/2006



Reporting Error Position in the OASIS File

When an OASIS read error is triggered the error message is set and the corresponding error number is returned to the client. If the byte count from the start of the offending record to the byte where error occured is known, then following message is appended to the error message.

"Record starts at file offset _FILE_OFFSET_. Record bytes are byte1 byte2..."

where

_FILE_OFFSET_

    is the offset in the file where error occured. This offset is the offset in the real OASIS file if error is trapped in scan mode. This offset is the combined offset of the real OASIS and uncompressed CBlocks if error is trapped in load mode.

byte1 byte2...

    are the bytes in HEX from the start of the record till the offset where error occured.


MAGIC-BYTES

To any of the error messages incurred while reading the magic-bytes sequence

"Action - While reading <magic-bytes> sequence."

If the magic-bytes sequence is missing then the following error message is issued:

OASIS <magic-bytes> element is missing. File is not a valid OASIS format.

START RECORD

To any errors incurred while reading/parsing the START record the following error message is appended:

  Action - While reading START record.

If the START record does not follow the magic-bytes specified then following error message is issued:

  START record does not immediately follow <magic-bytes> sequence.

If value of the unit param in START record is found to be negative then following error message is issued:

  Unit specified in the START record cannot be negative.

If value of the unit param in START record is found to not to be a number (i.e. it should be a double real) then following error message is issued:

  Unit specified in the START record cannot be NAN[not a number].

The following error is not reported since OASIS reader does not rely on its presence:

If offset is nonzero and the table is flagged as strict, the presence of a 'stray' record of that type located discontiguosly from its tabular group and any records which fail to use reference number access for that class of objects.

PAD RECORD

If a PAD record is encountered before the START record this means either:

  1. <magic-bytes> are not found at the start of the OASIS file:
    "OASIS <magic-bytes> element is missing. File is not a valid OASIS format.
    Action - While reading <magic-bytes> sequence."


  2. START record does not follow <magic-bytes> sequence:
    START record does not immediately follow <magic-bytes> sequence.
    Action - While reading START record

PAD records after END record are ignored the QIS OASIS reader.


MODAL VARIABLES

Whenever a record refers to a modal variable which has not been defined

  Syntax/Semantics Error: Modal variable undefined. (MODAL_VARIABLE_NAME)

where

MODAL_VARIABLE_NAME is one of the following:

repetition placement-x placement-y placement-cell
layer datatype textlayer texttpe
text-x text-y text-string geometry-x
geometry-y xy-mode polygon-point-list path-halfwidth
path-point-list path-start-extension path-end-extension ctrapezoid-type
circle-radius last-property-name last-value-list  

END RECORD

The END record is used by OASIS reader when the table offset is part of the END record. The END record consists of the last 256 bytes of the OASIS file.

If the start record indicates that the table offset is located in the END record then the parser expects to find an END record at the position [file size = 256] because the END record is 256 bytes in length. If it doesn't find the END record where expected the following error message is produced:

     END record not found at filesize - 256 offset.

If the reader could not get to the END record (due to a file IO or memory error) then a memory error or file IO error is generated and the error message END record not found at filesize - 256 offset is appended to the IO or memory error.


CBLOCK

If number of bytes returned after decompression does not match the uncomp-byte-count parameter in CBLOCK record then following error is issued:

  Uncompress Error: Corrupt CBLOCK found. 
  CBLock decompressed bytes does not match the param uncomp-byte-count.

If a CBLOCK record is nested within another CBLOCK record then following error message is issued:

  CBLOCK record cannot be nested in another CBLOCK record.

CTrapezoids

There are 26 different "types" of CTrapezoids and they have different geometric constraints. The parser checks the type against the basic geometry and returns an error if there is a mismatch.


If the ctrapezoid type specified is out of the range [0-25]

    CTrapezoid type specified is out of range [0-25]
.

If one of the types [0-3] has width less than height(w<h)

    CTrapezoid type 0-3 cannot have width less than height.

If one of the types [4-7] has width less than 2*height(w<2h)

    CTrapezoid type 4-7 cannot have width less than twice the height.

If one of the types [8-11] has height less than width(h<w)

    CTrapezoid type 8-11 cannot have height less than width.

If one of the types [12-15] has height less than 2*width(h<2w)

    CTrapezoid type 12-15 cannot have height less than twice the width.

If one of the types [16-19, 22-23 and 25] has height specified

    CTrapezoid type 16-19, 22-23 and 25 cannot specify height.

If one of the types [20-21] has width specified

    CTrapezoid type 20,21 cannot specify width.

Zero Area Trapezoids

CTrapezoids's are not checked for zero area and are not reported as errors.


Trapezoids

If a trapezoid has deltas(non-parallel edges) such that they form an invalid trapezoid

    Trapezoid deltas are invalid causing non-parallel edges 
    to cross or not to fit in the bounding box.

Trapezoid's are not checked for zero area and are not reported.


Polygons

If a polygon has fewer than 3 vertices

  Polygon cannot have less than 3 vertices.

The following errors are not checked or reported:

    Self-intersecting polygons

    Re-entrant polygons

    Polygons with zero-area regions


Paths

a path may not have less than 1 vertex

  Path should at least have 1 vertex.

Rectangles

If a rectangle is flagged as a square (S=1) a height may not be specified. If it is:

  Square rectangle cannot specify height.

Rectangle's with zero area are replaced with width and height = 1 database tick.


Text

If a text reference number does not point to a valid TEXTSTRING record

 TEXT reference number REFNUM does not have corresponding TEXTSTRING record.

where

    REFNUM is the reference number specified in TEXT record.


PLACEMENT (reference)

If an invalid reference number with no corresponding CELLNAME is encountered in PLACEMENT record

 Use of reference number with no corresponding CELLNAME record
 is not permitted in PLACEMENT record. 
 Action: While calculating extents.

The above message is trapped at the end of scanning phase, while calculating extents.


Recursive Cell References are not reported. (this will be dealt with in the near future ...)


If the magnification value is negative or zero

  Magnification specified in the PLACEMENT record 
  cannot be negative or zero.

If the magnification or angle value is NAN

  Magnification specified in the PLACEMENT record
  cannot be NAN[not a number].
 Angle specified in the PLACEMENT record 
 cannot be NAN[not a number]

References to External Cell Definitions?

The OASIS specification allows placement references to external CELL records which are not defined in the file being read. QIS does not support this and treats such references as if the cell is undefined.


CELL

If an invalid reference number with no corresponding CELLNAME is encountered in CELL record

  Use of reference number with no corresponding CELLNAME record
   is not permitted in CELL record. Action: While calculating extents.

The above message is trapped at the end of scanning phase, while calculating extents.

Multiple cell records referering to the same cell name are not reported. In the current version, all the data belonging to all the data defined by the same cell name is grouped. (this is probably not the best behavior!)

TEXTSTRING

If two TEXTSTRING records in the same file with the same reference number but different text strings are encountered

  Two TEXTSTRING records with the same reference but different names
   encountered [TEXTSTRING1, TEXTSTRING2].

    where

    TEXTSTRING1 and TEXTSTRING2 are the text strings which refer to the same reference number.


If two TEXTSTRING records in the same file with the same text string but different reference numbers are encountered then nothing is reported.

If both the record types 5 (Implicit) and 6(Explicit) appear in the same OASIS file

  The appearance of TEXTSTRING records 5 and 6 is not permitted.

CELLNAME

Cell name associates a cell's name with a unique number so that references to that cell are compact. There are two distinct approaches to assigning the unique reference number - implicit (essentially automatic based on the order the cells are defined) and explicit which assigns the number directly. You cannot have both types of CELLNAME records in the same OASIS file.

If two CELLNAME records are encountered in the same file with the same cell name but different reference numbers

  Two CELLNAME records with the same name but different references
   encountered [CELLNAME].

where

    CELLNAME is the cell name which is repeated with different reference numbers.


If two CELLNAME records in the same file with the same reference number but different cell names are encountered

  Two CELLNAME records with the same reference but different names
  encountered [CELLNAME1, CELLNAME2].

where

    CELNAME1 and CELLNAME2 are the cell names, which refer to the same reference number.

If a CELLNAME record of type 3 (Implicit) and one of type 4(Explicit) appear in the same file

  The appearance of CELLNAME records 3 and 4 is not permitted.

OASIS Data Types

Point-lists

If a polygon point list type is out of range[0-5]

    Polygon point-list type is out of range[0-5].

If a path point list type is out of range[0-5]

    Path point-list type is out of range[0-5].


Real numbers

If the real type is out of range[0-7]

    Record real value type is out of range[0-7].

If denominator specified as part of the real number is zero for types [2-5] then following corresponding error message is issued

    Record real value, type 2, divide-by-zero exception.
    Record real value, type 3, divide-by-zero exception.
    Record real value, type 4, divide-by-zero exception.
    Record real value, type 5, divide-by-zero exception.

Repetitions

If a repetition type is out of range [0-11]

    Record repetition type is out of range[0-11].

If a repetition type 0 is first repetition type used within a cell

    Repetition type 0 cannot be the first repetition type used within a cell.


G-Deltas

If the g-delta type(formed by first 3 bits) is not a valid type

    Record delta-g type is out of range[0-7].

Unused Record Types

The following record types are not displayed or otherwise processed by the QIS engine so, except for problems with modal variables, there is no checking of potential fatal errors.

CIRCLE, XNAME, XELEMENT, XGEOMETRY, PROPERTY, PROPSTRING, PROPNAME

The OASIS reader parses these records but logical errors enumerated below are not reported and OASIS reader ignores all these errors.


    PROPERTY (error will not be reported)

    Invalid reference number for which there is no corresponding PROPNAME record


    PROPSTRING (error will not be reported)

    Two PROPSTRING records in the same file with the same number but different names

    The appearance of both record types 9(implicit) and 10(explicit) in the same OASIS file


    PROPNAME (error will not be reported)

    Two PROPNAME records in the same file with the same number but different names

    Two PROPNAME records in the same file with the same name but different numbers

    The appearance of both record types 7(implicit) and 8(explicit) in the same OASIS file