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.  MakeDoFinders.Mesa Copyright Σ 1991 by Xerox Corporation. All rights reserved. Last tweaked by Mike Spreitzer on September 8, 1987 3:26:43 pm PDT Eduardo Pelegri-Llopart October 21, 1988 1:22:01 pm PDT JKF January 11, 1989 9:57:02 am PST INVARIANT finders lists Finders. Κ1•NewlineDelimiter –(cedarcode) style™code™Kšœ Οeœ1™Kšœ žœ ˜—Kšžœžœ˜—Kšžœ˜—K˜š œžœžœžœžœ žœžœ˜PKšžœžœ˜š žœžœžœžœžœž˜;Kšžœžœžœ˜Kšžœ˜—Kšžœ˜—K˜Kšžœ˜—…—f―