-- LoadStateFormat.mesa
-- Last Modified by Sandman,  June 30, 1980  4:58 PM 
-- Copyright  Xerox Corporation 1979, 1980

DIRECTORY
  AltoDefs USING [PageSize],
  AltoFileDefs USING [FP, vDA],
  ControlDefs USING [GFTIndex];

LoadStateFormat: DEFINITIONS =
  BEGIN

  LoadState: TYPE = POINTER TO LoadStateObject;

  AltoVersionID: CARDINAL = 01280;
  PilotVersionID: CARDINAL = 01290;

  LoadStateObject: TYPE = MACHINE DEPENDENT RECORD [
    versionident: CARDINAL,
    nBcds: CARDINAL,
    bcds: ARRAY [0..MaxBcds) OF BcdObject,
    gft: ARRAY [0..0) OF ModuleInfo];

  ModuleTable: TYPE = DESCRIPTOR FOR ARRAY OF ModuleInfo;

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

  ModuleInfo: TYPE = MACHINE DEPENDENT RECORD [
    resolved: BOOLEAN, config: ConfigIndex, gfi: ControlDefs.GFTIndex];

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

  BcdObject: TYPE = MACHINE DEPENDENT RECORD [
    fill: [0..37B] ← 0,
    exports, typeExported: BOOLEAN,
    pages: [1..256],
    body:
      SELECT type: * FROM
	alto => [fp: AltoFileDefs.FP, da: AltoFileDefs.vDA, base: CARDINAL],
	pilot => [base: LONG POINTER],
	ENDCASE];

  Bcd: TYPE = POINTER TO BcdObject;

  MaxBcds: CARDINAL = (AltoDefs.PageSize - 2)/SIZE[BcdObject];
  BcdArrayLength: CARDINAL = SIZE[BcdObject]*MaxBcds;

  BcdPageCount: TYPE = [1..256];

  END...