<> <> <> <> DIRECTORY CrRPC, RapunzelP2200V4; RapunzelP2200V4ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS RapunzelP2200V4 ~ { OPEN RapunzelP2200V4; <> 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~4, remoteProc~6 , 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~4, remoteProc~8 , 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~4, remoteProc~10 , 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~4, remoteProc~9 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PeekSeqLong: PUBLIC PeekSeqLongType ~ { 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~4, remoteProc~5 , 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~4, remoteProc~7 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; PeekSeqShort: PUBLIC PeekSeqShortType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, address]; CrRPC.PutCard16[s, count]; }; GetResults: CrRPC.GetResultsProc ~ { resultSeq _ UProc5[h, s]; }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~4, remoteProc~4 , 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~4, remoteProc~1 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; WriteSequential: PUBLIC WriteSequentialType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard32[s, startingAddress]; CrRPC.PutCard16[s, count]; MProc6[h, s, seq]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2200, remotePgmVersion~4, remoteProc~11 , 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~4, remoteProc~3 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; <> MProc6: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqLong] ~ { CrRPC.PutCard16[s, val.length]; FOR i7: CARDINAL IN [0..val.length) DO CrRPC.PutCard32[s, val.body[i7]]; ENDLOOP; }; UProc5: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqShort] ~ { { length9: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqShortObject[length9]]; FOR i8: CARDINAL IN [0..length9) DO res.body[i8] _ CrRPC.GetCard16[s]; ENDLOOP; }; }; MProc1: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqShort] ~ { CrRPC.PutCard16[s, val.length]; FOR i10: CARDINAL IN [0..val.length) DO CrRPC.PutCard16[s, val.body[i10]]; ENDLOOP; }; UProc4: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqLong] ~ { { length12: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqLongObject[length12]]; FOR i11: CARDINAL IN [0..length12) DO res.body[i11] _ CrRPC.GetCard32[s]; ENDLOOP; }; }; UProc3: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqResult] ~ { { length14: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqResultObject[length14]]; FOR i13: CARDINAL IN [0..length14) DO res.body[i13] _ UProc15[h, s]; ENDLOOP; }; }; MProc2: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqCmd] ~ { CrRPC.PutCard16[s, val.length]; FOR i16: CARDINAL IN [0..val.length) DO MProc17[h, s, val.body[i16]]; ENDLOOP; }; UProc15: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Result] ~ { { tag18: OpCode ~ VAL[CrRPC.GetCard16[s]]; SELECT tag18 FROM peekShort => { temp19: PeekShortResult; temp19.value _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.peekShort _ [peekShort[temp19]]] }; pokeShort => { temp19: PokeShortResult; temp19.null _ 0; res _ NEW[ResultObject.pokeShort _ [pokeShort[temp19]]] }; pokeLong => { temp19: PokeLongResult; temp19.null _ 0; res _ NEW[ResultObject.pokeLong _ [pokeLong[temp19]]] }; shftRead => { temp19: ShftReadResult; temp19.numRepeats _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.shftRead _ [shftRead[temp19]]] }; shftWrite => { temp19: ShftWriteResult; temp19.numRepeats _ CrRPC.GetCard16[s]; res _ NEW[ResultObject.shftWrite _ [shftWrite[temp19]]] }; returnLength => { temp19: ReturnLengthResult; temp19.null _ 0; res _ NEW[ResultObject.returnLength _ [returnLength[temp19]]] }; ENDCASE => ERROR; }; }; MProc17: 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.pokeLong => { CrRPC.PutCard32[s, it^.pokeLong.address]; CrRPC.PutCard32[s, it^.pokeLong.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; }; }...