DIRECTORY BasicTime USING [Now, Period, Update], Commander USING [CommandProc, Register], IO USING[PutRope, STREAM], MyClock USING [ChangeAllOffSets], Process USING [Detach, Pause, SecondsToTicks], RememberDefs, RememberDefsPrivate USING [itIsNow, EnterEventMinder], Rope USING[ROPE, Equal, Cat, Substr], PrincOpsUtils USING [IsBound], Tempus USING [defaultTime, MakeRope, Packed, Parse, Unintelligible] ; RememberUtilImpl: CEDAR MONITOR IMPORTS BasicTime, Commander, IO, PrincOpsUtils, Process, Rope, Tempus, RememberDefsPrivate, MyClock SHARES RememberDefsPrivate, MyClock = BEGIN PretendIts: Commander.CommandProc = TRUSTED { -- for debugging err: Rope.ROPE; t: Tempus.Packed; t _ Tempus.Parse[cmd.commandLine, RememberDefsPrivate.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[err]; IF PrincOpsUtils.IsBound[MyClock.ChangeAllOffSets] THEN MyClock.ChangeAllOffSets[BasicTime.Period[BasicTime.Now[], t]]; RememberDefsPrivate.EnterEventMinder[BasicTime.Update[t, 1]]; -- + 1 so you can say remember .. at noon, then pretendits noon to see it get fired off IF PrincOpsUtils.IsBound[MyClock.ChangeAllOffSets] THEN Process.Detach[FORK LeaveItUpForAWhile[]]; cmd.out.PutRope[Tempus.MakeRope[time: t, includeDayOfWeek: TRUE]]; }; howLong: LONG CARDINAL _ 5; LeaveItUpForAWhile: PROCEDURE = TRUSTED { Process.Pause[Process.SecondsToTicks[howLong]]; MyClock.ChangeAllOffSets[0]; }; ItIsNow: Commander.CommandProc = { -- for debugging IF Rope.Equal[cmd.commandLine, "\n"] THEN { RememberDefsPrivate.itIsNow _ Tempus.defaultTime; cmd.out.PutRope["{current time}"]; } ELSE { t: Tempus.Packed = Tempus.Parse[cmd.commandLine, RememberDefsPrivate.itIsNow].time; RememberDefsPrivate.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[Tempus.MakeRope[time: t, includeDayOfWeek: TRUE]]; }; }; Commander.Register["PretendIts", PretendIts, "Pretend its ... for purposes of posting a reminder. (A temporary change.)"]; 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. ¸ReminderImpl.mesa. See Remember.Tioga for documentation and examples of how to use the Remember package. Last Edited by: Teitelman, September 15, 1983 11:00 am Last Edited by: Maxwell, January 6, 1984 2:09 pm Edited on September 15, 1983 10:59 am, by Teitelman changes pretendits to catch signals from tempus changes to: PretendIts  Edited on January 6, 1984 2:08 pm, by Maxwell changes to: DIRECTORY, IMPORTS, PretendIts, ItIsNow ʘJ™hJ™6J™0šÏk ˜ Jšœ œ˜&Jšœ œ˜(Jšœœ œ˜Jšœœ˜!Jšœœ!˜.Jšœ ˜ Jšœœ˜6Jšœœœ˜%Jšœœ ˜Jšœœ7˜CJšœ˜J˜—J˜šÐlnœœ˜J˜—J˜JšœœF˜fJ˜Jšœ˜#J˜šœœ˜ J˜—šÏn œœÏc˜?Jšœ œ˜Jšœ˜šœ?˜?šœ˜šœœ˜Jšœ˜Jšœ˜Jšœ&˜&Jšœ!˜!Jšœ$˜$Jšœ˜—šœœ˜%Jšœ˜J˜Jšœ'˜'J•StartOfExpansion9[base: ROPE, start: INT _ 0, len: INT _ 2147483647]˜J˜(Jšœ˜—Jšœ˜ J˜—Jšœ˜—Jšœœœ˜'Jšœ1œ@˜wJšœ= X˜•Jšœ1œœ˜bJšœ;œ˜BJ˜—J˜JšŸœœœ˜J˜šŸœ œœ˜*J˜/Jšœ˜J˜—J˜šŸœ ˜4šœ#œ˜+Jšœ1˜1Jšœ"˜"J˜—šœ˜JšœS˜SJšœ5 X˜Jšœ;œ˜BJšœ˜—J˜—J˜J˜zJ˜˜Ã˜J˜——J˜Jšœ˜J˜J˜™3J™/Jšœ Ïr œ¡™—™-Jšœ ¡'™3—J™—…— $í