<> <> <> <> ImagerScanConverterPrivate: CEDAR DEFINITIONS ~ BEGIN DevicePathRep: TYPE ~ RECORD [ scanLineCrossings: INT, sMin, sMax, fMin, fMax: INTEGER, pointTable: PointTable, bucketTable: BucketTable, segmentList: LIST OF SegmentRep, pieceList: LIST OF PieceRep, scratchSegmentList: LIST OF SegmentRep, scratchPieceList: LIST OF PieceRep ]; PointTable: TYPE ~ REF PointTableRec; PointTableRec: TYPE ~ RECORD [ SEQUENCE maxLength: NAT OF Point ]; Point: TYPE ~ MACHINE DEPENDENT RECORD [ <<1 word long, ordered so it can be sorted like a cardinal>> fRel: NAT, -- relative to devicePath.fMin direction: Direction ]; Direction: TYPE ~ {increasing, decreasing}; BucketTable: TYPE ~ REF BucketTableRec; BucketTableRec: TYPE ~ RECORD [length: NAT, seq: SEQUENCE maxLength: NAT OF INTEGER]; SegmentRep: TYPE ~ RECORD [ sFirstScan: INTEGER, -- sFirstScan + 1/2 defines the first scan line that crosses this segment. direction: Direction, scanCount: NAT, -- number of scan lines that cross this segment. s0, f0, s1, f1: REAL ]; PieceRep: TYPE ~ RECORD [ sOrg, fOrg: INTEGER, -- in device units sScale: CARDINAL, sOffset: CARDINAL, sFirstScan: INTEGER, -- sFirstScan + 1/2 defines the first scan line that crosses this piece. scanCount: CARDINAL, -- number of scan lines that cross this piece. direction: Direction, iterationsUntilFlat: NAT, f0: CARDINAL, s1, f1: CARDINAL, s2, f2: CARDINAL, s3, f3: CARDINAL <> <<(fi/fScale + 1/2 + fOrg, (si+sOffset)/sScale + sOrg)>> ]; END.