
<<CatchFormat.mesa, Edited by>>
<<JGS,   11-Nov-81 15:53:26>>
<<Sweet, July 19, 1982 12:02 pm>>
<<Satterthwaite November 27, 1985 2:46:13 pm PST>>

DIRECTORY
PrincOps: TYPE USING [BytePC, FrameSizeIndex, localbase, PrefixHandle];

CatchFormat: DEFINITIONS = {

Codebase: TYPE = PrincOps.PrefixHandle;

CatchAction: TYPE = CARDINAL;
cReject: CatchAction = 0;
cResume: CatchAction = 1;
cEnable: CatchAction = 2;
cExit: CatchAction = 3;

CatchIndex: TYPE = NAT;
CatchNull: CatchIndex = CatchIndex.LAST;

EnableItem: TYPE = RECORD[
start: PrincOps.BytePC,
length: CARDINAL,
index: CatchIndex,
alsoNested: BOOL];

EnableIndex: TYPE = CARDINAL[0..CARDINAL.LAST/EnableItem.SIZE);

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.FrameSizeIndex = 1;

}.
