<<>> <> <> <> <<>> DIRECTORY IO, BasicTime, Process, RuntimeError, CommanderSys, Rope; CommanderSysDImpl: CEDAR PROGRAM IMPORTS IO, BasicTime, Process, RuntimeError EXPORTS CommanderSys ~ BEGIN OPEN CommanderSys, Rope; ExtendedNow: PUBLIC PROC RETURNS [EGMT] = { RETURN [[BasicTime.Now[], 0]] }; GetEnv: PUBLIC PROC [key: ROPE] RETURNS [ROPE] = { RETURN [NIL] }; CurrentProcess: PUBLIC PROC RETURNS [PROCESS] = TRUSTED { RETURN [LOOPHOLE[Process.GetCurrent[]]]; }; AbortProcess: PUBLIC PROC [process: PROCESS] = TRUSTED { Process.Abort[process]; }; UNCAUGHTProtect: PUBLIC PROC [inner: PROC, rejectP: PROC [ROPE] RETURNS [BOOL]] RETURNS [ok: BOOL ¬ TRUE] = { inner[! RuntimeError.UNCAUGHT => IF rejectP[SigToRope[LOOPHOLE[signal]]] THEN REJECT ELSE {ok ¬ FALSE; CONTINUE}]; }; SigToRope: PROC [sig: SIGNAL ANY RETURNS ANY] RETURNS [ROPE] = { ref: REF SIGNAL ANY RETURNS ANY = NEW[SIGNAL ANY RETURNS ANY ¬ sig]; RETURN [IO.PutFR1["%g", [refAny[ref]]]] }; END.