DIRECTORY ImagerColor USING [Color], ImagerFont USING [CorrectionType, XChar], ImagerSample USING [BoxAction, BoxGenerator, SampleMap], ImagerTransformation USING [Transformation], Scaled USING [Value], SF USING [Box, Vec], Vector2 USING [VEC]; ImagerDevice: CEDAR DEFINITIONS ~ BEGIN Transformation: TYPE ~ ImagerTransformation.Transformation; Vec: TYPE ~ SF.Vec; Box: TYPE ~ SF.Box; BoxAction: TYPE ~ ImagerSample.BoxAction; BoxGenerator: TYPE ~ ImagerSample.BoxGenerator; SampleMap: TYPE ~ ImagerSample.SampleMap; Color: TYPE ~ ImagerColor.Color; HalftoneParameters: TYPE ~ RECORD[ dotsPerInch: REAL, angle: REAL, -- degrees anticlockwise from +x axis shape: REAL -- 0.5 is circular ]; Device: TYPE ~ REF DeviceRep; DeviceRep: TYPE ~ RECORD[ class: DeviceClass, -- class operations data: REF, -- instance data box: Box, -- bounding rectangle, in device coordinates surfaceToDevice: Transformation, -- transformation from surface to device coordinates surfaceUnitsPerInch: Vector2.VEC, -- x and y scale factors surfaceUnitsPerPixel: NAT -- surface resolution may be a multiple of pixel resolution ]; CharMask: TYPE ~ REF CharMaskRep; CharMaskRep: TYPE ~ MACHINE DEPENDENT RECORD [ font: REF, -- font and char together provide a unique identifier for this mask char: ImagerFont.XChar, sEscapement, fEscapement: Scaled.Value, sMinBB, fMinBB: INTEGER, sSizeBB, fSizeBB: CARDINAL, metricsValid: BOOL, -- numbers above are invalid if this is true. amplified: BOOL, correction: ImagerFont.CorrectionType, flag: PACKED ARRAY [0..10) OF [0..1], -- for padding and expansion data: SELECT rep: * FROM raster => [bits: SEQUENCE COMPUTED CARDINAL -- sSize*Ceiling[fSize/16.0] -- OF WORD], runs => [run: SEQUENCE nRuns: CARDINAL OF Run], uncached => [], ENDCASE ]; Run: TYPE ~ MACHINE DEPENDENT RECORD [fMin: CARDINAL, lastRun: BOOL, fSize: NAT]; SetColorProc: TYPE ~ PROC [self: Device, color: Color, viewToDevice: Transformation]; SetPriorityProc: TYPE ~ PROC [self: Device, priorityImportant: BOOL]; SetHalftoneProc: TYPE ~ PROC [self: Device, halftone: HalftoneParameters]; MaskBoxesProc: TYPE ~ PROC [self: Device, boxes: BoxGenerator, bounds: Box]; MaskBitsProc: TYPE ~ PROC [self: Device, boxes: BoxGenerator, bounds: Box, src: SampleMap, offset: Vec]; MoveBoxesProc: TYPE ~ PROC [self: Device, boxes: BoxGenerator, bounds: Box, offset: Vec]; MaskCharProc: TYPE ~ PROC [self: Device, mask: CharMask, offset: Vec]; DoWithBufferProc: TYPE ~ PROC [self: Device, action: PROC, bounds: Box]; DeviceClass: TYPE ~ REF DeviceClassRep; DeviceClassRep: TYPE ~ RECORD [ type: ATOM, SetColor: SetColorProc, SetPriority: SetPriorityProc, SetHalftone: SetHalftoneProc, MaskBoxes: MaskBoxesProc, MaskBits: MaskBitsProc, MoveBoxes: MoveBoxesProc, MaskChar: MaskCharProc, DoWithBuffer: DoWithBufferProc ]; NewClass: PROC [ type: ATOM, SetColor: SetColorProc, SetPriority: SetPriorityProc _ NIL, SetHalftone: SetHalftoneProc _ NIL, MaskBoxes: MaskBoxesProc, MaskBits: MaskBitsProc _ NIL, MoveBoxes: MoveBoxesProc, MaskChar: MaskCharProc _ NIL ] RETURNS [DeviceClass]; END. μImagerDevice.mesa Copyright c 1984, 1985, 1986 by Xerox Corporation. All rights reserved. Michael Plass, June 11, 1985 2:50:25 pm PDT Doug Wyatt, March 6, 1986 9:27:16 pm PST Same as PDFileFormat.Run; fMin is relative to fMinBB. Κ-˜codešœ™Kšœ Οmœ=™HK™+Kšœ(™(—K˜šΟk ˜ Kšœ žœ ˜Kšœ žœ˜)Kšœ žœ&˜8Kšœžœ˜,Kšœžœ ˜Kšžœžœ ˜Kšœžœžœ˜—K˜KšΠbl œžœž ˜šœž˜K˜Kšœžœ'˜;Kšœžœžœ˜Kšœžœžœ˜Kšœ žœ˜)Kšœžœ˜/Kšœ žœ˜)Kšœžœ˜ —K˜šœžœžœ˜"Kšœ žœ˜KšœžœΟc%˜2Kšœžœ ˜K˜K˜—Kšœžœžœ ˜šœ žœžœ˜Kšœ ˜'Kšœžœ ˜Kšœ  ,˜6Kšœ! 4˜UKšœžœ ˜:Kšœžœ ;˜UKšœ˜K˜—Kšœ žœžœ ˜!š œ žœžœž œžœ˜.Kšœžœ C˜NKšœ˜K˜'Kšœžœ˜Kšœžœ˜Kšœžœ -˜AKšœ žœ˜Kšœ&˜&Kšœžœžœ žœ  ˜Bšœžœž˜Kš œžœžœžœ œžœžœ˜UKšœžœžœžœ˜/Kšœ˜Kšž˜—Kšœ˜K˜—šœžœžœž œžœžœ žœ žœ˜QKšœ5™5K˜—K˜Kšœžœžœ<˜UKšœžœžœ#žœ˜EKšœžœžœ.˜JKšœžœžœ2˜LKšœžœžœP˜iKšœžœžœ?˜YKšœžœžœ-˜FKšœžœžœžœ˜HK˜Kšœ žœžœ˜'šœžœžœ˜Kšœžœ˜ Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜K˜K˜—K˜šΟnœžœ˜Kšœžœ˜ Kšœ˜Kšœžœ˜#Kšœžœ˜#Kšœ˜Kšœžœ˜Kšœ˜Kšœž˜Kšœžœ˜K˜—K˜Kšžœ˜—…— ό