DIRECTORY Imager, JaMIPrivate, JaMImager USING [Painter], JaMInternal USING [Frame], JaMOps USING [PopInteger, PopReal, RegisterExplicit, PopBoolean, defaultFrame, PushReal], ColorDisplay USING [SetCursorMode,curmode], ImagerColor, ColorMap, JaMImagerContexts USING [GProc], WindowManager USING[StartColorViewers, StopColorViewers, ScreenPos]; JaMIColorImpl: MONITOR IMPORTS Imager, JaMOps, ColorDisplay, ImagerColor, ColorMap, WindowManager, JaMIPrivate, JaMImager = { OPEN J: JaMOps, JaMInternal, P: JaMIPrivate, TDC: JaMImagerContexts; Painter: PROC[proc: TDC.GProc, frame: Frame _ NIL] = INLINE { JaMImager.Painter[proc,frame]}; maxIndex: INTEGER _ MaxIndex[]; TurnOnColor: PROC[frame: Frame] = { nbits: INTEGER _ J.PopInteger[frame.opstk]; SELECT nbits FROM 0 => WindowManager.StopColorViewers[]; 1 => WindowManager.StartColorViewers[screenpos,1]; 2 => WindowManager.StartColorViewers[screenpos,2]; 4 => WindowManager.StartColorViewers[screenpos,4]; 8 => WindowManager.StartColorViewers[screenpos,8]; 24 => WindowManager.StartColorViewers[screenpos,24]; ENDCASE; maxIndex _ MaxIndex[]; }; MaxIndex: PROC RETURNS[max: CARDINAL] = { max _ (SELECT ColorDisplay.curmode.bitsPerPixelA FROM 1 => 1, 2 => 3, 4 => 15, 8 => 255, ENDCASE => 0); }; TurnOffColor: PROC [frame: Frame] = {WindowManager.StopColorViewers[]}; screenpos: WindowManager.ScreenPos _ left; OnLeft: PROC [frame: Frame] = { onLeft: BOOLEAN _ J.PopBoolean[frame.opstk]; IF onLeft THEN screenpos _ left ELSE screenpos _ right; }; Rainbow: PROCEDURE [frame: Frame] = { i: NAT _ 2; scaler: REAL _ 1.0/maxIndex; ColorMap.StandardMap[]; --odd values are gray UNTIL i>maxIndex DO ColorMap.SetHSVColor[i,i*scaler,1,1]; i _ i+2; ENDLOOP; }; GrayMap: PROCEDURE [frame: Frame] = {ColorMap.GrayMap[]}; StandardMap: PROCEDURE [frame: Frame] = {ColorMap.StandardMap[]}; SetGamma: PROC [frame: Frame] = {ColorMap.SetGamma[J.PopReal[frame.opstk]]}; GetGamma: PROC [frame: Frame] = {J.PushReal[frame.opstk, ColorMap.GetGamma[]]}; SetRGBColorMap: PROC [frame: Frame] = { b: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; g: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; r: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; index: INTEGER _ J.PopInteger[frame.opstk]; index _ MAX[MIN[maxIndex,index],0]; [] _ ColorMap.SetRGBColor[index,r,g,b]; }; SetHSVColorMap: PROC [frame: Frame] = { v: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; s: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; h: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; index: INTEGER _ J.PopInteger[frame.opstk]; index _ MAX[MIN[maxIndex,index],0]; [] _ ColorMap.SetHSVColor[index,h,s,v]; }; GetMapValue: PROC [frame: Frame] = { index: INTEGER _ J.PopInteger[frame.opstk]; r,g,b: REAL; [r,g,b] _ ColorMap.GetColor[MAX[MIN[maxIndex,index],0]]; J.PushReal[frame.opstk,r/255.0]; J.PushReal[frame.opstk,g/255.0]; J.PushReal[frame.opstk,b/255.0]; }; GetColor: PROC [frame: Frame] = { info: P.Info _ P.GetInfo[frame]; h,s,v: REAL; color: Imager.Color; paint: TDC.GProc = { color _ Imager.GetColor[dc]}; Painter[paint,frame]; [h,s,v] _ ImagerColor.ColorToHSV[color]; J.PushReal[frame.opstk,h]; J.PushReal[frame.opstk,s]; J.PushReal[frame.opstk,v]; }; Red: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.red]}; Painter[paint,frame]}; Green: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.green]}; Painter[paint,frame]}; Blue: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.blue]}; Painter[paint,frame]}; Magenta: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.magenta]}; Painter[paint,frame]}; Cyan: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc, ImagerColor.cyan]}; Painter[paint,frame]}; Yellow: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.yellow]}; Painter[paint,frame]}; Black: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.black]}; Painter[paint,frame]}; White: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.white]}; Painter[paint,frame]}; Gray: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.IntensityToColor[.5]]}; Painter[paint,frame]; }; IColor: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.IntensityToColor[gray]]}; gray: REAL _ J.PopReal[frame.opstk]; gray _ MIN[MAX[0,gray],1]; Painter[paint,frame]; }; RGBColor: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.RGBToColor[r,g,b]]}; b: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; g: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; r: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; Painter[paint,frame]; }; HSVColor: PROC [frame: Frame] = { paint: TDC.GProc ={Imager.SetColor[dc,ImagerColor.HSVToColor[h,s,v]]}; v: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; s: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; h: REAL _ MAX[MIN[1,J.PopReal[frame.opstk]],0]; Painter[paint,frame]; }; JSetStipple: PROCEDURE [frame: Frame] = { paint: TDC.GProc ={Imager.SetStipple[dc, i]}; i: LONG INTEGER _ J.PopInteger[frame.opstk]; Painter[paint,frame]; }; BlackCursor: PROC [frame: Frame] = {ColorDisplay.SetCursorMode[zeros]}; WhiteCursor: PROC [frame: Frame] = {ColorDisplay.SetCursorMode[ones]}; frame: Frame _ JaMOps.defaultFrame; J.RegisterExplicit[frame,".turnoncolor"L,TurnOnColor]; J.RegisterExplicit[frame,".turnoffcolor"L,TurnOffColor]; J.RegisterExplicit[frame,".onleft"L,OnLeft]; J.RegisterExplicit[frame,".rainbow"L,Rainbow]; J.RegisterExplicit[frame,".graymap"L,GrayMap]; J.RegisterExplicit[frame,".standardmap"L,StandardMap]; J.RegisterExplicit[frame,".setgamma"L,SetGamma]; J.RegisterExplicit[frame,".getgamma"L,GetGamma]; J.RegisterExplicit[frame,".setrgbmap"L,SetRGBColorMap]; J.RegisterExplicit[frame,".sethsvmap", SetHSVColorMap]; J.RegisterExplicit[frame,".getmapvalue", GetMapValue]; J.RegisterExplicit[frame,".red", Red]; J.RegisterExplicit[frame,".green", Green]; J.RegisterExplicit[frame,".blue", Blue]; J.RegisterExplicit[frame,".magenta", Magenta]; J.RegisterExplicit[frame,".cyan", Cyan]; J.RegisterExplicit[frame,".yellow", Yellow]; J.RegisterExplicit[frame,".black", Black]; J.RegisterExplicit[frame,".white", White]; J.RegisterExplicit[frame,".gray", Gray]; J.RegisterExplicit[frame,".icolor", IColor]; J.RegisterExplicit[frame,".rgbcolor", RGBColor]; J.RegisterExplicit[frame,".hsvcolor", HSVColor]; J.RegisterExplicit[frame,".blackcursor", BlackCursor]; J.RegisterExplicit[frame,".whitecursor", WhiteCursor]; J.RegisterExplicit[frame,".getcolor", GetColor]; J.RegisterExplicit[frame,".stipple"L,JSetStipple]; }. °JaMIColorImpl.mesa last edited by Maureen Stone December 9, 1983 2:15 pm fully saturated rainbow in the even values. grays in the odd values Initialization starts here ÊL˜J˜Jšœ™Jšœ5™5šÏk ˜ J˜J˜ Jšœ œ ˜Jšœ œ ˜JšœœM˜YJšœ œ˜+J˜ J˜ Jšœœ ˜ Jšœœ1˜DJ˜—Jšœ˜Jšœ_˜fJšœœœœ˜DJ˜š Ïnœœœœœ˜=J˜J˜—Jšœ œ˜šž œœ˜$Jšœœœ˜+šœ˜J˜&J˜2J˜2J˜2J˜2J˜4Jšœ˜—˜J˜J˜——šžœœœœ˜)šœœ$œ˜6Jšœ#œ˜1—J˜J˜J˜—Jšž œœ6˜HJ˜*šžœœ˜ Jšœœœ˜,Jšœœœ˜7J˜J˜—Jšžœ œ˜&šœD™DJšœœ˜ Jšœœ˜JšœÏc˜-šœ œ˜J˜%J˜Jšœ˜—J˜J˜—Jšžœ œ'˜:Jšž œ œ+˜BJšžœœ%œ˜LJšžœœœ-˜OJ˜šžœœ˜'Jš œœœœœ˜/Jš œœœœœ˜/Jš œœœœœ˜/Jšœœœ˜+Jšœœœ˜#J˜'J˜J˜—šžœœ˜'Jš œœœœœ˜/Jš œœœœœ˜/Jš œœœœœ˜/Jšœœœ˜+Jšœœœ˜#J˜'J˜J˜—šž œœ˜$Jšœœœ˜+Jšœœ˜ Jšœœœ˜8Jšœ˜ Jšœ˜ Jšœ˜ J˜J˜—šžœœ˜!Jšœœœ˜ Jšœœ˜ J˜Jšœœ(˜2J˜J˜(Jšœ˜Jšœ˜Jšœ˜J˜J˜—šžœœ˜JšœœE˜O—šžœœ˜JšœœG˜Q—šžœœ˜JšœœF˜P—šžœœ˜ JšœœI˜S—šžœœ˜JšœœG˜Q—šžœœ˜JšœœH˜R—šžœœ˜JšœœG˜Q—šžœœ˜JšœœG˜Q—šžœœ˜Jšœœ?˜IJ˜J˜J˜—šžœœ˜JšœœA˜KJšœœœ˜$Jšœœœ ˜J˜J˜J˜—šžœœ˜!Jšœœ<˜FJš œœœœœ˜/Jš œœœœœ˜/Jš œœœœœ˜/J˜J˜J˜—šžœœ˜!Jšœœ<˜FJš œœœœœ˜/Jš œœœœœ˜/Jš œœœœœ˜/J˜J˜J˜—šž œ œ˜)Jšœœ#˜-Jšœœœœ˜,J˜J˜J˜J˜—Jšž œœ6˜GJšž œœ9˜JJ˜J˜Jšœ™˜J˜#J˜Jšœ5˜6Jšœ7˜8Jšœ+˜,Jšœ-˜.Jšœ-˜.Jšœ5˜6Jšœ/˜0Jšœ/˜0Jšœ6˜7Jšœ6˜7Jšœ5˜6Jšœ%˜&Jšœ)˜*Jšœ'˜(Jšœ-˜.Jšœ'˜(Jšœ+˜,Jšœ)˜*Jšœ)˜*Jšœ'˜(Jšœ+˜,Jšœ/˜0Jšœ/˜0Jšœ5˜6Jšœ5˜6Jšœ/˜0Jšœ1˜2J˜J˜—J˜J˜J˜J˜—…—Ô!Ð