-- Strike.mesa
-- Last changed by Doug Wyatt, August 28, 1980 12:01 AM

Strike: DEFINITIONS =
BEGIN

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

NoYes: TYPE = MACHINE DEPENDENT {No(0), Yes(1)};

Format: TYPE = MACHINE DEPENDENT RECORD[
oneBit: NoYes, -- always Yes
index: NoYes, -- No for simple strike, Yes for strike index
fixed: NoYes, -- Yes if all characters have same width
kerned: NoYes, -- Yes if Kerned, No if Plain
unused: [0..7777B] -- should be 0
];

BoundingBoxBlock: TYPE = MACHINE DEPENDENT RECORD
[
fbbox(0), fbboy(1): INTEGER,
fbbdx(2), fbbdy(3): CARDINAL
];

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 (BitmapSize[body] words)
-- followed by xinsegment table
];

WidthEntry: TYPE = MACHINE DEPENDENT RECORD[offset,width: [0..377B]];
nullWidthEntry: WidthEntry = [377B,377B];

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: BoundingBoxBlock, -- the font bounding box
body: Body -- the actual strike
-- followed by table of width data
];

END.