DIRECTORY ColorDisplay, InterminalExtras USING [ColorDisplayOnLeft, SwitchSideOfColorDisplay], List USING [Car, Cdr, Cons], MonitorToolDefs USING [StartMonitor], Rope USING [Equal, ROPE], Terminal USING [ColorMode, Current, GetColorMode], UserProfile USING [Number, Token], ViewerClasses USING [Viewer], ViewerOps USING [ChangeColumn, CloseViewer, ComputeColumn, EnumerateViewers, EnumProc, OpenIcon], WindowManager USING [colorDisplayOn, ScreenPos, StartColorViewers, StopColorViewers]; ColorDisplayImpl: CEDAR PROGRAM IMPORTS InterminalExtras, List, MonitorToolDefs, Rope, Terminal, UserProfile, ViewerOps, WindowManager EXPORTS ColorDisplay ~ BEGIN bppLast: PUBLIC CARDINAL _ 8; onLeftLast: PUBLIC BOOLEAN _ TRUE; monitorTypeLast: PUBLIC Rope.ROPE _ "640x480"; DefaultBpp, Bpp: PUBLIC PROC RETURNS [bpp: CARDINAL] ~ { IF WindowManager.colorDisplayOn THEN { colorMode: Terminal.ColorMode _ Terminal.GetColorMode[Terminal.Current[]]; bpp _ (IF colorMode.full THEN 24 ELSE colorMode.bitsPerPixelChannelA); } ELSE bpp _ bppLast; bppLast _ bpp; --Remember the setting of the screen }; DefaultOnLeft, OnLeft: PUBLIC PROC RETURNS [onLeft: BOOLEAN] ~ { onLeft _ IF WindowManager.colorDisplayOn THEN InterminalExtras.ColorDisplayOnLeft[] ELSE onLeftLast; onLeftLast _ onLeft; }; DefaultOn: PUBLIC PROC RETURNS [BOOLEAN] ~ { RETURN[WindowManager.colorDisplayOn]; }; DefaultMonitorType: PUBLIC PROC RETURNS [Rope.ROPE] ~ { RETURN[monitorTypeLast]; }; SetColorDisplayStatus: PUBLIC PROC [on: BOOLEAN _ DefaultOn[], onLeft: BOOLEAN _ DefaultOnLeft[], bpp: CARDINAL _ DefaultBpp[], monitorType: Rope.ROPE _ DefaultMonitorType[]] ~ { SELECT TRUE FROM (on=WindowManager.colorDisplayOn AND bpp=Bpp[] AND monitorType=monitorTypeLast AND onLeft=OnLeft[]) => RETURN; (on=WindowManager.colorDisplayOn AND bpp=Bpp[] AND monitorType=monitorTypeLast AND on) => { InterminalExtras.SwitchSideOfColorDisplay[]; onLeftLast _ OnLeft[]; }; ENDCASE => TRUSTED { colorViewerList, colorIconList: LIST OF REF ANY _ NIL; --Really only viewers, tho ListColorViewers: PROC ~ TRUSTED { --Constructs a list of the color viewers EnumColorViewers: ViewerOps.EnumProc ~ TRUSTED { IF v.column=color THEN IF v.iconic THEN colorIconList _ List.Cons[v,colorIconList] ELSE colorViewerList _ List.Cons[v,colorViewerList]; }; ViewerOps.EnumerateViewers[enum: EnumColorViewers]; }; ReopenColorViewers: PROC ~ TRUSTED { --Reopen the listed color viewers reopenList: LIST OF REF ANY _ colorViewerList; WHILE reopenList#NIL DO v: ViewerClasses.Viewer _ NARROW[List.Car[reopenList]]; reopenList _ NARROW[List.Cdr[reopenList]]; ViewerOps.CloseViewer[v]; ViewerOps.ChangeColumn[v, color]; ViewerOps.OpenIcon[icon: v, paint: FALSE]; ENDLOOP; ViewerOps.ComputeColumn[color]; reopenList _ colorIconList; WHILE reopenList#NIL DO v: ViewerClasses.Viewer _ NARROW[List.Car[reopenList]]; reopenList _ NARROW[List.Cdr[reopenList]]; ViewerOps.ChangeColumn[v, color]; ENDLOOP; }; side: WindowManager.ScreenPos _ IF onLeft THEN left ELSE right; monitorTypeLast _ monitorType; --Back up the given parameters onLeftLast _ onLeft; bppLast _ bpp; ListColorViewers[]; WindowManager.StopColorViewers[]; IF on THEN { SELECT TRUE FROM Rope.Equal[s1: monitorType, s2: "640x480", case: FALSE] => MonitorToolDefs.StartMonitor[screenWidth: 640, screenHeight: 480, refreshRate: 30, bitsPerPixel: bpp, hBlankTime: 9.7, vBlankTime: 1250, pos: side]; Rope.Equal[s1: monitorType, s2: "1024x768", case: FALSE] => MonitorToolDefs.StartMonitor[screenWidth: 1024, screenHeight: 768, refreshRate: 30, bitsPerPixel: bpp, hBlankTime: 6, vBlankTime: 850, pos: side]; ENDCASE => WindowManager.StartColorViewers[screenPos: side, bitsPerPixel: bpp]; ReopenColorViewers[]; }; }; }; GetColorDisplayStatus: PUBLIC PROC RETURNS [on, onLeft: BOOLEAN, bpp: CARDINAL, monitorType: Rope.ROPE] ~ { on _ WindowManager.colorDisplayOn; onLeft _ OnLeft[]; bpp _ Bpp[]; monitorType _ monitorTypeLast; }; GetColorDisplayProfile: PUBLIC PROC RETURNS [on, onLeft: BOOLEAN, bpp: CARDINAL, monitorType: Rope.ROPE] ~ { RightOrLeft: PROC RETURNS[rl: Rope.ROPE] ~ INLINE { rl _ IF onLeftLast THEN "left" ELSE "right"}; tBpp: INTEGER; --Temporary bits per pixel on _ WindowManager.colorDisplayOn; SELECT tBpp _ UserProfile.Number["ColorDisplay.BitsPerPoint", Bpp[]] FROM 1,2,4,8,24 => bpp _ tBpp; ENDCASE => bpp _ Bpp[]; onLeft _ Rope.Equal[UserProfile.Token["ColorDisplay.Side", RightOrLeft[]], "left", FALSE]; monitorType _ UserProfile.Token["ColorDisplay.Type", monitorTypeLast]; }; Init: PROC[] RETURNS[] ~ { [,onLeftLast, bppLast, monitorTypeLast] _ GetColorDisplayProfile[]; }; Init[]; END. ColorDisplayImpl.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Created from old ColorDisplay by Mik Lamming and Ken Pier Last Edited by: Nickell, June 7, 1984 1:12:42 pm PDT Last Edited by: Beach, August 17, 1984 5:24:14 pm PDT Last Edited by: Pier, November 19, 1984 3:10:48 pm PST Doug Wyatt, January 23, 1985 3:01:09 pm PST Beach, March 3, 1985 4:01:07 pm PST bppLast and sideLast are examined only when the color display is off. This lets the ColorDisplay package know where to default them to when the color display is turned on again. NOTE: Every call to the ColorDisplay package will cause these values to be updated with the actual state of the machine, if it is on. Has side effect of remembering bpp Check for nothing changed Check for just switching sides. Otherwise, we need to check the whole ball of wax Reopen the viewers that were OPEN on the color display Reset the icons that WOULD have been opened on the color display back there Read the user profile to establish the initial back settings... Κ„˜code™Kšœ Οmœ7™BK™9K™4J™5J™6K™+J™#—K™šΟk ˜ Kšœ ˜ Kšœžœ0˜FKšœžœ˜Kšœžœ˜%Kšœžœ žœ˜Kšœ žœ$˜2Kšœ žœ˜"Kšœžœ ˜Kšœ žœR˜aKšœžœB˜U—K˜KšΠblœžœžœ˜ Kšžœ_˜fKšžœ ˜šœž˜K˜K™ΊKšœ žœžœ˜Kšœ žœžœžœ˜"Kšœžœžœ ˜.K˜K˜š Οn œ œžœžœžœžœ˜8Kšœ"™"šžœžœ˜&KšœJ˜JKšœžœžœžœ!˜FK˜—Kšžœ˜KšœΟc$˜8K˜K˜—š  œžœžœžœ žœ˜@šœ žœ˜(Kšžœ&˜*Kšžœ ˜—K˜˜K˜——š   œžœžœžœžœ˜,Kšžœ˜%K˜K˜—š  œžœžœžœžœ˜7Kšžœ˜K˜K˜—š œžœžœžœžœžœ#žœ˜²šžœžœž˜K™Kš œ!žœ žœžœžœ˜nK™šœ!žœ žœžœ ˜[Jšœ,˜,Jšœ˜Jšœ˜—K™1šžœžœ˜Kš œ žœžœžœžœžœ‘˜Qš œžœžœ‘(˜Mš œžœ˜0šžœž˜Kšžœ žœ+˜;Kšžœ0˜4—K˜—K˜3K˜—š œžœžœ‘!˜GKš œ žœžœžœžœ˜.K™6šžœ žœž˜Kšœžœ˜7Kšœ žœ˜*K˜K˜!Kšœ#žœ˜*Kšžœ˜—K˜K™KK˜šžœ žœž˜Kšœžœ˜7Kšœ žœ˜*K˜!Kšžœ˜—K˜—Kšœ žœžœžœ˜?Kšœ ‘˜>K˜K˜K™K˜K˜!šžœžœ˜ šžœžœž˜•StartOfExpansion[]šœ1žœ˜:Kšœ•˜•—–[]šœ2žœ˜;Kšœ“˜“—KšžœH˜O—K˜K˜—Kšœ˜——Kšœ˜K˜—š œžœžœžœžœžœžœ˜kKšœ"˜"Kšœ˜Kšœ ˜ Kšœ˜K˜K˜—š œžœžœžœžœžœžœ˜lš   œžœžœ žœžœ˜3Kšœžœ žœžœ ˜-—Kšœžœ‘˜+K˜Kšœ"˜"šžœ?ž˜IKšœ˜Kšžœ˜—KšœSžœ˜ZKšœF˜FKšœ˜K˜—š œžœžœ˜K™?K˜CK˜K˜—K˜—K˜Kšžœ˜—…—’