<> <> <> DIRECTORY Basics USING [ BITAND ], Commander USING [ Handle ], IO USING [ STREAM ], Rope USING [ ROPE ], SpyLog USING [ Here ] ; Log: CEDAR DEFINITIONS IMPORTS Basics, SpyLog = { <> PD: TYPE = RECORD [ attended: BOOLEAN_FALSE, sysIn: IO.STREAM, sysOut: IO.STREAM, -- IOs for error and system status reporting ch: Commander.Handle_NIL ]; pd: REF PD; <> ROPE: TYPE=Rope.ROPE; <> LogProc: TYPE = PROC[group: CARDINAL_1, info: LogInfo_[]]; LogInfo: TYPE = RECORD[ logCode: LogCode_none, logD1: LONG CARDINAL_0, logD2: LONG CARDINAL_0]; LogCode: TYPE = { none, data, before, after, during, dataSmarts, dataParty, dataConv, lc1, lc2, lc3, lc4, lc5, lc6 }; loggingGroups: CARDINAL; WriteData: PROC[info: LogInfo]; LOG: LogProc = TRUSTED INLINE { IF Basics.BITAND[group, loggingGroups]#0 THEN { WriteData[info]; SpyLog.Here[]; }; }; SLOG: PROC[group: CARDINAL_1] = TRUSTED INLINE { IF Basics.BITAND[group, Log.loggingGroups]#0 THEN { Noop[]; SpyLog.Here[]; }; }; Noop: PROC; DoLog: PROC[groups: CARDINAL_177777B]; <> <> <> <> <> WhereToReport: TYPE=ATOM; ThHandle: TYPE = LONG CARDINAL -- Thrush.ThHandle --; nullHandle: ThHandle = 0; WhereProc: TYPE = PROC[fixedWhereData: REF, whereData: REF] RETURNS[s: IO.STREAM_NIL]; DNFProc: TYPE = PROC[fixedWhereData: REF, whereData: REF] RETURNS[default: BOOL]; RegisterWhereToReport: PROC[ proc: WhereProc_NIL, where: WhereToReport, fixedWhereData: REF_NIL, defaultIfNotFound: DNFProc_NIL]; <> FindWhere: PROC[where: WhereToReport, whereData: REF] RETURNS [s: IO.STREAM_NIL]; Report: PROC[remark: ROPE, where: WhereToReport_NIL, whereData: REF _NIL]; Problem: PROC[ remark: ROPE_NIL, where: WhereToReport_NIL, whereData: REF _NIL]; ProblemBool: PROC[remark: ROPE_NIL, where: WhereToReport_NIL, bool: BOOL_FALSE, whereData: REF_NIL] RETURNS[sameBool: BOOL]; ProblemHandle: PROC[remark: ROPE_NIL, where: WhereToReport_NIL, handle: ThHandle _ nullHandle, whereData: REF_NIL] RETURNS[sameHandle: ThHandle]; <> <> <<>> CLog: TYPE = REF CLogBody; CLogBody: TYPE = RECORD [ logStream: IO.STREAM, logReadPos: INT_0, CommandProc: PROC[CLog] <> <> ]; MakeCLog: PROC[fileName: ROPE, CommandProc: PROC[CLog]] RETURNS[cLog: CLog]; WriteCLog: PROC[cLog: CLog, entry: ROPE]; DoCLog: PROC[cLog: CLog, entry: ROPE]; <> RedoCLog: PROC[cLog: CLog]; <> }.