-- CGFullSample.mesa
-- Last edited by Ken Pier, July 13, 1982 3:40 pm

CGFullSample: DEFINITIONS = {

Pointer: TYPE = LONG POINTER TO Table;

MapArray: TYPE = RECORD[SEQUENCE COMPUTED CARDINAL OF CARDINAL];

Table: TYPE = MACHINE DEPENDENT RECORD [
function(0:0..3): [0..17B] ← 0, -- function
mConst(0:4..4): BOOLEAN ← FALSE, -- mask value is constant (always 1)
bConst(0:5..5): BOOLEAN ← FALSE, -- brick value is constant (given by bValue)
sConst(0:6..6): BOOLEAN ← FALSE, -- source value is constant (given by sValue)
useMap(0:7..7): BOOLEAN ← FALSE, -- look up sample values in map
size(0:8..15): [0..377B] ← 8, -- sample size, for brick and source

count(1:0..15): CARDINAL ← 0, -- number of samples to process
bValue(2:0..15): CARDINAL ← 0, -- constant brick value, used if bConst=TRUE
sValue(3:0..15): CARDINAL ← 0, -- constant source value, used if sConst=TRUE

-- destination and mask information
dLine(4:0..31): LONG POINTER ← NIL, -- pointer to row of destination bits
mLine(6:0..31): LONG POINTER ← NIL, -- pointer to row of mask bits (ignored if mConst=TRUE)
di(8:0..15): CARDINAL ← 0, -- starting bit index in destination
mi(9:0..15): CARDINAL ← 0, -- starting bit index in mask (ignored if mConst=TRUE)

-- source to sample mapping table (ignored if useMap=FALSE)
map(10:0..31): LONG POINTER TO MapArray ← NIL,

-- brick information (ignored if bConst=TRUE)
bLine(12:0..31): LONG POINTER ← NIL, -- pointer to row of brick samples
bi(14:0..15): CARDINAL ← 0, -- starting sample index in brick
bw(15:0..15): CARDINAL ← 0, -- width of brick row, in samples

-- source information (ignored if sConst=TRUE)
sBase(16:0..31): LONG POINTER ← NIL, -- pointer to first word of source array
sRast(18:0..15): CARDINAL ← 0, -- words per raster line in source array
sSpare(19:0..15): CARDINAL ← 0, -- not used (samples per pixel?)
sw(20:0..15): CARDINAL ← 0, -- width of source, in samples
sh(21:0..15): CARDINAL ← 0, -- height of source, in lines
sox(22:0..15): CARDINAL ← 0, -- x offset of source, in samples
soy(23:0..15): CARDINAL ← 0, -- y offset of source, in lines
sx(24:0..31): LONG INTEGER ← 0, -- starting x position in source * 2^16
sy(26:0..31): LONG INTEGER ← 0, -- starting y position in source * 2^16
sdx(28:0..31): LONG INTEGER ← 0, -- increment to source x position * 2^16
sdy(30:0..31): LONG INTEGER ← 0 -- increment to source y position * 2^16
];

SAMPLE: PROC[Pointer]; -- Some day: = MACHINE CODE ...

}.