-- 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.