DIRECTORY ThisMachine, IO, ImagerPixelArray, ImagerSample, Terminal, InterminalBackdoor, ImagerSmoothContext, DicentraRS232CAsync, MessageWindow, JaM, JaMIPrivate, Imager, Rope; JaMIDunnImpl: CEDAR MONITOR IMPORTS IO, ThisMachine, ImagerPixelArray, ImagerSample, Rope, Terminal, InterminalBackdoor, ImagerSmoothContext, DicentraRS232CAsync, MessageWindow, JaM, JaMIPrivate EXPORTS JaMIPrivate ~ BEGIN DunnHost: Rope.ROPE ¬ "York"; DunnWS: Rope.ROPE ¬ "Reprisal"; Map: TYPE = ARRAY [0..255] OF NAT; cmdCode: TYPE = MACHINE DEPENDENT { videoInvertHigh (2EH), videoInvertLow (2FH), readyTest (3AH), statusRequest (3BH), expose8x5TimeReq (3CH), exposeAuxTimeReq (3DH), exposeAdjFactorReq (3EH), advAuxFrameCnt (3FH), reset8x10ExposeStat (40H), restoreFilterWheel (41H), recovDefaultVals (42H), select8x10Mode (43H), selectAuxMode (44H), selectBW (45H), selectColor (46H), selectNrmSeqMode (47H), selectSepSeqMode (48H), exposeSeq (49H), selectVidAndExpose (4AH), set8x10ExposeTimes (4BH), setAuxExposeTimes (4CH), setExposeAdjFactors (4DH), openAuxShutter (4EH), closeAuxShutter (4FH), unblankMonitor (50H), blankMonitor (51H), selectVideoChannel (52H), positionFilterWheel (53H), immExposeNoVidSw (54H), yAxisRasterCompOn (55H), yAxisRasterCompOff (56H), clearYAxisOffset (57H), stepYAxisOffset (58H), clearXAxisOffset (59H), stepXAxisOffset (5AH), select35mmAuxCam (5BH), select16mmAuxCam (5CH), select4x5AuxCam (5DH), selectSX70AuxCam (5EH), setNumPadChars (5FH), resetAuxNoFilmStats (60H), fastOn (61H), fastOff (62H) }; BuildFrame: PROC [action: PROC[Imager.Context]] RETURNS [pa: ImagerPixelArray.PixelArray] ~ { pa ¬ ImagerSmoothContext.MakePixelArray[ action: action, size: ImagerSample.MapFromFrameBuffer[ Terminal.GetColorFrameBufferA[ InterminalBackdoor.terminal ]].GetSize[], components: LIST[$Red, $Green, $Blue], blackBackground: TRUE ]; }; ApplyBuildFrame: PROC [self: JaM.State] ~ { action: PROC [ctx: Imager.Context] ~ { { ENABLE UNWIND => { info.ipenabled¬ FALSE }; info.ipenabled¬ TRUE; info.ipdc¬ ctx; JaM.Execute[self, x]; info.ipenabled¬ FALSE; }; }; info: JaMIPrivate.Info ¬ JaMIPrivate.GetInfo[self]; x: JaM.Any ~ JaM.Pop[self]; IF info = NIL THEN ERROR; JaM.Push[self, BuildFrame[action]]; }; SnapFrame: ENTRY PROC [self: JaM.State, copies:NAT, pa: ImagerPixelArray.PixelArray] ~ { ENABLE UNWIND => NULL; Open: PROC [host: Rope.ROPE ¬ NIL] RETURNS [stream: IO.STREAM] ~ { simulate ¬ TRUE; MessageWindow.Clear[]; IF ThisMachine.Name[].Equal[DunnWS, FALSE] THEN { MessageWindow.Append[" Opening connection.."]; stream ¬ DicentraRS232CAsync.CreateStream[host: host ! IO.Error, IO.EndOfStream => ERROR; DicentraRS232CAsync.CommError => ERROR; DicentraRS232CAsync.CommBusy => ERROR; ]; MessageWindow.Append[" Open"]; simulate ¬ FALSE } ELSE MessageWindow.Append[" Simulation"]; }; Close: PROC [stream: IO.STREAM] ~ { IF NOT simulate THEN { MessageWindow.Append[" Closing"]; IO.Flush[stream]; IO.Close[stream]; }; MessageWindow.Append[" Done"]; }; Cmd: PROC [code: cmdCode] ~ { IF simulate THEN RETURN []; IO.PutChar[s, LOOPHOLE[code, CHAR]]; IO.Flush[s]; IF NOT CheckReady[s] THEN ERROR; }; CheckReady: PROC [s: IO.STREAM] RETURNS [ok:BOOL ¬ TRUE] ~ { IO.PutChar[s, LOOPHOLE[cmdCode[readyTest], CHAR]]; IO.Flush[s]; IF IO.GetChar[s] # 'R THEN { MessageWindow.Append[" Not Ready"]; RETURN [FALSE]; }; IF IO.GetChar[s] # '\n THEN { MessageWindow.Append[" Not OK"]; RETURN [FALSE]; }; }; s: IO.STREAM; simulate: BOOLEAN ¬ FALSE; saveR, saveG, saveB: Map; vt: Terminal.Virtual ¬ InterminalBackdoor.terminal; screenSM: ImagerSample.SampleMap ¬ ImagerSample.MapFromFrameBuffer[Terminal.GetColorFrameBufferA[vt]]; oldScreenContentsSM: ImagerSample.SampleMap ¬ screenSM.Copy[]; { -- extra block to make vt in scope for abort ENABLE UNWIND => { FOR i: NAT IN [0..255] DO Terminal.SetColor[vt, i, 0, saveR[i], saveG[i], saveB[i]]; ENDLOOP; IF NOT simulate THEN Close[s]; }; s ¬ Open[DunnHost]; FOR i: NAT IN [0..255] DO [saveR[i], saveG[i], saveB[i]] ¬ Terminal.GetColor[vt, i, 0]; ENDLOOP; { ENABLE UNWIND => { Cmd[cmdCode[selectNrmSeqMode]]; Cmd[cmdCode[exposeSeq]]; Cmd[cmdCode[restoreFilterWheel]]; MessageWindow.Append[" aborted"]; screenSM.Transfer[oldScreenContentsSM]; }; MessageWindow.Append[" Snapping "]; Cmd[cmdCode[closeAuxShutter]]; Cmd[cmdCode[restoreFilterWheel]]; Cmd[cmdCode[selectSepSeqMode]]; -- set up red color map, restore image and expose it THROUGH [1..copies] DO IF JaM.GetAbort[self] THEN JaM.Error[Unimplemented, "Snapping ABORTED"]; FOR i: NAT IN [0..255] DO Terminal.SetColor[vt, i, 0, i, 0, 0]; ENDLOOP; pa.Transfer[i:0, dst: screenSM]; Cmd[cmdCode[exposeSeq]]; MessageWindow.Append[" R"]; -- set up green color map, restore image and expose it FOR i: NAT IN [0..255] DO Terminal.SetColor[vt, i, 0, 0, i, 0]; ENDLOOP; pa.Transfer[i:1, dst: screenSM]; Cmd[cmdCode[exposeSeq]]; MessageWindow.Append["G"]; -- set up blue color map, restore image and expose it FOR i: NAT IN [0..255] DO Terminal.SetColor[vt, i, 0, 0, 0, i]; ENDLOOP; pa.Transfer[i:2, dst: screenSM]; Cmd[cmdCode[exposeSeq]]; MessageWindow.Append["B"]; ENDLOOP; screenSM.Transfer[oldScreenContentsSM]; }; Close[s]; FOR i: NAT IN [0..255] DO Terminal.SetColor[vt, i, 0, saveR[i], saveG[i], saveB[i]]; ENDLOOP; }; }; ApplySnapFrame: PROC [self: JaM.State] ~ { WITH JaM.Pop[self] SELECT FROM pa: ImagerPixelArray.PixelArray => SnapFrame[self, JaM.PopInt[self], pa]; ENDCASE => ERROR JaM.Error[InvalidArgs, "SnapFrame needs a pixelarray as argument"]; }; RegisterDunn: PUBLIC PROC [self: JaM.State] ~ { JaM.Register[self, ".snapframe", ApplySnapFrame]; JaM.Register[self, ".buildframe", ApplyBuildFrame]; }; END. ‚ JaMIDunnImpl.mesa Copyright Σ 1985, 1992 by Xerox Corporation. All rights reserved. Last edited by: Mik Lamming - June 18, 1986 11:37:42 am PDT from RS232 Interface Specs for Dunn Models 631 and 632 Color Camera Systems -- Open a stream to the Dunn camera -- set up the color map as per user's spec. -- Close down the Dunn channel -- Reset the color maps as we found them Κ{•NewlineDelimiter –"cedarcode" style™™Icodešœ Οeœ6™BK™;—K˜KšΟk œ¨˜±K˜K˜šΠln œž ˜KšžœŸ˜¦Kšžœ ˜šœž˜K˜——Kšœžœ ˜Kšœ žœ˜K˜Kš œžœžœ žœžœ˜"Kšœ žœžœž œ˜#JšœO™OJ™Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ ˜ Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜Kšœ˜K˜K˜K˜K˜K˜K˜K˜K˜K˜Kšœ˜K˜K˜K˜Kšœ˜K˜K˜šΟn œžœ žœžœ&˜]˜(Kšœ˜šœ&˜&šœ˜Kšœ˜Kšœ ˜ ——Kšœ žœ˜&Kšœž˜Kšœ˜—K˜—K˜š œžœ˜+š œžœ˜&˜Kšžœžœžœ˜+Kšœžœ˜K˜Kšœ˜Kšœžœ˜K˜—Kšœ˜—K˜3K˜Kšžœžœžœžœ˜Kšœ#˜#K˜K˜—š  œžœžœžœ&˜XK˜Kšžœžœžœ˜K˜š œžœ žœžœžœ žœžœ˜BKšœ žœ˜Kšœ˜šžœ"žœžœ˜2Kšœ.˜.˜6Kšžœžœžœ˜"Kšœ!žœ˜'Kšœ žœ˜&K˜—Kšœ˜Kšœ ž˜K˜—šžœ˜Kšœ$˜$—Kšœ˜K˜—š œžœ žœžœ˜#šžœžœ žœ˜Kšœ!˜!Kšžœ˜Kšžœ˜K˜—Kšœ˜Kšœ˜—K˜š œžœžœ ˜Kšžœ žœžœ˜Kšžœ žœžœ˜%Kšžœ ˜ Kšžœžœžœžœ˜ K˜—K˜š  œžœžœžœžœžœžœ˜K˜šœΟc,˜.šžœžœ˜šžœžœžœ ž˜Kšœ:˜:Kšžœ˜Kšžœžœ žœ ˜K˜K˜——J™#˜K˜—K™+šžœžœžœ ž˜K˜=Kšžœ˜K˜—˜šžœžœ˜Kšœ˜Kšœ˜Kšœ!˜!Kšœ!˜!Kšœ'˜'K˜K˜—Kšœ#˜#Kšœ˜Kšœ!˜!Kšœ˜K˜˜4K˜—šžœ ž˜Kšžœžœ.˜Hšžœžœžœ ž˜Kšœ%˜%Kšžœ˜—Kšœ ˜ Kšœ˜Kšœ˜K˜K˜6šžœžœžœ ž˜Kšœ%˜%Kšžœ˜—Kšœ ˜ Kšœ˜Kšœ˜K˜K˜5šžœžœžœ ž˜Kšœ%˜%Kšžœ˜—Kšœ ˜ Kšœ˜Kšœ˜Kšžœ˜˜K˜——Kšœ'˜'K˜—K˜K™Kšœ ˜ K˜K™(šžœžœžœ ž˜Kšœ:˜:Kšžœ˜—K˜—K˜K˜K˜—Kš œžœ˜*˜šžœžœž˜KšœI˜IKšžœžœD˜T—K˜—K˜š  œžœžœ˜/Kšœ1˜1Kšœ3˜3K˜—K˜šžœ˜K˜—K˜—…—