-- file RTBcd.Mesa
-- last modified by Satterthwaite, 12-Mar-82 11:48:42

DIRECTORY
  BcdDefs: TYPE USING [SGIndex, RefLitIndex, TypeIndex, VersionStamp],
  RCMap: TYPE USING [Base, Index],
  Symbols: TYPE USING [SEIndex];

RTBcd: DEFINITIONS = {	-- BCD extensions for RT info
 
  VersionID: CARDINAL = 03122;
  
 -- rt segment headers

  RTHeader: TYPE = RECORD [
    versionIdent: CARDINAL ← VersionID,
    refLitTable: RTBase RELATIVE POINTER TO RefLitList,
    litBase: RTBase RELATIVE POINTER,	-- to uninterpreted words
    litLength: CARDINAL,
    rcMapBase: RTBase RELATIVE RCMap.Base,
    rcMapLength: CARDINAL,
    stampTable: RTBase RELATIVE POINTER TO StampList,
    typeTable: RTBase RELATIVE POINTER TO TypeList];
    
  RTBase: TYPE = LONG BASE POINTER TO RTHeader;
  
  
 -- REFs to literals and ATOMs
 
  RefLitIndex: TYPE = BcdDefs.RefLitIndex;

  RefLitItem: TYPE = RECORD [
    referentType: TypeIndex,
    offset, length: CARDINAL];
    
  RefLitList: TYPE = RECORD [SEQUENCE length: NAT OF RefLitItem];

 -- types
 
  TypeIndex: TYPE = BcdDefs.TypeIndex;

  TypeItem: TYPE = MACHINE DEPENDENT RECORD [
    table (0): BcdDefs.SGIndex,
    sei (1: 0..13): Symbols.SEIndex,
    canonical (1: 14..15): BOOLEAN,
    ct (2): CTInfo,
    ut (3): UTInfo,
    rcMap (5): RCMap.Index];
       
  TypeList: TYPE = RECORD [SEQUENCE length: NAT OF TypeItem];
     
  -- auxiliary type info
  
  CTInfo: TYPE = RECORD [index: CARDINAL];	-- offset of string from litBase
  
  StampList: TYPE = RECORD [SEQUENCE limit: [1..LAST[NAT]] OF BcdDefs.VersionStamp];

  StampIndex: TYPE = RECORD [NAT];		-- index in StampList
  AnyStamp: StampIndex = [0];
    
  UTInfo: TYPE = MACHINE DEPENDENT RECORD [
    version (0): StampIndex,			-- AnyStamp => sei good in any table
    sei (1): Symbols.SEIndex];

  }.