<> <> <> DIRECTORY Basics USING [BYTE, RawBytes, RawWords], CountedVM USING [Handle], ImagerColorMap USING [MapEntry]; ImagerDither: CEDAR DEFINITIONS ~ BEGIN BYTE: TYPE ~ Basics.BYTE; ChannelValue: TYPE ~ [0..256); ColorValue: TYPE ~ [0..256); RawWords: TYPE ~ Basics.RawWords; RawBytes: TYPE ~ Basics.RawBytes; BitCount: TYPE ~ [0..16]; PackedColorDesc: TYPE ~ RECORD [ <> redBits: BitCount _ 4, greenBits: BitCount _ 4, blueBits: BitCount _ 4, tileIndexBits: BitCount _ 4 ]; PackedColor: TYPE ~ WORD; MaxPackedColor: PROC [packing: PackedColorDesc] RETURNS [CARDINAL]; Pack: PROC [red, green, blue: BYTE, packing: PackedColorDesc] RETURNS [PackedColor]; Unpack: PROC [packed: PackedColor, packing: PackedColorDesc] RETURNS [red, green, blue: BYTE, tileIndex: CARDINAL]; PackSequence: UNSAFE PROC [dest, red, green, blue: LONG POINTER TO RawWords, count: NAT, packing: PackedColorDesc]; PreDither: UNSAFE PROC [words: LONG POINTER TO RawWords, count: NAT, s: NAT _ 0, bits: NAT _ 8, fractionBits: NAT _ 4]; Table: TYPE ~ REF TableRep; TableRep: TYPE ~ RECORD [ packing: PackedColorDesc, maxPackedColor: CARDINAL, sTileSize: NAT, fTileSize: NAT, space: CountedVM.Handle ]; CreateTable: PROC [packing: PackedColorDesc, sTileSize: NAT _ 4, fTileSize: NAT _ 4] RETURNS [Table]; MapEntry: TYPE ~ ImagerColorMap.MapEntry; InitTable: PROC [table: Table, map: LIST OF MapEntry, scaleMap: NAT _ 1]; Dither: UNSAFE PROC [destLine: LONG POINTER TO RawBytes, start, count: NAT, packed: LONG POINTER TO RawWords, sTile, fTile: CARDINAL, table: Table]; WordDither: UNSAFE PROC [destLine: LONG POINTER TO RawWords, start, count: NAT, packed: LONG POINTER TO RawWords, sTile, fTile: CARDINAL, table: Table]; DitherConstant: UNSAFE PROC [destLine: LONG POINTER TO RawBytes, start, count: NAT, packed: PackedColor, sTile, fTile: CARDINAL, table: Table]; WordDitherConstant: UNSAFE PROC [destLine: LONG POINTER TO RawWords, start, count: NAT, packed: PackedColor, sTile, fTile: CARDINAL, table: Table]; END.