<> <> <> <> <> <<>> DIRECTORY Buttons, Commander USING [CommandProc, Register], Process, CKViewerButtons; CKViewerButtonsImpl: CEDAR PROGRAM IMPORTS CKViewerButtons, Buttons, Process, Commander EXPORTS CKViewerButtons = BEGIN CKViewer: TYPE = CKViewerButtons.CKViewer; CKViewerData: TYPE = CKViewerButtons.CKViewerData; <<>> Quit: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.quit _ TRUE; }; Bpp24: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bpp _ 24; ResetBPPButtons[ckv]; Buttons.SetDisplayStyle[ckv.buttons.twentyfourButton, $WhiteOnBlack]; }; Bpp8: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bpp _ 8; ResetBPPButtons[ckv]; Buttons.SetDisplayStyle[ckv.buttons.eightButton, $WhiteOnBlack]; }; Bpp4: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bpp _ 4; ResetBPPButtons[ckv]; Buttons.SetDisplayStyle[ckv.buttons.fourButton, $WhiteOnBlack]; }; Bpp2: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bpp _ 2; ResetBPPButtons[ckv]; Buttons.SetDisplayStyle[ckv.buttons.twoButton, $WhiteOnBlack]; }; Bpp1: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bpp _ 1; ResetBPPButtons[ckv]; Buttons.SetDisplayStyle[ckv.buttons.oneButton, $WhiteOnBlack]; }; AChan: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.aToggle _ TRUE; }; BChan: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bToggle _ TRUE; }; Slow: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.slow _ NOT ckv.state.slow; Buttons.SetDisplayStyle[ckv.buttons.slowButton, IF ckv.state.slow THEN $WhiteOnBlack ELSE $BlackOnWhite]; }; Freeze: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.freeze _ NOT ckv.state.freeze; Buttons.SetDisplayStyle[ckv.buttons.freezeButton, IF ckv.state.freeze THEN $WhiteOnBlack ELSE $BlackOnWhite]; IF NOT ckv.state.freeze THEN { --NOT freeze RESETS Scramble and Roll Buttons.SetDisplayStyle[ckv.buttons.scrambleButton, $BlackOnWhite]; Buttons.SetDisplayStyle[ckv.buttons.rollButton, $BlackOnWhite]; }; }; Scramble: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.freeze _ TRUE; ckv.state.scramble _ TRUE; Buttons.SetDisplayStyle[ckv.buttons.freezeButton, $WhiteOnBlack]; Buttons.SetDisplayStyle[ckv.buttons.scrambleButton, $WhiteOnBlack]; }; Roll: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.freeze _ TRUE; ckv.state.roll _ TRUE; Buttons.SetDisplayStyle[ckv.buttons.freezeButton, $WhiteOnBlack]; Buttons.SetDisplayStyle[ckv.buttons.rollButton, $WhiteOnBlack]; }; CKRandom: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.random _ TRUE; SetStaticButtons[ckv, ckv.buttons.randomButton]; }; Symmetric: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.symmetric _ TRUE; SetStaticButtons[ckv, ckv.buttons.symmetricButton]; }; Diag: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.diag _ TRUE; SetStaticButtons[ckv, ckv.buttons.diagButton]; }; TestPattern: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.testPattern _ TRUE; SetStaticButtons[ckv, ckv.buttons.testButton]; }; CBars: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.cbars _ TRUE; SetStaticButtons[ckv, ckv.buttons.cBarsButton]; }; Converge: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.converge _ TRUE; SetStaticButtons[ckv, ckv.buttons.convergeButton]; }; BigRed: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bigRed _ TRUE; SetStaticButtons[ckv, ckv.buttons.bigRedButton]; }; BigGreen: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bigGreen _ TRUE; SetStaticButtons[ckv, ckv.buttons.bigGreenButton]; }; BigBlue: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.bigBlue _ TRUE; SetStaticButtons[ckv, ckv.buttons.bigBlueButton]; }; SmallRed: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.smallRed _ TRUE; SetStaticButtons[ckv, ckv.buttons.smallRedButton]; }; SmallGreen: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.smallGreen _ TRUE; SetStaticButtons[ckv, ckv.buttons.smallGreenButton]; }; SmallBlue: PUBLIC Buttons.ButtonProc = { ckv: CKViewer _ NARROW[clientData]; ckv.state.smallBlue _ TRUE; SetStaticButtons[ckv, ckv.buttons.smallBlueButton]; }; ResetBPPButtons: PROC [ckv: CKViewer] = { Buttons.SetDisplayStyle[button: ckv.buttons.twentyfourButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.eightButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.fourButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.twoButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.oneButton, style: $BlackOnWhite]; }; SetStaticButtons: PUBLIC PROC [ckv: CKViewer, button: Buttons.Button] = { Buttons.SetDisplayStyle[button: ckv.buttons.randomButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.symmetricButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.diagButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.testButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.cBarsButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.convergeButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.bigRedButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.bigGreenButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.bigBlueButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.smallRedButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.smallGreenButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: ckv.buttons.smallBlueButton, style: $BlackOnWhite]; Buttons.SetDisplayStyle[button: button, style: $WhiteOnBlack]; }; ForkInit: Commander.CommandProc = { ckViewer: CKViewer; ckViewer _ CKViewerButtons.CreateCKViewer[]; TRUSTED { Process.Detach[FORK CKViewerButtons.Go[ckViewer]]; }; }; Commander.Register[key: "CKViewer", proc: ForkInit, doc: "ColorKinetic with viewer control panel"]; END.