<<>> <> <> <> <> DIRECTORY MakeDo USING [End, Finder, NodeRep], MakeDoPrivate USING [ActionRep, NodeRep]; MakeDoFinders: CEDAR MONITOR EXPORTS MakeDo, MakeDoPrivate = <> <> BEGIN OPEN MakeDo, MakeDoPrivate; NodeRep: PUBLIC TYPE = MakeDoPrivate.NodeRep; ActionRep: PUBLIC TYPE = MakeDoPrivate.ActionRep; finders: LIST OF Finder _ NIL; AddFinder: PUBLIC ENTRY PROC [finder: Finder, end: End] = BEGIN ENABLE UNWIND => {}; SELECT end FROM front => finders _ CONS[finder, finders]; back => {fl: LIST OF Finder; IF finders = NIL THEN {finders _ LIST[finder]; RETURN}; FOR fl _ finders, fl.rest WHILE fl.rest # NIL DO NULL ENDLOOP; fl.rest _ LIST[finder]}; ENDCASE => ERROR; END; EnumerateFinders: PUBLIC ENTRY PROC [to: PROC [Finder] RETURNS [stop: BOOL]] = { ENABLE UNWIND => {}; FOR fl: LIST OF Finder _ finders, fl.rest WHILE fl # NIL DO IF to[fl.first] THEN EXIT; ENDLOOP; RETURN}; END.