<> <> DIRECTORY Basics, Loader, PrincOps, PrincOpsUtils, Process, Terminal; ProcessWatch: CEDAR DEFINITIONS = { PsbIndex: TYPE = PrincOps.PsbIndex; nUsefulPsbs: CARDINAL = 256; UsefulPsbIndex: TYPE = PsbIndex[0 .. nUsefulPsbs); PsbHandle: TYPE = PrincOps.PsbHandle; PsbLink: TYPE = PrincOps.PsbLink; ProcessStateBlock: TYPE = PrincOps.ProcessStateBlock; PDA: PrincOps.PDABase = PrincOps.PDA; FrameHandle: TYPE = PrincOps.FrameHandle; ReadyVector: TYPE = PACKED ARRAY UsefulPsbIndex OF BOOL; readyVector: ReadyVector; Consumer: TYPE = RECORD [ Consume: PROC [data: REF ANY], data: REF ANY _ NIL]; AddConsumer: PROC [c: Consumer]; TooManyConsumers: ERROR; RemoveConsumer: PROC [c: Consumer]; NotFound: ERROR; Stack: TYPE = RECORD [ end: FrameIndex _ 0, wrapped: BOOL _ FALSE, frames: ARRAY FrameIndex OF Frame _ ALL[] <> <> <> ]; FrameIndex: TYPE = NAT [0 .. maxFrames); maxFrames: NAT = coolFrames + warmFrames; coolFrames: NAT = 8; warmFrames: NAT = 8; Frame: TYPE = RECORD [ repeat: RepeatCount _ 0, gf: PrincOps.GlobalFrameHandle _ NIL, pc: PrincOps.BytePC _ [0]]; RepeatCount: TYPE = [0 .. 64); ProcessHistories: TYPE = REF ProcessHistoryArray; ProcessHistoryArray: TYPE = ARRAY UsefulPsbIndex OF ProcessHistory; ProcessHistory: TYPE = RECORD [ lastPriority: Process.Priority _ 0, lastStack: Stack _ [] ]; GetHistory: PROC [pi: UsefulPsbIndex] RETURNS [ph: ProcessHistory]; }.