TempusUtilImpl.mesa
Copyright Ó 1985, 1992 by Xerox Corporation. All rights reserved.
Teitelman on June 22, 1983 9:21 am
Maxwell, January 5, 1984 2:12 pm
Pier, October 16, 1987 11:35:57 am PDT
Rick Beach, April 4, 1985 8:17:15 am PST
Brian Oki January 25, 1990 4:32:03 pm PST
DIRECTORY
AMBridge,
Commander,
IO,
PrintTV,
Rope,
Tempus;
TempusUtilImpl: CEDAR PROGRAM
IMPORTS <<AMBridge,>> Commander, IO, <<PrintTV,>> Rope, Tempus
= BEGIN OPEN Tempus;
SecondsPrintProc: PrintTV.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 IF t=BasicTime.nullGMT THEN stream.PutRope["nullGMT"]
ELSE stream.PutRope[MakeRope[time: t, precision: seconds, includeDayOfWeek: TRUE]];
};
PackedPrintProc: PrintTV.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 IF t=BasicTime.nullGMT THEN stream.PutRope["nullGMT"]
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 cmd.err.PutRope[err]
ELSE cmd.out.PutRope[MakeRope[time: t, includeDayOfWeek: TRUE]];
cmd.out.PutRope["\n"];
TRUSTED { when StoreInSymTab is implemented in CommandProcOps put this back.
UserExecPrivate.StoreInSymTab[value: AMBridge.TVForReferent[NEW[Packed ← t]], event: event, exec: exec];
};
};
PrintTV.RegisterTVPrintProc[type: CODE[Tempus.PackedSeconds], proc: SecondsPrintProc !
ANY => CONTINUE];
PrintTV.RegisterTVPrintProc[type: CODE[Tempus.Packed], proc: PackedPrintProc !
ANY => CONTINUE]; -- redefines printproc in basic system to include day of week.
Commander.Register["WhenIs", WhenIs, "For testing time.parse"];
END.