DIRECTORY BasicTime, GGError, IO, Labels, Process, Rope, ViewerClasses, ViewerIO, ViewerOps; GGErrorImpl: CEDAR PROGRAM IMPORTS BasicTime, IO, Labels, Process, Rope, ViewerIO, ViewerOps EXPORTS GGError = BEGIN Problem: PUBLIC SIGNAL [msg: Rope.ROPE] = CODE; MsgType: TYPE = GGError.MsgType; Viewer: TYPE = ViewerClasses.Viewer; gViewer: Viewer;-- there is now one global typescript managed by GGError gStream: IO.STREAM; -- there is now one global typescript managed by GGError typeAll: BOOL _ FALSE; GetTypescriptStream: PUBLIC PROC RETURNS [IO.STREAM] = { RETURN[gStream]; }; OpenTypescript: PUBLIC PROC [feedback: Viewer] = { IF gStream=NIL OR gViewer.destroyed THEN { gViewer _ ViewerOps.CreateViewer[ flavor: $TypeScript, info: [name: "Gargoyle TypeScript", menu: NIL, data: NIL, iconic: TRUE, column: right, scrollable: TRUE, icon: unInit], paint: FALSE]; ViewerOps.SetOpenHeight[gViewer, 120]; ViewerOps.OpenIcon[icon: gViewer, closeOthers: FALSE, bottom: TRUE, paint: TRUE]; [, gStream] _ ViewerIO.CreateViewerStreams["Gargoyle TypeScript", gViewer, NIL, TRUE]; IF feedback#NIL THEN PutF[feedback, oneLiner, "Gargoyle Typescript of %t", [time[BasicTime.Now[]]] ]; } ELSE IF feedback#NIL THEN Append[feedback, "Gargoyle Typescript already exists", oneLiner]; }; Append: PUBLIC PROC [feedback: Viewer, msg: Rope.ROPE, msgType: MsgType] = { AppendHerald[feedback, msg, msgType]; AppendTypescript[feedback, msg, msgType]; }; AppendHerald: PUBLIC PROC [feedback: Viewer, msg: Rope.ROPE, msgType: MsgType] = { clearHerald: BOOL _ msgType = oneLiner OR msgType = begin; addCR: BOOL _ msgType = oneLiner OR msgType = end; IF feedback#NIL THEN { -- If the feedback region has been created. oldRope: Rope.ROPE _ NARROW[feedback.class.get[feedback]]; IF Rope.Equal[msg, oldRope, FALSE] THEN RETURN; -- don't repeat messages IF clearHerald THEN Labels.Set[feedback, msg] ELSE Labels.Set[feedback, Rope.Concat[oldRope, msg]]; }; IF typeAll THEN AppendTypescript[feedback, msg, msgType]; }; AppendTypescript: PUBLIC PROC [feedback: Viewer, msg: Rope.ROPE, msgType: MsgType] = { clearHerald: BOOL _ msgType = oneLiner OR msgType = begin; addCR: BOOL _ msgType = oneLiner OR msgType = end; IF gStream#NIL THEN { -- there is (was) a typescript ENABLE IO.Error => { IF ec#StreamClosed THEN { IF feedback#NIL THEN { Append[feedback, ". . . Serious typescript IO Error", oneLiner]; Blink[feedback]; }; }; gStream _ NIL; -- stream got closed; probably user destroyed viewer CONTINUE; }; gStream.PutF[msg]; -- try writing to typescript IF addCR THEN gStream.PutChar[IO.CR]; }; }; ClearHerald: PUBLIC PROC [feedback: Viewer] = { IF feedback#NIL THEN Labels.Set[feedback, ""]; }; PutF: PUBLIC PROC [feedback: Viewer, msgType: MsgType, format: Rope.ROPE _ NIL, v1, v2, v3, v4, v5: IO.Value _ [null[]] ] = { msg: Rope.ROPE _ IO.PutFR[format, v1, v2, v3, v4, v5]; Append[feedback, msg, msgType]; }; PutFHerald: PUBLIC PROC [feedback: Viewer, msgType: MsgType, format: Rope.ROPE _ NIL, v1, v2, v3, v4, v5: IO.Value _ [null[]] ] = { msg: Rope.ROPE _ IO.PutFR[format, v1, v2, v3, v4, v5]; AppendHerald[feedback, msg, msgType]; }; PutFTypescript: PUBLIC PROC [feedback: Viewer, msgType: MsgType, format: Rope.ROPE _ NIL, v1, v2, v3, v4, v5: IO.Value _ [null[]] ] = { msg: Rope.ROPE _ IO.PutFR[format, v1, v2, v3, v4, v5]; AppendTypescript[feedback, msg, msgType]; }; Blink: PUBLIC PROC [feedback: Viewer] = { IF feedback#NIL THEN { Labels.SetDisplayStyle[feedback, $WhiteOnBlack]; Process.Pause[Process.MsecToTicks[150]]; Labels.SetDisplayStyle[feedback, $BlackOnWhite]; Process.Pause[Process.MsecToTicks[150]]; Labels.SetDisplayStyle[feedback, $WhiteOnBlack]; Process.Pause[Process.MsecToTicks[150]]; Labels.SetDisplayStyle[feedback, $BlackOnWhite]; }; }; END. &File: GGErrorImpl.mesa Last edited by: Eric Bier on January 27, 1987 10:07:01 pm PST Contents: Routines for handling user error messages throughout Gargoyle. Pier, October 24, 1986 2:00:58 pm PDT there is now one global typescript managed by GGError Remove any messages from the herald. Ê„˜Icode™K™=™HK™%—K™šÏk ˜ Kšœœ<˜RK˜—šÏn œœ˜Kšœ œ,˜AKšœ ˜K˜—Kš žœœœ œœ˜/˜Kšœ œ˜ Kšœœ˜$—K˜KšœÏc8˜HKšœ œœŸ8˜Lšœ œœ˜K˜—š žœœœœœœ˜8Kšœ ˜K˜K˜—šžœ œ˜2K™5šœ œœœ˜*šœ!˜!Kšœ˜Kš œ*œœ œœœ˜†—Kšœ&˜&Kšœ/œ œ œ˜QKšœKœœ˜VKšœ œœQ˜eKšœ˜—Kšœœ œœB˜[K˜K˜—šžœœœœ˜LKšœ%˜%Kšœ)˜)K˜K˜—šž œœœœ˜RKšœ œœ˜:Kšœœœ˜2šœ œœŸ+˜CKšœœœ˜:Kš œœœœŸ˜HKšœ œœ1˜cK˜—Kšœœ*˜9K˜K˜—šžœœœœ˜VKšœ œœ˜:Kšœœœ˜2šœ œœŸ˜4šœœ ˜šœœ˜šœ œœ˜Kšœ@˜@Kšœ˜K˜—K˜—Kšœ œŸ4˜CKšœ˜ Kšœ˜—KšœŸ˜/Kšœœœœ˜%K˜—K˜K˜—šž œœœ˜/K™$Kšœ œœ˜.K˜K˜—š žœœœ3œœœ˜}Kšœ œœ#˜6Kšœ˜K˜K˜—š ž œœœ3œœœ˜ƒKšœ œœ#˜6Kšœ%˜%K˜K˜—š žœœœ3œœœ˜ˆKšœ œœ#˜6Kšœ)˜)K˜K˜—šžœœœ˜)šœ œœ˜Kšœ0˜0Kšœ(˜(Kšœ0˜0Kšœ(˜(Kšœ0˜0Kšœ(˜(Kšœ0˜0Kšœ˜—K˜—K˜Kšœ˜—…—®X