DIRECTORY Imager USING [Context], ImagerCache USING [GetNamedCache, Ref], ImagerColorMap USING [SetStandardColorMap], ImagerDevice USING [Device, DeviceBox], ImagerDitheredDevice USING [ContextFromColorTerminal], ImagerFastShow USING [Create], ImagerPixelMap USING [PixelMap, PixelMapRep], ImagerRaster USING [AmbushDevice, Ambusher, AmbusherRep, Create, NewBitmapDevice, NewColor24Device], ImagerTerminal USING [], Terminal; ImagerTerminalImpl: CEDAR PROGRAM IMPORTS ImagerCache, ImagerColorMap, ImagerDitheredDevice, ImagerFastShow, ImagerRaster, Terminal EXPORTS ImagerTerminal ~ BEGIN Context: TYPE ~ Imager.Context; 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]; }; bitmapCacheID: ATOM ~ $Bitmap; bitmapCacheSize: NAT ~ 4000; bitmapRastWeight: REAL ~ 2.0; BWContext: PUBLIC PROC [vt: Terminal.Virtual, pixelUnits: BOOL] RETURNS [Context] ~ { frameBuffer: Terminal.FrameBuffer ~ Terminal.GetBWFrameBuffer[vt]; RETURN[ImagerFastShow.Create[pm: PixelMapFromFrameBuffer[frameBuffer], pixelsPerInch: vt.bwPixelsPerInch, pixelUnits: pixelUnits, fontTuner: NIL]]; }; colorCacheID: ATOM ~ $ColorDisplay; colorCacheSize: NAT ~ 4000; colorRastWeight: REAL ~ 0.0; OneBitPerPixelMasker: PROC [self: ImagerRaster.Ambusher, box: ImagerDevice.DeviceBox, action: PROC] ~ { vt: Terminal.Virtual ~ NARROW[self.data]; Terminal.ModifyColorFrame[vt: vt, action: action, xmin: box.fmin, ymin: box.smin, xmax: box.fmax, ymax: box.smax]; }; ColorContext: PUBLIC PROC [vt: Terminal.Virtual, pixelUnits: BOOL] RETURNS [Context] ~ { mode: Terminal.ColorMode ~ Terminal.GetColorMode[vt]; IF Terminal.GetColorBitmapState[vt]=none THEN RETURN[NIL]; IF mode.full THEN { device: ImagerDevice.Device ~ ImagerRaster.NewColor24Device[vt]; colorFontCache: ImagerCache.Ref ~ ImagerCache.GetNamedCache[ atom: colorCacheID, createSize: colorCacheSize]; [] _ Terminal.SetColorCursorPresentation[vt, onesAreBlack]; RETURN[ImagerRaster.Create[device: device, pixelUnits: pixelUnits, fontCache: colorFontCache, rastWeight: colorRastWeight]]; } ELSE { frameBuffer: Terminal.FrameBuffer ~ Terminal.GetColorFrameBufferA[vt]; IF mode.bitsPerPixelChannelA = 1 THEN { frame: ImagerPixelMap.PixelMap ~ PixelMapFromFrameBuffer[frameBuffer]; ambusher: ImagerRaster.Ambusher ~ NEW[ImagerRaster.AmbusherRep _ [ maskProc: OneBitPerPixelMasker, device: ImagerRaster.NewBitmapDevice[ frame: frame, pixelsPerInch: vt.colorPixelsPerInch], data: vt ]]; device: ImagerDevice.Device ~ ImagerRaster.AmbushDevice[ambusher]; bitmapFontCache: ImagerCache.Ref ~ ImagerCache.GetNamedCache[ atom: bitmapCacheID, createSize: bitmapCacheSize]; [] _ Terminal.SetColorCursorPresentation[vt, onesAreWhite]; RETURN[ImagerRaster.Create[device: device, pixelUnits: pixelUnits, fontCache: bitmapFontCache, rastWeight: bitmapRastWeight]]; } ELSE { [] _ Terminal.SetColorCursorPresentation[vt, onesAreBlack]; RETURN[ImagerDitheredDevice.ContextFromColorTerminal[vt, pixelUnits]]; }; }; }; SetStandardColorMap: PUBLIC PROC [vt: Terminal.Virtual] ~ { ImagerColorMap.SetStandardColorMap[vt]; }; END. ώImagerTerminalImpl.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Doug Wyatt, July 22, 1985 3:29:47 pm PDT Michael Plass, July 22, 1985 11:33:48 am PDT They are really black because we have an unconventional frame buffer. Κ˜codešœ™Kšœ Οmœ7™BKšœ(™(K™,—K™šΟk ˜ Kšœžœ ˜Kšœ žœ˜'Kšœžœ˜+Kšœ žœ˜'Kšœžœ˜6Kšœžœ ˜Kšœžœ˜-Kšœ žœR˜dKšœžœ˜Kšœ ˜ —K˜KšΠblœžœž˜!KšžœZ˜aKšžœ˜Kšœž˜K˜Kšœ žœ˜K˜š Οnœžœžœžœžœ˜#Kš žœžœžœ*žœžœ˜OK˜K˜—š œžœ%žœ˜hšœžœžœ˜KKšœ˜Kšœ˜Kšœžœžœ˜=Kšœ-˜-Kšœ˜Kšœ˜Kšœ˜—šœ"˜"Kšœ)˜)KšœC˜CKšœ˜—Kšžœ˜K˜K˜—Kšœžœ ˜Kšœžœ˜Kšœžœ˜K˜š   œžœžœ$žœžœ˜UKšœB˜BKšžœ‡žœ˜“K˜K˜—Kšœžœ˜#Kšœžœ˜Kšœžœ˜K˜š œžœDžœ˜gKšœžœ ˜)K•StartOfExpansiont[vt: Terminal.Virtual, action: PROC, xmin: NAT _ 0, ymin: NAT _ 0, xmax: NAT _ 32767, ymax: NAT _ 32767]šœr˜rKšœ˜—K˜š   œžœžœ$žœžœ˜XK˜5Kšžœ'žœžœžœ˜:šžœ žœ˜Kšœ@˜@Kšœm˜mKšœ;˜;Kšžœw˜}Kšœ˜—šžœ˜KšœF˜Fšžœžœ˜'KšœF˜Fšœ"žœ˜BKšœ˜KšœZ˜ZKšœ˜Kšœ˜—KšœB˜BKšœp˜pšœ;˜;K™E—Kšžœy˜Kšœ˜—šžœ˜Kšœ;˜;Kšžœ@˜FK˜—K˜—K˜K˜—š œžœžœ˜;Kšœ'˜'K˜K˜—Kšžœ˜—…—Tb