<> <> <> <> <> <<>> DIRECTORY AMTypes USING [nullType], IO USING [STREAM], PrincOps USING [BytePC, GlobalFrameHandle, PsbHandle]; SpyLog: DEFINITIONS = BEGIN <<>> <> <> active: READONLY BOOL; -- true iff the spy is open for writing. OpenForRead: PROC; <> <<>> OpenForWrite: PROC [spyOnSpyLog: BOOL _ FALSE]; <> <<>> Close: PROC; <> <<>> Print: PROC [stream: IO.STREAM _ NIL]; <> Entry: TYPE = MACHINE DEPENDENT RECORD [ SELECT type:{endOfLog, nullEntry, trace, data} FROM endOfLog => [fill: [0..16000)_0], -- marks the end of valid data nullEntry => [size: [0..16000)_0], -- indicates data to be skipped (used internally). trace => [ -- 6 words fill: [0..16000)_0, gfh: PrincOps.GlobalFrameHandle, pc: PrincOps.BytePC, process: PrincOps.PsbHandle, timestamp: CARD], data => [ -- 4 words + size size: [0..16000), rttype: CARDINAL, timestamp: CARD, data: SEQUENCE COMPUTED CARDINAL OF WORD], ENDCASE]; InvisibleProcesses: PROC RETURNS [writeProcess:PROCESS, extendProcess: PROCESS]; <> NextEntry: PROC RETURNS [LONG POINTER TO Entry]; <> WriteData: PROC [data: LONG POINTER, size: [0..8000], type: CARDINAL _ AMTypes.nullType]; <> WriteTrace: PROC [gfh: PrincOps.GlobalFrameHandle _ NIL, pc: PrincOps.BytePC _ [0]]; <> Here: PROC = INLINE {IF active THEN WriteTrace[]}; <> Error: ERROR; END. Bob Hagmann October 24, 1986 11:25:34 am PDT <>