-- CatchFormat.mesa, Edited by -- JGS, 11-Nov-81 15:53:26 -- Sweet, July 19, 1982 12:02 pm DIRECTORY PrincOps USING [BytePC, FSIndex, localbase, PrefixHandle]; CatchFormat: DEFINITIONS = BEGIN Codebase: TYPE = PrincOps.PrefixHandle; CatchAction: TYPE = CARDINAL; cReject: CatchAction = 0; cResume: CatchAction = 1; cEnable: CatchAction = 2; cExit: CatchAction = 3; CatchIndex: TYPE = NAT; CatchNull: CatchIndex = LAST[CatchIndex]; EnableItem: TYPE = RECORD [ start: PrincOps.BytePC, length: CARDINAL, index: CatchIndex, alsoNested: BOOLEAN]; EnableIndex: TYPE = CARDINAL[0..LAST[CARDINAL]/SIZE[EnableItem]); EnableTableBody: TYPE = RECORD [SEQUENCE count: EnableIndex OF EnableItem]; EnableTable: TYPE = Codebase RELATIVE POINTER TO EnableTableBody; EnableHandle: TYPE = LONG POINTER TO EnableTableBody; -- if et[i].alsoNested = TRUE for any i IN [0..et.count) then -- et+SIZE[EnableTableBody[et.count]] is a valid EnableTable CatchEVBody: TYPE = RECORD [SEQUENCE count: CatchIndex OF PrincOps.BytePC]; CatchEV: TYPE = Codebase RELATIVE POINTER TO CatchEVBody; nullCatchEV: CatchEV = LOOPHOLE[0]; CatchEVHandle: TYPE = LONG POINTER TO CatchEVBody; -- word after entry vector is CatchEV*2 sigOffset: CARDINAL = PrincOps.localbase + 1; msgOffset: CARDINAL = PrincOps.localbase + 2; defaultFsi: PrincOps.FSIndex = 1; END.