<> <> DIRECTORY Arpa USING [nullAddress], SunYPBind USING [Binding, DomainProc, NullProc, SetdomProc], SunYPBindServer USING [], SymTab USING [Create, Fetch, Ref, Store, Val] ; SunYPBindServerImpl: CEDAR PROGRAM IMPORTS SymTab EXPORTS SunYPBindServer ~ { <> Binding: TYPE ~ SunYPBind.Binding; <> Table: TYPE ~ SymTab.Ref; BindingEntry: TYPE ~ REF BindingObject; BindingObject: TYPE ~ RECORD [ binding: Binding, version: CARD ]; bindingTable: Table _ SymTab.Create[]; <> Null: PUBLIC SunYPBind.NullProc -- [h: Handle, c: Conversation] -- ~ { NULL }; Domain: PUBLIC SunYPBind.DomainProc -- [h: Handle, c: Conversation, domainName: DomainName] RETURNS [resp: ResponseBinding] -- ~ { b: BindingEntry; val: SymTab.Val; [val~val] _ SymTab.Fetch[bindingTable, domainName]; b _ NARROW[val]; IF (b # NIL) AND (b.binding.address # Arpa.nullAddress) THEN RETURN [ [success[b.binding]] ]; <> RETURN [ [failure[noServer]] ] }; Setdom: PUBLIC SunYPBind.SetdomProc -- [h: Handle, c: Conversation, req: RequestDomainBinding] -- ~ { <> [] _ SymTab.Store[bindingTable, req.domainName, NEW[BindingObject _ [req.binding, req.version]]]; }; }...