DIRECTORY Idle, ImagerPixelMap, LFBoundingBox, Terminal, Buttons; SleepPeekImpl: CEDAR PROGRAM IMPORTS Idle, ImagerPixelMap, LFBoundingBox, Terminal, Buttons = BEGIN sMin, fMin: INTEGER; sSize, fSize: NAT; screen: ImagerPixelMap.PixelMap; shadow: ImagerPixelMap.PixelMap; bitmapRef: Idle.BitmapRef; Bits: TYPE = RECORD [SEQUENCE COMPUTED CARDINAL OF WORD]; Image: Idle.ImageProc ~ { shadow _ shadow.refRep.Reshape[0, [sMin, fMin, MIN[sSize, h], MIN[fSize, w]]]; shadow.Transfer[screen]; RETURN [bitmapRef]; }; Lg: PROC [n: NAT] RETURNS [NAT] ~ { RETURN[SELECT n FROM 1 => 0, 2 => 1, 4 => 2, 8 => 3, 16 => 4, ENDCASE => ERROR] }; PixelMapFromFrameBuffer: PROC [frameBuffer: Terminal.FrameBuffer] RETURNS [ImagerPixelMap.PixelMap] ~ { refRep: REF ImagerPixelMap.PixelMapRep ~ NEW[ImagerPixelMap.PixelMapRep _ [ ref: frameBuffer, pointer: frameBuffer.base, words: INT[frameBuffer.wordsPerLine]*INT[frameBuffer.height], lgBitsPerPixel: Lg[frameBuffer.bitsPerPixel], rast: frameBuffer.wordsPerLine, lines: frameBuffer.height ]]; frame: ImagerPixelMap.PixelMap ~ [ sOrigin: 0, fOrigin: 0, sMin: 0, fMin: 0, sSize: frameBuffer.height, fSize: frameBuffer.width, refRep: refRep ]; RETURN[frame]; }; SleepProc: Buttons.ButtonProc ~ BEGIN IF mouseButton = red OR sSize = 0 OR fSize = 0 OR shadow.refRep = NIL THEN { sMin _ -1; [y: sMin, x: fMin, h: sSize, w: fSize] _ LFBoundingBox.GetArea[!LFBoundingBox.AbortAdjust => CONTINUE]; IF sMin < 0 THEN shadow.refRep _ NIL ELSE { TRUSTED {screen _ PixelMapFromFrameBuffer[Terminal.GetBWFrameBuffer[Terminal.Current[]]]}; sMin _ screen.sSize - sMin - sSize; shadow _ ImagerPixelMap.Create[0, [sMin, fMin, sSize, fSize]]; WHILE shadow.refRep.words > 64000 DO sSize _ sSize * 7 / 8; fSize _ fSize * 7 / 8; shadow _ ImagerPixelMap.Create[0, [sMin, fMin, sSize, fSize]]; ENDLOOP; shadow.refRep.pointer _ NIL; shadow.refRep.ref _ NEW[Bits[shadow.refRep.words]]; TRUSTED {shadow.refRep.pointer _ LOOPHOLE[shadow.refRep.ref]}; bitmapRef _ NEW[Idle.BitmapRep _ [base: shadow.refRep.ref, raster: shadow.refRep.rast, width: shadow.fSize, height: shadow.sSize]]; }; }; IF shadow.refRep # NIL THEN Idle.Sleep[Image]; END; [] _ Buttons.Create[[name: "Sleep"], SleepProc]; END. όSleepPeekImpl.mesa Copyright (C) 1984 by Xerox Corporation. All rights reserved. Michael Plass, April 12, 1984 10:15:30 am PST Last Edited by: Beach, October 9, 1984 8:51:00 pm PDT Pier, June 19, 1985 4:28:15 pm PDT get bounding box of the area Κ±˜™Jšœ>™>Jšœ-™-J™5Icode™"—J˜JšΟk œ8˜AJ˜šœ ˜Jšœ7˜>Jšœ˜Jšœ œ˜Jšœœ˜Jšœ ˜ Jšœ ˜ Jšœ˜Jšœœœœœœœœ˜9šΟnœ˜Jšœ/œ œ˜OJšœ˜Jšœ ˜Jšœ˜—K˜š žœœœœœ˜#Kš œœœ*œœ˜OK˜K˜—šžœœ%œ˜hšœœœ˜KKšœ˜Kšœ˜Kšœœœ˜=Kšœ-˜-Kšœ˜Kšœ˜Kšœ˜—šœ"˜"Kšœ)˜)KšœC˜CKšœ˜—Kšœ˜K˜K˜—šž œ˜%š œœ œ œœœ˜LJ™Jšœ ˜ Jšœ]œ˜gšœ ˜Jšœ˜—šœ˜JšœS˜ZJšœ#˜#Jšœ>˜>šœ˜$Jšœ˜Jšœ˜Jšœ>˜>Jšœ˜—Jšœœ˜Jšœœ˜3Jšœœ˜>Jšœ œt˜ƒJšœ˜—Jšœ˜—Jšœœœ˜.Jšœ˜J˜—šœ0˜0J˜—Jšœ˜——…—  M