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
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.
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