DIRECTORY ColorMap, ImagerColorMap, InterminalBackdoor, Random, Rope, Terminal; ColorMapImpl: CEDAR PROGRAM IMPORTS ImagerColorMap, InterminalBackdoor, Random, Terminal EXPORTS ColorMap ~ { ColorDisplayNotReady: PUBLIC ERROR = CODE; vtSave: Terminal.Virtual _ NIL; InitVt: PROC RETURNS [vt: Terminal.Virtual] ~ { IF vtSave # NIL THEN RETURN[vtSave]; vt _ InterminalBackdoor.terminal; IF NOT vt.hasColorDisplay THEN ERROR ColorDisplayNotReady; IF Terminal.GetColorBitmapState[vt] = none OR Terminal.GetColorMode[vt].full THEN [] _ Terminal.SetColorMode[vt, [FALSE, 8, 0]]; vtSave _ vt; }; Set: PUBLIC PROC [cm: ColorMap.ColorMap] ~ { vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN [0..256) DO Terminal.SetColor[vt: vt, aChannelValue: i, red: cm[0][i], green: cm[1][i], blue: cm[2][i]]; ENDLOOP; }; Get: PUBLIC PROC RETURNS [cm: ColorMap.ColorMap] ~ { vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN [0..256) DO [cm[0][i], cm[1][i], cm[2][i]] _ Terminal.GetColor[vt: vt, aChannelValue: i]; ENDLOOP; }; FloodPrimary: PUBLIC PROC [gun: ImagerColorMap.Gun] ~ { vt: Terminal.Virtual _ InitVt[]; v: Terminal.ChannelValue _ ImagerColorMap.ApplyGamma[1., 2.2]; FOR i: INT IN [0..256) DO SELECT gun FROM red => Terminal.SetColor[vt: vt, aChannelValue: i, red: v, green: 0, blue: 0]; green => Terminal.SetColor[vt: vt, aChannelValue: i, red: 0, green: v, blue: 0]; blue => Terminal.SetColor[vt: vt, aChannelValue: i, red: 0, green: 0, blue: v]; ENDCASE; ENDLOOP; }; ClearColorMap: PUBLIC PROC ~ { vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN [0..256) DO Terminal.SetColor[vt: vt, aChannelValue: i, red: 0, green: 0, blue: 0]; ENDLOOP; }; PrimaryOnly: PUBLIC PROC [gun: ImagerColorMap.Gun] ~ { vt: Terminal.Virtual _ InitVt[]; r, g, b, v: Terminal.ChannelValue; FOR i: INT IN [0..256) DO v _ ImagerColorMap.ApplyGamma[i/255., 2.2]; SELECT gun FROM red => { r _ v; g _ b _ 0; }; green => { g _ v; r _ b _ 0; }; blue => { b _ v; r _ g _ 0; }; ENDCASE; Terminal.SetColor[vt: vt, aChannelValue: i, red: r, green: g, blue: b]; ENDLOOP; }; Flash: PUBLIC PROC ~ { vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN (0..256) DO Terminal.SetColor[vt: vt, aChannelValue: i, red: Random.ChooseInt[max: 255], green: Random.ChooseInt[max: 255], blue: Random.ChooseInt[max: 255]]; ENDLOOP; }; Mono: PUBLIC PROC ~ { vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN (0..256) DO Terminal.SetColor[vt: vt, aChannelValue: i, red: i, green: i, blue: i]; ENDLOOP; }; Gamma: PUBLIC PROC [gamma: REAL _ 2.2] ~ { out: Terminal.ColorValue; vt: Terminal.Virtual _ InitVt[]; FOR i: INT IN (0..256) DO out _ ImagerColorMap.ApplyGamma[i*(1./256.), gamma]; Terminal.SetColor[vt: vt, aChannelValue: i, red: out, green: out, blue: out]; ENDLOOP; }; Cycle: PUBLIC PROC [n: INT]~ { ii: INT; modulo: INT ~ 255; cm, cmnew: ColorMap.ColorMap; n _ ((n-1)MOD(modulo-1))+(IF n < 0 THEN -1 ELSE 1); IF n = 0 THEN RETURN; cm _ Get[]; FOR i: INT IN [1..modulo] DO ii _ ((i-1)+n) MOD modulo; IF ii < 0 THEN ii _ modulo+ii; ii _ ii+1; cmnew[0][ii] _ cm[0][i]; cmnew[1][ii] _ cm[1][i]; cmnew[2][ii] _ cm[2][i]; ENDLOOP; cmnew[0][0] _ cm[0][0]; cmnew[1][0] _ cm[1][0]; cmnew[2][0] _ cm[2][0]; Set[cmnew]; }; }. „ColorMapImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Bloomenthal, November 12, 1985 4:34:14 pm PST Κw˜šœ™Jšœ Οmœ1™˜>šžœžœžœ žœ˜šžœž˜JšœN˜NJšœP˜PJšœO˜OJšžœ˜——Jšžœ˜Jšœ˜—J˜š  œž œ˜Jšœ ˜ šžœžœžœ žœ˜JšœG˜G—Jšžœ˜Jšœ˜—J˜š  œž œ˜6Jšœ ˜ Jšœ"˜"šžœžœžœ žœ˜Jšœ+˜+šžœž˜Jšœ˜Jšœ˜Jšœ˜Jšžœ˜—JšœG˜G—Jšžœ˜Jšœ˜—J˜š œž œ˜Jšœž˜ šžœžœžœ žœ˜Jšœ’˜’—Jšžœ˜Jšœ˜J˜—š œž œ˜Jšœž˜ šžœžœžœ žœ˜JšœG˜GJšžœ˜—Jšœ˜J˜—šΠbnœžœžœ žœ ˜*Kšœ˜Jšœž˜ šžœžœžœ žœ˜Kšœ4˜4JšœM˜MJšžœ˜—Jšœ˜J˜—š‘œžœžœžœ˜Jšœžœ˜Jšœžœ˜Jšœ˜Jš œ žœ žœžœžœ˜3Jšžœžœžœ˜Jšœ ˜ šžœžœžœ ž˜Jšœžœ˜Jšžœžœ˜J˜ J˜J˜J˜Jšžœ˜—J˜J˜J˜J˜ J˜—J˜—J˜—…— b]