<> <> <> <> <> DIRECTORY CrRPC USING [Handle, CreateClientHandle], XNSCH USING [LookupAddressFromRope], RapunzelP2200V2, Rope USING [ROPE], XNS USING [Address, GetThisHost, unknownAddress, unknownNet, unknownSocket]; RapunzelSimpleClientImpl: CEDAR PROGRAM IMPORTS CrRPC, XNS, XNSCH = BEGIN OPEN Rapunzel: RapunzelP2200V2; ROPE: TYPE = Rope.ROPE; GetHandleForMe: PROC RETURNS [h: CrRPC.Handle] ~ { me: XNS.Address ~ [net: XNS.unknownNet, host: XNS.GetThisHost[], socket: XNS.unknownSocket]; RETURN[CrRPC.CreateClientHandle[$SPP, me, 0]]; }; GetOtherHandle: PROC[host: ROPE] RETURNS [h: CrRPC.Handle] ~ { netAddr: XNS.Address _ XNSCH.LookupAddressFromRope[host].address; netAddr.socket _ XNS.unknownSocket; RETURN[CrRPC.CreateClientHandle[$SPP, netAddr, 0]]; }; GetNet3DoradoHandle: PROC[f: BYTE] RETURNS [h: CrRPC.Handle] ~ { net3Dorado: XNS.Address; net3Dorado _ XNS.unknownAddress; net3Dorado.net.d _ 3; net3Dorado.host _ [a: 0, b: 0, c: 170, d: 81, e: 1, f: f]; 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...