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;
RefLitIndex: TYPE = BcdDefs.RefLitIndex;
RefLitItem:
TYPE =
RECORD [
referentType: TypeIndex,
offset, length: CARDINAL];
RefLitList: TYPE = RECORD [SEQUENCE length: NAT OF RefLitItem];
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];
}.