-- StrikeFormat.mesa
-- Last changed by Doug Wyatt, August 23, 1982 3:34 pm

StrikeFormat: 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
 ];

}.