<<>> <> <> <> <> <<>> DIRECTORY Process, SlackProcess, SlackProcessTypes; SlackProcessExtras: CEDAR DEFINITIONS = BEGIN ActionProc: TYPE = SlackProcess.ActionProc; SlackHandle: TYPE = SlackProcess.SlackHandle; <<>> Pause: PROC [handle: SlackHandle]; <> Continue: PROC [handle: SlackHandle]; <> PauseRequested: PROC [handle: SlackHandle] RETURNS [BOOL]; <> <<>> ProcessIsBusy: PROC [handle: SlackHandle] RETURNS [BOOL]; <> <<>> HasPaused: PROC [handle: SlackHandle] RETURNS [BOOL] = INLINE { RETURN[PauseRequested[handle] AND (NOT ProcessIsBusy[handle])]; }; WaitUntilPaused: PROC [handle: SlackHandle, timeoutTicks: Process.Ticks _ LAST[CARD32]] RETURNS [success: BOOL _ TRUE]; <> ProcessState: TYPE = {paused, idle, timeout}; WaitUntilPausedOrIdle: PROC [handle: SlackHandle, timeoutTicks: Process.Ticks _ LAST[CARD32]] RETURNS [state: ProcessState]; <> QueueReadOnly: PROC [handle: SlackHandle, callBack: ActionProc, inputAction: REF, clientData: REF, optimizeHint: REF, priority: Process.Priority _ LAST[CARD32]]; <> QueueOrTimeout: PROC [handle: SlackHandle, callBack: ActionProc, inputAction: REF, clientData: REF, optimizeHint: REF, timeoutTicks: Process.Ticks, priority: Process.Priority _ LAST[CARD32]] RETURNS [success: BOOL _ TRUE]; <> AllQueuedAreReadOnly: PROC [handle: SlackHandle] RETURNS [BOOL]; <> InspectProc: TYPE = PROC [qeGen: SlackProcessTypes.QueueEntryGenerator, actionsOnQueue: NAT]; InspectQueue: PROC [handle: SlackHandle, inspectProc: InspectProc]; <> END.