<> <> <> <<>> <> <<>> DIRECTORY Basics USING [bitsPerWord, RawWords], CountedVM USING [Handle], PrincOps USING [BitAddress, SrcFunc, DstFunc]; SampleMapOps: CEDAR DEFINITIONS ~ BEGIN <> <<>> <> <<>> <> SampleMap: TYPE ~ REF SampleMapRep; SampleMapRep: TYPE ~ RECORD [ <> sSize: NAT, -- number of scan lines fSize: NAT, -- number of samples per scan line bitsPerSample: [0..bitsPerWord], -- number of bits per sample base: PrincOps.BitAddress, -- starting bit address bitsPerLine: NAT, -- bits per scan line ref: REF -- for garbage collection ]; SubMap: TYPE ~ RECORD [sampleMap: SampleMap, start: CVEC _ [0,0], size: CVEC _ lastCVEC]; bitsPerWord: NAT ~ Basics.bitsPerWord; CVEC: TYPE ~ RECORD [s, f: CARDINAL]; zeroCVEC: CVEC ~ [0, 0]; lastCVEC: CVEC ~ [CARDINAL.LAST, CARDINAL.LAST]; Function: TYPE ~ RECORD [dstFunc: PrincOps.DstFunc, srcFunc: PrincOps.SrcFunc]; nullFunction: Function ~ [null, null]; <<[null, null] makes zero bits white, one bits black>> <<[or, null] makes zero bits transparent, one bits black>> <<[and, null] makes zero bits white, one bits black>> <<[and, complement] makes zero bits transparent, one bits white>> <<[xor, null] makes zero bits transparent, one bits inverted>> <> <<>> MultipleReleaseOfScratch: ERROR; <> <<>> ComputeWords: PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord]] RETURNS [LONG CARDINAL]; <> UnsafeCreate: UNSAFE PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord], bitsPerLine: NAT, base: PrincOps.BitAddress, nWords: LONG CARDINAL, ref: REF, scratchDescriptor: SampleMap _ NIL] RETURNS [SampleMap]; <> Create: PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord]] RETURNS [SampleMap]; <> FromVM: PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord], vm: CountedVM.Handle] RETURNS [SampleMap]; <> <> <> FromSubMap: PROC [subMap: SubMap] RETURNS [SampleMap]; <> Copy: PROC [subMap: SubMap] RETURNS [SampleMap]; <> ObtainScratch: PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord]] RETURNS [SampleMap]; ReleaseScratch: PROC [sampleMap: SampleMap]; DoWithScratch: PROC [sSize: CARDINAL, fSize: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord], action: PROC[SampleMap]]; <> Size: PROC [sampleMap: SampleMap] RETURNS [CVEC]; Clear: PROC [sampleMap: SampleMap]; <> <> <> <<>> GetSample: PROC [sampleMap: SampleMap, index: CVEC] RETURNS [CARDINAL]; PutSample: PROC [sampleMap: SampleMap, index: CVEC, value: CARDINAL, function: Function _ nullFunction]; <> <> Transfer: PROC [dest: SampleMap, destStart: CVEC _ zeroCVEC, source: SubMap, function: Function _ nullFunction]; <> <> <> <> <> <> <> Move: PROC [sampleMap: SampleMap, destStart: CVEC _ zeroCVEC, sourceStart: CVEC _ zeroCVEC, size: CVEC _ lastCVEC, function: Function _ nullFunction]; <> Fill: PROC [dest: SubMap, value: CARDINAL, function: Function _ nullFunction]; TileFromStipple: PROC [stipple: CARDINAL, bitsPerSample: [0..Basics.bitsPerWord] _ 1, sample0: CARDINAL _ 0, sample1: CARDINAL _ 1, obtainScratch: BOOL _ FALSE] RETURNS [SampleMap]; <> <> TileBox: PROC [dest: SampleMap, start: CVEC, size: CVEC, source: SampleMap, s0, f0: INTEGER, phase: NAT, function: Function _ nullFunction]; <> <> <> <> <> <> <> <> <> <> <> BoxProc: TYPE ~ PROC [smin, fmin, smax, fmax: CARDINAL]; TileBoxes: PROC [dest: SampleMap, boxes: PROC[BoxProc], source: SampleMap, s0, f0: INTEGER, phase: NAT, function: Function _ nullFunction]; <> <<>> Trim: PROC [subMap: SubMap, background: CARDINAL _ 0] RETURNS [SubMap]; <> <> <> <> Equal: PROC [a, b: SubMap] RETURNS [BOOL]; <> <<>> IsAll: PROC [subMap: SubMap, value: CARDINAL _ 0] RETURNS [BOOL]; <> <> <> <<>> Buffer: TYPE ~ REF BufferRep; BufferRep: TYPE ~ RECORD [length: NAT, samples: SEQUENCE maxLength: NAT OF CARDINAL]; Apply: PROC [dest, source: SampleMap, op: PROC [a, b: CARDINAL] RETURNS [CARDINAL]]; <> <> <> <> <> <> <> <> <<>> maxCount: NAT ~ LAST[NAT]; Get: PROC [buffer: Buffer, start: NAT _ 0, count: NAT _ maxCount, sampleMap: SampleMap, s, f: NAT _ 0, ds: NAT _ 0, df: NAT _ 1]; <> <> <> Put: PROC [buffer: Buffer, start: NAT _ 0, count: NAT _ maxCount, sampleMap: SampleMap, s, f: NAT _ 0, ds: NAT _ 0, df: NAT _ 1, function: Function _ nullFunction]; <> <> <> Flip: PROC [buffer: Buffer]; <> <> <> <> <> <> ObtainBuffer: PROC [length: NAT] RETURNS [Buffer]; <= length.>> ReleaseBuffer: PROC [buffer: Buffer]; GetPointer: PROC [buffer: Buffer, start: NAT, count: NAT] RETURNS [LONG POINTER TO Basics.RawWords]; <> <<>> END.