<> <> <> <> <<>> DIRECTORY BasicTime USING [Update], Commander USING [CommandProc, Register], IO USING[PutRope, STREAM], Remember, RememberPrivate USING [itIsNow, EnterEventMinder], Rope USING[ROPE, Equal, Cat, Substr, Concat, Find], Tempus USING [defaultTime, MakeRope, Packed, Parse, Unintelligible]; RememberUtilImpl: CEDAR MONITOR IMPORTS BasicTime, Commander, IO, Rope, Tempus, RememberPrivate SHARES RememberPrivate = BEGIN ShowReminders: Commander.CommandProc = TRUSTED { earlyRope, lateRope, err: Rope.ROPE; earlyIndex: INT; early, late: Tempus.Packed; IF (earlyIndex _ Rope.Find[s1: cmd.commandLine, s2: "UpTo", case: FALSE])#-1 THEN { earlyRope _ Rope.Substr[base: cmd.commandLine, len: earlyIndex]; lateRope _ Rope.Substr[base: cmd.commandLine, start: earlyIndex]; } ELSE err _ "Syntax: ShowReminders UpTo "; IF err=NIL THEN { early _ Tempus.Parse[earlyRope, RememberPrivate.itIsNow ! Tempus.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; }; ].time; late _ Tempus.Parse[lateRope, RememberPrivate.itIsNow ! Tempus.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; }; ].time; }; IF err # NIL THEN cmd.err.PutRope[Rope.Concat[err, "\n"]] ELSE { RememberPrivate.EnterEventMinder[BasicTime.Update[early, 1], late]; -- + 1 so you can say remember .. at noon, then pretendits noon to see it get fired off cmd.out.PutRope[Rope.Cat[Tempus.MakeRope[time: early, includeDayOfWeek: TRUE], " UpTo ", Tempus.MakeRope[time: late, includeDayOfWeek: TRUE], "\n"]]; }; }; PretendIts: Commander.CommandProc = TRUSTED { -- for debugging err: Rope.ROPE; t: Tempus.Packed; t _ Tempus.Parse[cmd.commandLine, RememberPrivate.itIsNow ! Tempus.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; }; ].time; IF err # NIL THEN cmd.err.PutRope[Rope.Concat[err, "\n"]] ELSE { RememberPrivate.EnterEventMinder[BasicTime.Update[t, 1]]; -- + 1 so you can say remember .. at noon, then pretendits noon to see it get fired off cmd.out.PutRope[Rope.Concat[Tempus.MakeRope[time: t, includeDayOfWeek: TRUE], "\n"]]; }; }; ItIsNow: Commander.CommandProc = { -- for debugging IF Rope.Equal[cmd.commandLine, "\n"] THEN { RememberPrivate.itIsNow _ Tempus.defaultTime; cmd.out.PutRope[Rope.Concat["{current time}", "\n"]]; } ELSE { t: Tempus.Packed = Tempus.Parse[cmd.commandLine, RememberPrivate.itIsNow].time; RememberPrivate.itIsNow _ BasicTime.Update[t, 1]; -- + 1 so you can say remember .. at noon, then pretendits noon to see it get fired off cmd.out.PutRope[Rope.Concat[Tempus.MakeRope[time: t, includeDayOfWeek: TRUE], "\n"]]; }; }; Commander.Register["PretendIts", PretendIts, "Pretend its ... for purposes of posting a reminder. (A temporary change.)"]; Commander.Register["ShowReminders", ShowReminders, "ShowReminders UpTo "]; Commander.Register["ShowRem", ShowReminders, "ShowReminders UpTo "]; Commander.Register["ItIsNow", ItIsNow, "Pretend its ... for purposes of registration as well as posting a reminder. (A permanent change, i.e. must explicitly be restored by typing ItIsNow{cr})"]; END. << Change Log:>> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>>