-- PDStrikeFormat.mesa
-- Copyright (C) 1984, Xerox Corporation.  All rights reserved.
-- Last changed by Doug Wyatt, August 23, 1982 3:34 pm
-- Last changed by Michael Plass, September 19, 1984 1:12:52 pm PDT

PDStrikeFormat: DEFINITIONS = {

Header: TYPE = MACHINE DEPENDENT RECORD[
  format(0): Format,
  min(1),max(2): CHARACTER, -- minimum, maximum character codes
  maxwidth(3): CARDINAL -- maximum spacing width of any character
  ];
  
Flag: TYPE = MACHINE DEPENDENT {F(0), T(1)};

Format: TYPE = MACHINE DEPENDENT RECORD[
  oneBit: Flag, -- always T
  index: Flag, -- F for simple strike, T for strike index
  fixed: Flag, -- T if all characters have same width
  kerned: Flag, -- T if Kerned, F if Plain
  unused: [0..7777B] -- should be 0
  ];
  
BoundingBox: TYPE = MACHINE DEPENDENT RECORD[
  fbbox(0), fbboy(1): INTEGER, -- bounding box offsets
  fbbdx(2), fbbdy(3): INTEGER  -- bounding box size
  ];
  
Body: TYPE = MACHINE DEPENDENT RECORD[
  length(0): CARDINAL, -- number of words in strike body
  ascent(1),descent(2): INTEGER, -- scanlines above and below the baseline
  xoffset(3): INTEGER, -- always 0 (obsolete)
  raster(4): CARDINAL -- number of words per scanline in the strike
  -- followed by bitmap (raster*(ascent+descent) words)
  -- followed by XTable (to end of body)
  ];
  
WidthEntry: TYPE = MACHINE DEPENDENT RECORD[offset,width: [0..377B]];
nullWidthEntry: WidthEntry = [377B,377B];

XTable: TYPE = RECORD[SEQUENCE COMPUTED CARDINAL OF CARDINAL];
WTable: TYPE = RECORD[SEQUENCE COMPUTED CARDINAL OF WidthEntry];

PlainStrike: TYPE = MACHINE DEPENDENT RECORD[
  header: Header, -- common to all strike fonts
  body: Body
  ];
  
KernedStrike: TYPE = MACHINE DEPENDENT RECORD[
  header: Header, -- common to all strike fonts
  box: BoundingBox, -- the font bounding box
  body: Body -- the actual strike
  -- followed by WTable
  ];
  
}.