<<>> <> <> <> <> <> DIRECTORY Arpa USING [Address, nullAddress], ArpaUDP USING [nullPort, Port], SunRPC ; SunRPCOnUDP: CEDAR DEFINITIONS ~ { <> Address: TYPE ~ Arpa.Address; nullAddress: Address ~ Arpa.nullAddress; Port: TYPE ~ ArpaUDP.Port; nullPort: Port ~ ArpaUDP.nullPort; Handle: TYPE ~ SunRPC.Handle; Conversation: TYPE ~ SunRPC.Conversation; Server: TYPE ~ SunRPC.Server; <> <<>> <> <<>> Create: PROC [remoteAddress: Address ¬ nullAddress, remotePort: Port ¬ nullPort] RETURNS [h: Handle]; <> GetRemote: PROC [h: Handle] RETURNS [remoteAddress: Address, remotePort: Port]; <> <<>> SetRemote: PROC [h: Handle, remoteAddress: Address, remotePort: Port] RETURNS [newH: Handle]; <> <<>> GetReplyAddress: PROC [h: Handle] RETURNS [remoteAddress: Address, remotePort: Port]; <> <> OpenReader: PROC [block: REF TEXT] RETURNS [h: Handle]; <> OpenWriter: PROC [maxBytes: CARDINAL] RETURNS [h: Handle]; <> TextFromWriter: PROC [h: Handle] RETURNS [output: REF TEXT]; <> <> <> ServerProc: TYPE ~ SunRPC.ServerProc; <> <> <> <<>> CreateServer: PROC [pgm, version: CARD, serverProc: ServerProc, port: Port ¬ nullPort, concurrency: CARDINAL ¬ 1, clientData: REF ¬ NIL] RETURNS [s: Server]; <> <> GetServerPort: PROC [s: Server] RETURNS [port: Port]; <> <<>> }...