<<>> <> <> <> <<>> <> <<>> DIRECTORY ImagerBrick USING [Brick], ImagerPixel USING [PixelBuffer], ImagerSample USING [Function, SampleMap]; PrintColor: CEDAR DEFINITIONS ~ BEGIN LogicalDevice: TYPE ~ CARDINAL; <> Toner: TYPE ~ MACHINE DEPENDENT {black, cyan, magenta, yellow, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15}; <<>> FalseBool: TYPE ~ BOOL ¬ FALSE; TonerUniverse: TYPE ~ PACKED ARRAY Toner OF FalseBool; <> <> PrintSpecialColorData: TYPE ~ REF PrintSpecialColorDataRep; PrintSpecialColorDataRep: TYPE ~ RECORD [ SEQUENCE size: NAT OF LogicalDeviceColorData ]; <> LogicalDeviceColorData: TYPE ~ REF LogicalDeviceColorDataRep; LogicalDeviceColorDataRep: TYPE ~ RECORD [ logicalDevice: CARDINAL, -- device code of appropriate device tonerUniverse: TonerUniverse, behaviors: LIST OF BehaviorForSeparation ]; Ink: TYPE ~ {nop, remove, set}; <> <> <> BehaviorForSeparation: TYPE ~ REF BehaviorForSeparationRep; BehaviorForSeparationRep: TYPE ~ RECORD [ toner: Toner, v: SELECT type: * FROM constant => [ink: Ink], fraction => [f: REAL], -- fraction of ink in [0.0..1.0], using the brick for this separation tile => [ tileBits: ImagerSample.SampleMap ¬ NIL, tilePhase: NAT, function: ImagerSample.Function -- The only functions that are guaranteed to work for all implementations are [null, null] and [or, null] ], ENDCASE ]; <> <> ColorCorrection: TYPE ~ REF ColorCorrectionRep; ColorCorrectionRep: TYPE ~ RECORD [ type: ATOM, correctionProc: CorrectionProc, maxSampleIn: ARRAY [0..3) OF CARDINAL, -- for red, green, blue, respectively samplesPerPixelOut: NAT, -- 1=black, 3=cmy, 4=cmyk data: REF ]; CorrectionProc: TYPE ~ PROC [self: ColorCorrection, pixelsOut: ImagerPixel.PixelBuffer, maxSampleOut: ARRAY [0..4) OF CARDINAL, rgbIn: ImagerPixel.PixelBuffer]; < black, 3 => CMY, 4 => CMYK. A sample value of 0 means no ink, and a sample value of maxSampleOut means full ink>> <> HalftoneProperties: TYPE ~ LIST OF HalftonePropertiesForSeparation; HalftonePropertiesForSeparation: TYPE ~ RECORD [type: ATOM, toner: Toner, brick: ImagerBrick.Brick]; <> <<>> END.