<> DIRECTORY AMBridge USING [IsRemote, TVToLC], Commander USING [Register, CommandProc], CommandProcOps USING [EventFailed], IO USING [AttachTVPrintProc, PutRope, STREAM, TVPrintProc], Rope USING [Cat, Substr, ROPE], Tempus USING [Packed, Unintelligible, PackedSeconds, SecondsToPacked, MakeRope, defaultTime, Parse], ViewerClasses USING [Viewer], ViewerOps USING [FindViewer, DestroyViewer] ; TempusUtilImpl: CEDAR PROGRAM IMPORTS AMBridge, Commander, CommandProcOps, IO, Rope, Tempus, ViewerOps = BEGIN OPEN Tempus; SecondsPrintProc: IO.TVPrintProc = TRUSTED { -- AMBridge s: Tempus.PackedSeconds; t: Tempus.Packed; IF AMBridge.IsRemote[tv] THEN ERROR; -- shouldnt be called. TVPrintProc says can't handle remote. s _ LOOPHOLE[AMBridge.TVToLC[tv]]; t _ SecondsToPacked[s]; IF t = defaultTime THEN stream.PutRope["{current time}"] ELSE stream.PutRope[MakeRope[time: t, precision: seconds, includeDayOfWeek: TRUE]]; }; PackedPrintProc: IO.TVPrintProc = TRUSTED { -- AMBridge t: Tempus.Packed; IF AMBridge.IsRemote[tv] THEN ERROR; -- shouldnt be called. TVPrintProc says can't handle remote. t _ LOOPHOLE[AMBridge.TVToLC[tv]]; IF t = defaultTime THEN stream.PutRope["{current time}"] ELSE stream.PutRope[MakeRope[time: t, precision: seconds, includeDayOfWeek: TRUE]]; }; WhenIs: Commander.CommandProc = { err: Rope.ROPE; t: Packed; [t, ] _ Parse[cmd.commandLine ! Unintelligible => { err _ SELECT ec FROM invalid => "Invalid", tooVague => "Too Vague", overConstrained => "Over Constrained", nothingSpecified => "Not a time", notImplemented => "Not Implemented", ENDCASE => ERROR; IF vicinity # -1 THEN err _ Rope.Cat[ err, ": ", Rope.Substr[base: rope, len: vicinity], "<>", Rope.Substr[base: rope, start: vicinity] ]; CONTINUE; }; ]; IF err # NIL THEN CommandProcOps.EventFailed[handle: cmd, msg: err]; cmd.out.PutRope[MakeRope[time: t, includeDayOfWeek: TRUE]]; <> <> <<};>> }; <> <> <> <<[t, ] _ Parse[event.commandLine !>> < {>> <> < "Invalid",>> < "Too Vague",>> < "Over Constrained",>> < "Not a time",>> < "Not Implemented",>> < ERROR;>> <> <> <<": ",>> <> <<"<>",>> <> <<];>> <> <<};>> <<]; >> <> <> <> <> <<};>> <<};>> IO.AttachTVPrintProc[type: CODE[Tempus.PackedSeconds], tvPrintProc: SecondsPrintProc, canHandleRemote: FALSE ! ANY => CONTINUE]; IO.AttachTVPrintProc[type: CODE[Tempus.Packed], tvPrintProc: PackedPrintProc, canHandleRemote: FALSE ! ANY => CONTINUE]; -- redefines printproc in basic system so that includes day of week. Commander.Register["WhenIs", WhenIs, "For testing time.parse"]; {oldClock: ViewerClasses.Viewer _ ViewerOps.FindViewer["Clock"]; -- going to load myclock so pretendits works. IF oldClock # NIL THEN ViewerOps.DestroyViewer[oldClock]; }; END.