<> <> <> <> DIRECTORY CrRPC USING [Handle, CreateClientHandle], HostNickNameTable USING [LookUp], RapunzelP2200V2, Rope USING [ROPE], XNS USING [BYTE, unknownSocket], XNSAddressParsing USING [Address, AddressFromRope, MyAddress]; RapunzelSimpleClientImpl: CEDAR PROGRAM IMPORTS CrRPC, HostNickNameTable, XNSAddressParsing = BEGIN OPEN Rapunzel: RapunzelP2200V2; ROPE: TYPE = Rope.ROPE; BYTE: TYPE = XNS.BYTE; GetHandleForMe: PROC RETURNS [h: CrRPC.Handle] ~ { me: XNSAddressParsing.Address = XNSAddressParsing.MyAddress[]; RETURN[CrRPC.CreateClientHandle[$SPP, me, 0]]; }; GetOtherHandle: PROC[host: ROPE] RETURNS [h: CrRPC.Handle] ~ { netAddr: ROPE = HostNickNameTable.LookUp[host]; socket: XNSAddressParsing.Address = XNSAddressParsing.AddressFromRope[netAddr, XNS.unknownSocket]; RETURN[CrRPC.CreateClientHandle[$SPP, socket, 0]]; }; GetNet3DoradoHandle: PROC[f: BYTE] RETURNS [h: CrRPC.Handle] ~ { net3Dorado: XNSAddressParsing.Address = [net: [a: 0, b: 0, c: 0, d: 3], host: [a: 0, b: 0, c: 170, d: 81, e: 1, f: f], socket: [a: 0, b: 0]]; RETURN[CrRPC.CreateClientHandle[$SPP, net3Dorado, 0]]; }; PeekPokePeek: PROC[address: Rapunzel.Address, value: CARDINAL] RETURNS[sc: Rapunzel.SeqCmd] = TRUSTED { peek: Rapunzel.PeekShortCmd; poke: Rapunzel.PokeShortCmd; sc _ NEW[Rapunzel.SeqCmdObject [3]]; peek.address _ address; sc[0] _ sc[2] _ [peekShort[peek]]; poke.address _ address; poke.value _ value; sc[1] _ [pokeShort[poke]]; }; PokePoke: PROC[address: Rapunzel.Address, value: CARDINAL] RETURNS[sc: Rapunzel.SeqCmd] = TRUSTED { poke: Rapunzel.PokeShortCmd; sc _ NEW[Rapunzel.SeqCmdObject [2]]; poke.address _ address; poke.value _ value; sc[0] _ [pokeShort[poke]]; poke.address _ address + 1; poke.value _ value; sc[1] _ [pokeShort[poke]]; }; PokePeek: PROC[address: Rapunzel.Address, value: CARDINAL] RETURNS[sc: Rapunzel.SeqCmd] = TRUSTED { peek: Rapunzel.PeekShortCmd; poke: Rapunzel.PokeShortCmd; sc _ NEW[Rapunzel.SeqCmdObject [2]]; peek.address _ address; sc[1] _ [peekShort[peek]]; poke.address _ address; poke.value _ value; sc[0] _ [pokeShort[poke]]; }; PokePeekPeek: PROC[addr1, addr2: Rapunzel.Address, value: CARDINAL] RETURNS[sc: Rapunzel.SeqCmd] = TRUSTED { peek: Rapunzel.PeekShortCmd; poke: Rapunzel.PokeShortCmd; sc _ NEW[Rapunzel.SeqCmdObject [3]]; poke.address _ addr1; poke.value _ value; sc[0] _ [pokeShort[poke]]; peek.address _ addr1; sc[1] _ [peekShort[peek]]; peek.address _ addr2; sc[2] _ [peekShort[peek]]; }; PeekPoke: PROC[address: Rapunzel.Address, value: CARDINAL] RETURNS[sc: Rapunzel.SeqCmd] = TRUSTED { peek: Rapunzel.PeekShortCmd; poke: Rapunzel.PokeShortCmd; sc _ NEW[Rapunzel.SeqCmdObject [2]]; peek.address _ address; sc[0] _ [peekShort[peek]]; poke.address _ address; poke.value _ value; sc[1] _ [pokeShort[poke]]; }; PokeSeq: PROC[n: CARDINAL] RETURNS[seq: Rapunzel.SeqShort] = { seq _ NEW[Rapunzel.SeqShortObject [n]] }; END...