<> <> DIRECTORY Atom, List, Protocols, Rope; ProtocolsImpl: CEDAR PROGRAM IMPORTS Atom, List, Rope EXPORTS Protocols = {OPEN Protocols; protocols: List.AList _ NIL; GetProtocol: PUBLIC PROC [name: ROPE] RETURNS [p: Protocol] = { a: ATOM _ Atom.MakeAtom[name]; p _ NARROW[List.Assoc[key: a, aList: protocols]]; IF p#NIL AND NOT name.Equal[p.name] THEN ERROR; }; RegProtocol: PUBLIC PROC [p: Protocol] = { a: ATOM _ Atom.MakeAtom[p.name]; protocols _ List.PutAssoc[key: a, val: p, aList: protocols]; }; EnumerateProtocols: PUBLIC PROC [Consume: PROC [Protocol]] ~ { FOR pl: List.AList _ protocols, pl.rest WHILE pl#NIL DO p: Protocol ~ NARROW[pl.first.val]; Consume[p]; ENDLOOP; RETURN}; }.