SpyClient.mesa
edited by: Maxwell March 21, 1983 10:25 am
see spy.doc for instructions on how to use this interface
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;