<> <> <> <> DIRECTORY CrRPC, RapunzelP2200V2; RapunzelP2200V2ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS RapunzelP2200V2 ~ { OPEN RapunzelP2200V2; <> Fault: PUBLIC FaultType ~ CODE; <> GetError: CrRPC.GetErrorProc ~ { SELECT errNum FROM 0 => { code: FaultCode; address: CARD32; code _ VAL[CrRPC.GetCard16[s]]; address _ CrRPC.GetCard32[s]; ERROR Fault[code, address] }; ENDCASE => { ERROR CrRPC.Error[h, remoteError, "Unexpected Remote Error"]; }; }; <> PokeSeqShort: PUBLIC PokeSeqShortType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; MProc1[h, s, valueSeq]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~4 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PokeLong: PUBLIC PokeLongType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; CrRPC.PutCard32[s, value]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~6 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; SetShftAddrs: PUBLIC SetShftAddrsType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, shftA]; CrRPC.PutCard32[s, shftB]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~8 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DoCmds: PUBLIC DoCmdsType ~ { PutArgs: CrRPC.PutArgsProc ~ { MProc2[h, s, cmdSeq]; }; GetResults: CrRPC.GetResultsProc ~ { resultSeq _ UProc3[h, s]; }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~7 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PeekLong: PUBLIC PeekLongType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; }; GetResults: CrRPC.GetResultsProc ~ { result _ CrRPC.GetCard32[s]; }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~5 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PeekSeqShort: PUBLIC PeekSeqShortType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; CrRPC.PutCard16[s, count]; }; GetResults: CrRPC.GetResultsProc ~ { resultSeq _ UProc4[h, s]; }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~3 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PeekShort: PUBLIC PeekShortType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; }; GetResults: CrRPC.GetResultsProc ~ { result _ CrRPC.GetCard16[s]; }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~1 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PokeShort: PUBLIC PokeShortType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; CrRPC.PutCard16[s, value]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~2, remoteProc~2 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; <> MProc1: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqShort] ~ { CrRPC.PutCard16[s, val.length]; FOR i5: CARDINAL IN [0..val.length) DO CrRPC.PutCard16[s, val.body[i5]]; ENDLOOP; }; UProc3: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqResult] ~ { { length7: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqResultObject[length7]]; FOR i6: CARDINAL IN [0..length7) DO res.body[i6] _ UProc8[h, s]; ENDLOOP; }; }; MProc2: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqCmd] ~ { CrRPC.PutCard16[s, val.length]; FOR i9: CARDINAL IN [0..val.length) DO MProc10[h, s, val.body[i9]]; ENDLOOP; }; MProc10: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: Cmd] ~ { CrRPC.PutCard16[s, ORD[val.type]]; WITH val SELECT FROM it: REF CmdObject.peekShort => { CrRPC.PutCard32[s, it^.peekShort.address]; }; it: REF CmdObject.pokeShort => { CrRPC.PutCard32[s, it^.pokeShort.address]; CrRPC.PutCard16[s, it^.pokeShort.value]; }; it: REF CmdObject.shftRead => { CrRPC.PutCard32[s, it^.shftRead.address]; CrRPC.PutCard16[s, it^.shftRead.numRepeats]; }; it: REF CmdObject.shftWrite => { CrRPC.PutCard32[s, it^.shftWrite.address]; CrRPC.PutCard16[s, it^.shftWrite.numRepeats]; }; it: REF CmdObject.returnLength => { CrRPC.PutCard16[s, it^.returnLength.returnLength]; }; ENDCASE; }; UProc4: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqShort] ~ { { length13: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqShortObject[length13]]; FOR i12: CARDINAL IN [0..length13) DO res.body[i12] _ CrRPC.GetCard16[s]; ENDLOOP; }; }; UProc8: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Result] ~ { { tag14: OpCode ~ VAL[CrRPC.GetCard16[s]]; SELECT tag14 FROM peekShort => { temp15: PeekShortResult; temp15.value _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.peekShort _ [peekShort[temp15]]] }; pokeShort => { temp15: PokeShortResult; temp15.null _ 0; res _ NEW[ResultObject.pokeShort _ [pokeShort[temp15]]] }; shftRead => { temp15: ShftReadResult; temp15.numRepeats _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.shftRead _ [shftRead[temp15]]] }; shftWrite => { temp15: ShftWriteResult; temp15.numRepeats _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.shftWrite _ [shftWrite[temp15]]] }; returnLength => { temp15: ReturnLengthResult; temp15.null _ 0; res _ NEW[ResultObject.returnLength _ [returnLength[temp15]]] }; ENDCASE => ERROR; }; }; }...