-- LutherWatcherImpl.mesa -- Last edited by -- Kolling on January 26, 1984 4:30:39 pm PST DIRECTORY AlpineEnvironment USING[FileStore], AlpInstance USING[Create, Failed, Handle], AlpTransaction USING[Create, OperationFailed], Commander USING[CommandProc, Register], Icons USING[IconFlavor, NewIconFromFile], IO USING[PutF, PutRope, rope], Process USING[Pause, SecondsToTicks], ProcessExtras USING[CheckForAbort], Rope USING[Equal, ROPE], RPC USING[CallFailed], LutherWatcherSpecialCache USING[NameIt], UserProfile USING[Boolean], ViewerClasses USING[ViewerClass, ViewerClassRec, Viewer], ViewerOps USING[CreateViewer, DestroyViewer, PaintViewer, RegisterViewerClass]; LutherWatcherImpl: CEDAR PROGRAM IMPORTS AlpI: AlpInstance, AlpT: AlpTransaction, Commander, Icons, IO, Process, ProcessExtras, Rope, RPC, LutherWatcherSpecialCache, UserProfile, ViewerOps SHARES LutherWatcherSpecialCache = BEGIN OPEN AE: AlpineEnvironment; fileStore: AE.FileStore _ "luther.alpine"; quiescent: Icons.IconFlavor _ Icons.NewIconFromFile[file: "LutherWatcher.icons", n: 0]; stillDownFlavor1: Icons.IconFlavor _ Icons.NewIconFromFile[file: "LutherWatcher.icons", n: 1]; stillDownFlavor2: Icons.IconFlavor _ Icons.NewIconFromFile[file: "LutherWatcher.icons", n: 2]; stillDownFlavor3: Icons.IconFlavor _ Icons.NewIconFromFile[file: "LutherWatcher.icons", n: 3]; stillDownFlavor4: Icons.IconFlavor _ Icons.NewIconFromFile[file: "LutherWatcher.icons", n: 4]; viewerClass: ViewerClasses.ViewerClass _ NEW[ViewerClasses.ViewerClassRec _ [icon: quiescent]]; LutherWatcherTool: ViewerClasses.Viewer; viewerName: Rope.ROPE _ "LutherWatcher"; firstFail: BOOLEAN _ TRUE; -- Commander.CommandProc TYPE = PROC [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL]; LutherWatcherProc: Commander.CommandProc = BEGIN ENABLE ABORTED => IF NOT firstFail THEN ViewerOps.DestroyViewer[LutherWatcherTool]; instHandle: AlpI.Handle _ NIL; lastMsg: Rope.ROPE _ NIL; DoNumber: PROCEDURE[what: Rope.ROPE] = BEGIN IF NOT Rope.Equal[lastMsg, what, TRUE] THEN BEGIN cmd.out.PutF["%g. ", IO.rope[what]]; lastMsg _ what; END; IF firstFail THEN BEGIN ViewerOps.RegisterViewerClass[$LutherWatcher, viewerClass]; LutherWatcherTool _ ViewerOps.CreateViewer[ flavor: $LutherWatcher, info: [ name: viewerName, iconic: TRUE, column: right, icon: quiescent, scrollable: FALSE ]]; firstFail _ FALSE; END; LutherWatcherTool.icon _ quiescent; ViewerOps.PaintViewer[LutherWatcherTool, all]; Process.Pause[10]; LutherWatcherTool.icon _ stillDownFlavor1; ViewerOps.PaintViewer[LutherWatcherTool, all]; Process.Pause[10]; LutherWatcherTool.icon _ stillDownFlavor2; ViewerOps.PaintViewer[LutherWatcherTool, all]; Process.Pause[10]; LutherWatcherTool.icon _ stillDownFlavor3; ViewerOps.PaintViewer[LutherWatcherTool, all]; Process.Pause[10]; LutherWatcherTool.icon _ stillDownFlavor4; ViewerOps.PaintViewer[LutherWatcherTool, all]; Process.Pause[20]; LutherWatcherTool.icon _ quiescent; ViewerOps.PaintViewer[LutherWatcherTool, all]; THROUGH [1..15] DO Process.Pause[Process.SecondsToTicks[6]]; ProcessExtras.CheckForAbort[]; ENDLOOP; END; firstFail _ TRUE; DO instHandle _ AlpI.Create[fileStore, , ! AlpI.Failed => SELECT why FROM grapevineDownOrCommunications => BEGIN DoNumber["Grapevine down or Ethernet problem"]; LOOP; END; alpineDownOrCommunications => BEGIN DoNumber["Luther down or Ethernet problem"]; LOOP; END; alpineDown => BEGIN DoNumber["Luther down"]; LOOP; END; ENDCASE;]; [] _ AlpT.Create[instHandle, TRUE ! RPC.CallFailed => SELECT why FROM timeout => BEGIN DoNumber["Luther down or Ethernet problem"]; LOOP; END; unbound => BEGIN DoNumber["Luther down"]; LOOP; END; ENDCASE; AlpT.OperationFailed => IF why = busy THEN BEGIN DoNumber["Luther busy"]; RETRY; END;]; cmd.out.PutRope["Luther up. "]; IF NOT firstFail THEN BEGIN IF UserProfile.Boolean["LutherWatcher.Armageddon", TRUE] THEN TRUSTED BEGIN LutherWatcherSpecialCache.NameIt[viewerName]; END; ViewerOps.DestroyViewer[LutherWatcherTool]; END; EXIT; ENDLOOP; END; -- main line code. Commander.Register["LutherWatcher", LutherWatcherProc, NIL, ]; END. Edit Log Initial: Kolling: July 18, 1983 2:28 pm Ê0˜JšƒÏc\œÏk œ"žœ'žœ7žœ3žœ.žœ1žœ-žœ5žœ%žœ"žœ7žœ%žœ(žœ@žœCÐblœžœžœžœžžœžœžœžœÏn œžœ  œQ œQ œQ œQ œQ  œžœ7 œ œ  œ  œžœžœ Ðck¡¡ ¡¡ ¡¡œ œžœ žœžœžœžœ žœ-  œžœ œžœ  œž œžœžœžœžœ žœžœ4žœžœž œžœžœ‰žœjžœ-ž œžœ œ²žœ žœQžœžœ œžœ žœ žœEžœžœFžœ0žœžœDžœ-žœžœ4žœžœžœžœ%žœžœžœžœ-žœžœžœ žœžœžœ ž œ#žœ žœžœžœžœžœžœžœžœžœžœ1žœžœžœžœ/žœ;ž.œžœœ9žœžœ}˜ (—…—"X