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 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. Κ!•NewlineDelimiter – "cedar" style™code™Kšœ?Οk™BKšœ4™7Kšœ ™#—K˜š ˜ Jšœœ˜$Jšœœ˜)—K˜šΡbnx œœ˜Kšœ˜Kšœ˜š ™ K™——K˜Kšœœ˜!K˜Kšœ œœ˜-Kšœ œœ˜1K˜Kšœ œœ œ˜K˜šΟn œœœœ˜9Kšœœœ˜šœ˜Kšœœ˜)šœ œœ˜Kš œ œœ œ œ˜7Kš œœ œœœœ˜>Kšœ œ ˜—Kšœœ˜—Kšœ˜—K˜šŸœœœœœ œœ˜PKšœœ˜š œœœœœ˜;Kšœœœ˜Kšœ˜—Kšœ˜—K˜Kšœ˜—…—fa