-- PDFileFormat.mesa
-- Created March 14, 1983
-- Michael Plass, April 29, 1983 11:01 am
-- Tim Diebert, 25-Apr-86 13:39:37
 
PDFileFormat: DEFINITIONS = BEGIN
   passwordValue: CARDINAL = 125252B;
   versionValue: CARDINAL = 1B;
   DeviceCode: TYPE = MACHINE DEPENDENT {
      invalid(0),
      raven300(1),
      raven384(2),
      o3(3),
      plateMaker(4),
      o5(5),
      puffin(6),
      colorVersatec(7),
      versatec(8),
      color400(9),
      c150(10),
      d4020(11),
      bw400(12),
      o13(13), o14(14), o15(15),
      last(LAST[CARDINAL])
      };
   Herald: TYPE = MACHINE DEPENDENT RECORD [
      password(0): CARDINAL   ←  passwordValue,
      version(1): CARDINAL   ←  versionValue,
      deviceCode(2): DeviceCode   ←  invalid,
      sResolution(3): CARDINAL,
      fResolution(4): CARDINAL,
      imageSSize(5): CARDINAL,
      imageFSize(6): CARDINAL,
      bandSSize(7): CARDINAL,
      maxLoadWord(8): LONG CARDINAL,
      copies(10): CARDINAL
      ];
   Typ: TYPE = MACHINE DEPENDENT {control(0), imaging(2)};
   ImagingCom: TYPE = MACHINE DEPENDENT {
      maskSamplesRef(0),
      maskRunGroupRef(1),
      maskRectangle(2),
      maskTrapezoid(3),
      maskRunGroup(4),
      maskSamples(5),
      colorSamples(6)
      };
   ControlCom: TYPE = MACHINE DEPENDENT {
      startImage(0),
      setPriority(1),
      setColorInk(2),
      setColorClear(3),
      setColorTile(4),
      endBand(5),
      endDocument(6),
      storeLoad(7),
      deviceCommand(8)
      };
   transparentFlag: [0..1] = 1;
   opaqueFlag: [0..1] = 0;
   Command: TYPE = MACHINE DEPENDENT RECORD [
      command(0): SELECT typ(0:0..1): Typ FROM
         imaging => [com(0:2..7): ImagingCom, addrHighBits(0:8..15): [0..256) 
	    ←  0],
            -- addrHighBits is used by the maskSamplesRef and maskRunGroupRef
	    -- commands.
         control => [com(0:2..7): ControlCom, rest(0:8..15): [0..256) ← 0]
            -- rest is used by the setPriority and setColorTile commands.
         ENDCASE
      ];
   SampleArray: TYPE = MACHINE DEPENDENT RECORD [
      sSize(0): CARDINAL,
      fSize(1): CARDINAL
      -- Followed by the actual scan lines, each padded out to a word.
      ];
   Tile: TYPE = MACHINE DEPENDENT RECORD [
      phase(0): CARDINAL,
      sMin(1): CARDINAL,
      fMin(2): CARDINAL,
      sSize(3): CARDINAL,
      fSize(4): CARDINAL
      -- Followed by the actual scan lines, each padded out to a word.
      ];
   RunGroup: TYPE = MACHINE DEPENDENT RECORD [
      sSize(0): CARDINAL
      -- Followed by the Runs.
      ];
   Run: TYPE = MACHINE DEPENDENT RECORD [
      fMin(0): CARDINAL,
      lastRun(1:0..0): BOOLEAN,
      fSize(1:1..15): NAT
      ];
   MaskRectangle: TYPE = MACHINE DEPENDENT RECORD [
      sMin(0): CARDINAL,
      sSize(1): CARDINAL,
      fMin(2): CARDINAL,
      fSize(3): CARDINAL
      ];
   MaskTrapezoid: TYPE = MACHINE DEPENDENT RECORD [
      sMin(0): CARDINAL,
      sSize(1): CARDINAL,
      fMin(2): CARDINAL,
      fSize(3): CARDINAL,
      fMinLast(4): CARDINAL,
      fSizeLast(5): CARDINAL
      ];
   MaskRunGroup: TYPE = MACHINE DEPENDENT RECORD [
      sMin: CARDINAL
      -- Followed by the RunGroup
      ];
   MaskSamples: TYPE = MACHINE DEPENDENT RECORD [
      sMin: CARDINAL,
      fMin: CARDINAL
      -- Followed by the SampleArray
      ];
   MaskRunGroupRef: TYPE = MACHINE DEPENDENT RECORD [
      addrLowBits: CARDINAL,
         -- High bits are in the command word
      sMin: CARDINAL,
      fMin: CARDINAL
      ];
   MaskSamplesRef: TYPE = MACHINE DEPENDENT RECORD [
      addrLowBits: CARDINAL,
         -- High bits are in the command word
      sMin: CARDINAL,
      fMin: CARDINAL
      ];
   ColorSamples: TYPE = MACHINE DEPENDENT RECORD [
      sMin: CARDINAL,
      fMin: CARDINAL
      -- Followed by the SampleArray
      ];
   Priority: TYPE = MACHINE DEPENDENT RECORD [
      -- rest field of ControlCom contains high order bits of priority.
      priorityLowBits: CARDINAL
      ];
   SetColorTile: TYPE = MACHINE DEPENDENT RECORD [
      -- rest field of ControlCom contains transparentFlag or opaqueFlag.
      addr: LONG CARDINAL
      ];
   Toner: TYPE = MACHINE DEPENDENT {black(0), cyan(1), magenta(2), yellow(3)};
   StartImage: TYPE = MACHINE DEPENDENT RECORD [
      filler(0:0..8): [0..512)   ←  0,
      leftOverMode(0:9..9): BOOLEAN,
      feed(0:10..10): BOOLEAN,
      strip(0:11..11): BOOLEAN,
      toner(0:12..15): Toner,
      passBands(1): NAT,
      nBands(2): NAT,
      fMinPage(3): CARDINAL,
      fSizePage(4): CARDINAL
      ];
   StoreLoad: TYPE = MACHINE DEPENDENT RECORD [
      firstAddress(0): LONG CARDINAL,
      wordCount(2): CARDINAL
      -- Followed by the data words
      ];
   END.