<> <> <<>> DIRECTORY EndOps USING []; EndOpsImpl: CEDAR MONITOR EXPORTS EndOps = BEGIN <> ProcList: TYPE = LIST OF PROC; registerList, registerTail: ProcList _ NIL; Register: PUBLIC ENTRY PROC[proc: PROC] = { prev: ProcList = registerTail; registerTail _ LIST[proc]; IF prev=NIL THEN registerList _ registerTail ELSE prev.rest _ registerTail; }; GetList: ENTRY PROC RETURNS[ProcList] = { list: ProcList = registerList; registerList _ registerTail _ NIL; -- flush registry now that we're done with it RETURN[list]; }; ProcessRegistry: PUBLIC PROC = { FOR l: ProcList _ GetList[], l.rest UNTIL l=NIL DO proc: PROC = l.first; proc[! ANY => CONTINUE]; ENDLOOP; }; END.