-- PilotLoadStateFormat.mesa
-- Last Modified by McJones,  April 18, 1980  1:26 PM 
-- Last Modified by Paul Rovner, 4-May-82  9:29:27 

DIRECTORY
  PrincOps USING [GFTIndex];

PilotLoadStateFormat: DEFINITIONS =

  BEGIN

  GFTIndex: TYPE = PrincOps.GFTIndex;
  
  LoadState: TYPE = LONG POINTER TO LoadStateObject;

  PilotVersionID: CARDINAL = 03302;

  LoadStateObject: TYPE = MACHINE DEPENDENT RECORD [
    versionident: CARDINAL,
    fill: [0..LAST[CARDINAL]/(LAST[ConfigIndex]-FIRST[ConfigIndex]+1)] ← 0,
    nBcds: ConfigIndex,
    gft:   ModuleTable,
    bcds: BcdTable];

  ConfigIndex: TYPE = [0..377B];
    NullConfig: ConfigIndex = LAST[ConfigIndex];

  ModuleTable: TYPE = ARRAY GFTIndex OF ModuleInfo;

  ModuleInfo: TYPE = MACHINE DEPENDENT RECORD [
    fill0: [0..(LAST[CARDINAL]/(LAST[ConfigIndex]-FIRST[ConfigIndex]+1))/2] ← 0,
    resolved: BOOLEAN,
    config: ConfigIndex,
    fill1: [0..LAST[CARDINAL]/(LAST[GFTIndex]-FIRST[GFTIndex]+1)] ← 0,
    gfi: GFTIndex];

  NullModule: ModuleInfo = [resolved: FALSE, config: NullConfig, gfi: 0];

  BcdTable: TYPE = RECORD[seq: SEQUENCE length: ConfigIndex OF BcdInfo];

  BcdInfo: TYPE = MACHINE DEPENDENT RECORD [
    SELECT OVERLAID * FROM
      ptr =>   [origin: LONG POINTER TO UNSPECIFIED],
      flags => [fill: [0..LAST[CARDINAL]/4] ← 0,
                exports, typeExported: BOOLEAN]
     ENDCASE];
     
  Bcd: TYPE = LONG POINTER TO BcdInfo;

  END.