<> <> <> <> <<>> DIRECTORY ImagerSample, SF, Xl, XlBitmap, XlBitmapWindow; <> <> XlBitmapWindowPrivate: CEDAR DEFINITIONS ~ BEGIN emptyBox: SF.Box ~ [min: SF.maxVec, max: SF.minVec]; buffSize: NAT = 64; --power of 2 to avoid bounds checking and speed up MOD BuffIndex: TYPE = [0..buffSize); ImplRec: TYPE = MONITORED RECORD [ atomic: Atomic, visible: BOOL ¬ FALSE, --conservative: in doubt TRUE hasWindow: BOOL ¬ FALSE, --monitored mapped: BOOL ¬ FALSE, --monitored hasBitmap: BOOL ¬ FALSE, --monitored onServerLimit: INT ¬ 48, --number of requests sent to server before a roundtrip is requested <<--big number because for this X request, execution should be faster then transmission...>> onServer: INT ¬ 0, --hint; how many request are buffered on server painterProcessRunning: BOOL ¬ FALSE, --monitored mustNotifyBufferEmpty: INT ¬ 0, bufferEmpty: CONDITION, doingShortPause: BOOL ¬ FALSE, shortPause: CONDITION, fLeniance: INTEGER ¬ 16, --need not be atomic softClipBox: SF.Box ¬ emptyBox, --soft because not atomically unfinishedBox: SF.Box ¬ emptyBox, thisUnfinishedKey, lastUnfinishedKey: INT32 ¬ 0, --modular arithmetic report: LIST OF REF ReportRec ¬ NIL, in: BuffIndex ¬ 0, --next buffer location to be used by producer; monitored out: BuffIndex ¬ 0, --next buffer location to be used by consumer; monitored <<--in=out means buffer empty>> buffer: ARRAY BuffIndex OF SF.Box, --monitored interceptedBitmap: XlBitmap.Bitmap ¬ NIL, --monitored pixmapAndConnection: REF PixmapAndConnection ¬ NIL, --monitored extraRefForDebugging: REF ¬ NIL ]; ReportRec: TYPE = RECORD [proc: PROC[SF.Box, REF], data: REF]; Atomic: TYPE = REF AtomicRec; AtomicRec: TYPE = RECORD [ conn: Xl.Connection ¬ NIL, window: Xl.Window ¬ Xl.nullWindow, hasShmC: BOOL ¬ FALSE, --associated connection supports shm hasShmB: BOOL ¬ FALSE, --associated bitmap supports shm useShm: BOOL ¬ FALSE, useCopyPlane: BOOL ¬ FALSE, --valid only if useShm shmPixmap: Xl.Pixmap ¬ Xl.nullPixmap, origin: Xl.Point ¬ [0, 0], gc: Xl.GContext ¬ NIL, bytesPerLine: INT, base: LONG POINTER, sm: ImagerSample.RasterSampleMap, bm: XlBitmap.Bitmap, bitsPerPixel: NAT ¬ 1, bugCompensator: NAT ¬ 32, bmClipBox: SF.Box ¬ emptyBox, --clipping due to bitmap size <> windowAlive: BOOL ¬ TRUE, <<>> lastSeq: Xl.SequenceNo ¬ 0, <<>> extraGCForDebugging: Xl.GContext ¬ NIL, extraRefForDebugging: REF ¬ NIL ]; PixmapAndConnection: TYPE = RECORD [ p: Xl.Pixmap ¬ Xl.nullPixmap, c: Xl.Connection ¬ NIL ]; END.