-- BcdTabDefs.Mesa  Edited by Sandman on January 3, 1979  8:55 AM
-- Copyright  Xerox Corporation 1979, 1980
DIRECTORY
  BcdDefs: FROM "bcddefs" USING [
    CTIndex, EXPIndex, FTIndex, IMPIndex, MTIndex],
  Table: FROM "table" USING [Base, Index, Limit];
BcdTabDefs: DEFINITIONS =
  BEGIN
  -- Hash Table
  HVLength: PRIVATE INTEGER = 71;
  HVIndex: TYPE = INTEGER [0..HVLength);
  HTRecord: TYPE = RECORD [
    link: HTIndex,
    offset: CARDINAL];
  HTNull: HTIndex = FIRST[HTIndex];
  HTIndex: TYPE = INTEGER [0..Table.Limit);
  -- Semantic Table
  STRecord: TYPE = RECORD [
    filename, assigned: BOOLEAN,
    hti: HTIndex,
    imported, exported: BOOLEAN,
    link: STIndex,
    impi: BcdDefs.IMPIndex,
    impgfi: CARDINAL,
    body: SELECT type: * FROM
      unknown => NULL,
      local => [
        info: Table.Index, --BcdTreeDefs.TreeIndex,
        context: CXIndex],
      external => [
        map: STMap,
        pointer: SELECT ptype: * FROM
          instance => [sti: STIndex],
          file => [fti: BcdDefs.FTIndex],
          ENDCASE],
      ENDCASE];
  STNull: STIndex = LAST[STIndex];
  STIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO STRecord;
  STMap: TYPE = RECORD [
    SELECT type: * FROM
      unknown => NULL,
      config => [cti: BcdDefs.CTIndex],
      module => [mti: BcdDefs.MTIndex],
      interface => [expi: BcdDefs.EXPIndex],
      ENDCASE];
  -- Context Table
  CXRecord: TYPE = RECORD [
    link: STIndex];
  CXNull: CXIndex = LAST[CXIndex];
  CXIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO CXRecord;
  END.