SpyClient.mesa
edited by: Maxwell November 29, 1983 11:27 am
see SpyDoc.tioga for instructions on how to use this interface
DIRECTORY
AMModel USING [Section],
IO USING [STREAM],
PrincOps USING [PsbNull, PsbIndex],
Rope USING [ROPE];
SpyClient: DEFINITIONS = BEGIN
OPEN Rope;
StackType: TYPE = CARDINAL [0..7);
DataType: TYPE = {CPU, process, breakProcess, pagefaults, allocations, wordsAllocated, userDefined};
-- common procedures --
InitializeSpy: PROC[
dataType: DataType ← CPU,
process: PrincOps.PsbIndex ← PrincOps.PsbNull, -- only used if dataType = process
spyOnSpyLog: BOOLFALSE] -- used by DisplayData
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: ROPENIL, -- client supplied herald (follows Cedar Spy of xxx)
stream: IO.STREAMNIL, -- a typescript is opened if stream = NIL
spyOnSpyLog: BOOLFALSE];
-- break procedures --
SetStartBreak: PROC[-- spy will be started whenever this break is encountered
section: AMModel.Section ← NIL,
procedure: ROPENIL, -- of form "ModuleIMPL.Proc"; only used if section = NIL
sourceIndex: INT ← 0] -- if sourceIndex # 0, then treat `procedure' as a filename.
RETURNS[ok: BOOLEAN, msg: ROPE];
SetStopBreak: PROC[ -- spy will be stopped whenever this break is encountered
section: AMModel.Section ← NIL,
procedure: ROPENIL,-- sets a break at the EXIT of the procedure
sourceIndex: INT ← 0] -- if sourceIndex # 0, then treat `procedure' as a filename.
RETURNS[ok: BOOLEAN, msg: ROPE];
ClearBreaks: PROC; -- clears stop and start breaks
SetUserBreak: PROC[ -- log a count whenever this break is encountered
section: AMModel.Section ← NIL,
type: StackType ← 0, -- allows the user to distinguish breaks
procedure: ROPENIL, -- of form "ModuleImpl.Proc"; only used if section = NIL
sourceIndex: INT ← 0] -- if sourceIndex # 0, then treat `procedure' as a filename.
RETURNS[ok: BOOLEAN, msg: ROPE];
SetTrace: PROC[ -- write a trace on the spy log whenever this break is encountered
section: AMModel.Section ← NIL,
procedure: ROPENIL, -- of form "ModuleImpl.Proc"; only used if section = NIL
sourceIndex: INT ← 0] -- if sourceIndex # 0, then treat `procedure' as a filename.
RETURNS[ok: BOOLEAN, msg: ROPE];
ClearUserBreaks: PROC; -- clears the traces, too.
END. .