-- MesaBandFormat.mesa
-- Last edit by Ken Pier, April 12, 1982 2:38 PM
DIRECTORY
MesaBands USING [BandDevice];
MesaBandFormat: DEFINITIONS = {
-- 8.5 * 11 * 384 * 384 = 13,787,136 (bits on Hornet page)
-- 5 * 5 * 5000 * 5000 = 625,000,000 (bits on reticle)
Marker: TYPE = INTEGER ← 23456; --supposed unique bit string
Bit: TYPE = BOOLEAN;
Type: TYPE = {all0, all1, brick, bits, fontcache, herald, end};--in three bit field
Flags: TYPE = MACHINE DEPENDENT RECORD [type: Type, rect: BOOLEAN];--four bit field
BandX: TYPE = [0..7777B]; -- twelve bit field adjoins Flags
--N.B.: ALL object types must start with the marker, then flags, then band
ObjectRef: TYPE = POINTER TO Object;
Object: TYPE = MACHINE DEPENDENT RECORD [
mark: Marker,
flags: Flags, band: BandX,
yStart: CARDINAL ← 0,
height: CARDINAL ← 0,
-- if rect=TRUE, only runs[0] is given
-- if rect=FALSE, runs[0..height) are given
runs: SEQUENCE COMPUTED CARDINAL OF Run
-- if type=bits, bits follow
-- if type=brick, brick follows
];
objectSize: CARDINAL = SIZE[Object];
RunRef: TYPE = POINTER TO Run;
Run: TYPE = MACHINE DEPENDENT RECORD [
xmin: CARDINAL, -- left end of scanline
xmax: CARDINAL -- right end of scanline
];
runSize: CARDINAL = SIZE[Run];
HeraldRef: TYPE = POINTER TO HeraldObject;
HeraldObject: TYPE = MACHINE DEPENDENT RECORD [
mark(0): Marker,
flags(1:0..3): Flags ← [type: herald, rect: FALSE],
band(1:4..15): BandX ← 7777B,
singleFile(2:0..0): BOOLEAN,--TRUE if one band file only
unused(2:1..9): [0..777b], device(2:10..15): MesaBands.BandDevice,
bandCount(3): CARDINAL, --number of bands for this device
bandHeight(4): CARDINAL, --height of each band in scanlines
bandWidth(5): CARDINAL --width of each band in words
];
heraldObjectSize: CARDINAL = SIZE[HeraldObject];
EndRef: TYPE = POINTER TO EndObject;
EndObject: TYPE = MACHINE DEPENDENT RECORD [
mark: Marker,
flags: Flags ← [type: end, rect: FALSE], band: BandX ← 7777B,
yStart: CARDINAL ← 177777B,
height: CARDINAL ← 177777B
];
endObjectSize: CARDINAL = SIZE[EndObject];
--thresholded brick stuff
TBrickRef: TYPE = POINTER TO TBrickRep;
TBrickRep: TYPE = RECORD[
L,p: CARDINAL, --length, height of brick
D: INTEGER, --displacement
hx,hy: CARDINAL, --initial location for scan conversion
color: CARDINAL, --that this brick represents
brickSize: CARDINAL, --actual size of brick sequence
brick: PACKED SEQUENCE max: INTEGER OF Bit
];
tBrickSize: CARDINAL = SIZE[TBrickRep];
LineRef: TYPE = POINTER TO Line;
Line: TYPE = RECORD[PACKED SEQUENCE COMPUTED INTEGER OF Bit];
}.
LOG
March 11, 1982, changed everything to SHORT POINTERS
--change Marker, band field; remove skipCount, run.Count, tail of EndObj, 3/14/82
--REMOVED NAT from sequences, 4/12/82