<> <> <> DIRECTORY BBObjectLocation USING [Location], IO USING [STREAM], PSB USING [PsbNull, PsbIndex], Rope USING [ROPE]; SpyClient: DEFINITIONS = BEGIN OPEN Rope; DataType: TYPE = {CPU, process, breakProcess, pagefaults, allocations, wordsAllocated, spaces, userDefined}; -- common procedures -- InitializeSpy: PROC[ dataType: DataType _ CPU, process: PSB.PsbIndex _ PSB.PsbNull] -- only used if dataType = process RETURNS[errorMsg: ROPE]; -- errorMsg = NIL indicates success StandardSpy: PROC = INLINE {IF InitializeSpy[].errorMsg # NIL THEN ERROR}; StartSpy: PROC; -- the spy records data whenever # starts exceeds # stops StopSpy: PROC; -- you must StartSpy to enable breaks DisplayData: PROC[ -- automatically stops Spy cutoff: CARDINAL _ 3, -- cutoff of printing (in percentage points) herald: ROPE _ NIL, -- client supplied herald (follows Cedar Spy of xxx) stream: IO.STREAM _ NIL]; -- a typescript is opened by default -- break procedures -- SetStartBreak: PROC[-- spy will be started whenever this break is encountered procedure: ROPE _ NIL, -- of form "ModuleIMPL.Proc"; only used if loc = NIL loc: BBObjectLocation.Location _ NIL] RETURNS[ok: BOOLEAN, msg: ROPE]; SetStopBreak: PROC[ -- spy will be stopped whenever this break is encountered procedure: ROPE _ NIL, -- sets a break at the EXIT of the procedure loc: BBObjectLocation.Location _ NIL] RETURNS[ok: BOOLEAN, msg: ROPE]; ClearBreaks: PROC; SetUserBreak: PROC[ -- log a count whenever this break is encountered procedure: ROPE _ NIL, -- of form "ModuleImpl.Proc"; only used if loc = NIL loc: BBObjectLocation.Location _ NIL] RETURNS[ok: BOOLEAN, msg: ROPE]; ClearUserBreaks: PROC; END. .