<<>> <> <> <> DIRECTORY ImagerPixelArray, ImagerSample, IO, Rope; PixelArrayCCITTG4Private: CEDAR DEFINITIONS = BEGIN Data: TYPE ~ REF DataRep; DataRep: TYPE ~ MONITORED RECORD [ scanLength: CARDINAL ¬ 0, reverseBits: BOOL ¬ FALSE, useFastScan: BOOL ¬ FALSE, debug: IO.STREAM ¬ NIL, -- for debug output (NIL => none) stream: IO.STREAM ¬ NIL, initIndex: INT ¬ 0, -- saved index when stream = NIL nextLineState: State ¬ none, -- used to make uncompressed-mode data span scanlines. nextScanState: State ¬ none, -- used internally bitBuffer: CARD ¬ 0, goodBits: [0..32) ¬ 0, sCurrent: INTEGER ¬ 0, lineBufferValid: BOOL ¬ FALSE, copyData: CopyData ¬ NIL, lineBuffer: ImagerSample.RasterSampleMap ¬ NIL, referenceTransitions: REF IndexSequenceRep ¬ NIL, lineTransitions: REF IndexSequenceRep ¬ NIL, k: INT ¬ -1, oneDimTag: BOOL ¬ FALSE, sSize: INTEGER ¬ -1, end: BOOL ¬ FALSE, roots: REF ARRAY State OF Node ¬ NIL, <> referenceColor: [0..1] ¬ 0, referenceIndex: CARDINAL ¬ 0, <> errorIndex: CARD ¬ 0, error: ATOM ¬ NIL, -- indicates error errorCount: CARD ¬ 0 ]; State: TYPE ~ MACHINE DEPENDENT { white(0), black(1), hwhite(2), hblack(3), hhwhite(4), hhblack(5), unc, uncb1, uncb2, uncb3, uncb4, uncb5, uncw1, uncw2, uncw3, uncw4, uncw5, eoi, none }; IndexSequenceRep: TYPE ~ RECORD [ end: CARDINAL, s: PACKED SEQUENCE size: CARDINAL OF INT ]; CopyData: TYPE = REF CopyDataRep; CopyDataRep: TYPE = RECORD [SEQUENCE len: CARDINAL OF REF]; Action: TYPE ~ { null, utest, emit, scan, pass, one, zeros }; Node: TYPE = REF NodeRep; BitCount: TYPE = [0..BITS[WORD]); Branch: TYPE ~ RECORD [reserveBits: BitCount, node: Node]; NodeRep: TYPE ~ RECORD [ count: CARD ¬ 0, cases: SELECT tag: * FROM internal => [bitCount: BitCount, d: SEQUENCE size: CARDINAL OF Branch], leaf => [new: State, action: Action, length: INT], ENDCASE ]; TreeNode: TYPE = REF NodeRep.internal; LeafNode: TYPE = REF NodeRep.leaf; FromStream: PROC [st: IO.STREAM, bitsPerLine: CARDINAL] RETURNS [Data]; <> FillLineBuffer: PROC [data: Data, s: INTEGER, invert: BOOL ¬ FALSE]; <> MakePure: PROC [data: Data]; <> <<>> Close: PROC [data: Data]; <> G4PixelArrayFromData: PROC [data: Data, lines: CARDINAL, bitsPerLine: CARDINAL] RETURNS [ImagerPixelArray.PixelArray]; <> DumpRoots: PROC [st: IO.STREAM, clear: BOOL]; <> END.