<> <> <> <> DIRECTORY FS USING [Error, StreamOpen], TJaM USING [AtomFromRope, Error, ExecuteStream, Frame, PopRope, PushRope, RegisterPrimitive, ROPE, STREAM]; TJaMIOImpl: CEDAR PROGRAM IMPORTS FS, TJaM ~ BEGIN OPEN TJaM; badName: ATOM ~ AtomFromRope[".badname"]; fsError: ATOM ~ AtomFromRope[".fserror"]; ApplyRun: PROC[frame: Frame] = { fileName: ROPE ~ PopRope[frame]; errorAtom: ATOM _ NIL; stream: STREAM _ NIL; stream _ FS.StreamOpen[fileName ! FS.Error => { SELECT error.code FROM $unknownFile, $illegalName, $patternNotAllowed => errorAtom _ badName; ENDCASE => { PushRope[frame, error.explanation]; errorAtom _ fsError }; CONTINUE; }; ]; IF stream#NIL THEN ExecuteStream[frame, stream] ELSE ERROR Error[errorAtom]; }; RegisterPrimitive[".run", ApplyRun]; <<>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> END.