DIRECTORY CrRPC, RapunzelP2200V1; RapunzelP2200V1ServerImpl: CEDAR PROGRAM IMPORTS CrRPC, RapunzelP2200V1 ~ { OPEN RapunzelP2200V1; Server: CrRPC.ServerProc ~ { ENABLE { RapunzelP2200V1.Fault => { -- (0) beginError[h, 0]; CrRPC.PutCARDINAL[h, ORD[code]]; CrRPC.PutCARD[h, address]; GO TO Finished; }; }; IF (pgmVersion # 1) THEN { beginReject[h, CrRPC.noSuchVersion]; CrRPC.PutCARDINAL[h, 1]; --low CrRPC.PutCARDINAL[h, 1]; --high RETURN }; SELECT proc FROM 4 => { -- PokeSeqShort address: CARD; valueSeq: RapunzelP2200V1.SeqShort; address _ CrRPC.GetCARD[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; valueSeq _ NEW[RapunzelP2200V1.SeqShortObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO valueSeq.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ PokeSeqShort[h, address, valueSeq]; beginReturn[h]; }; 6 => { -- PokeLong address: CARD; value: CARD; address _ CrRPC.GetCARD[h]; value _ CrRPC.GetCARD[h]; [] _ PokeLong[h, address, value]; beginReturn[h]; }; 7 => { -- DoCmds cmdSeq: RapunzelP2200V1.SeqCmd; resultSeq: RapunzelP2200V1.SeqResult; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; cmdSeq _ NEW[RapunzelP2200V1.SeqCmdObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO TRUSTED { tag2: RapunzelP2200V1.OpCode ~ VAL[CrRPC.GetCARDINAL[h]]; SELECT tag2 FROM peekShort => { x3: RapunzelP2200V1.PeekShortCmd; x3.address _ CrRPC.GetCARD[h]; cmdSeq.body[i0] _ [peekShort[x3]]; }; pokeShort => { x4: RapunzelP2200V1.PokeShortCmd; x4.address _ CrRPC.GetCARD[h]; x4.value _ CrRPC.GetCARDINAL[h]; cmdSeq.body[i0] _ [pokeShort[x4]]; }; ENDCASE; }; ENDLOOP; }; [resultSeq] _ DoCmds[h, cmdSeq]; beginReturn[h]; CrRPC.PutCARDINAL[h, resultSeq.length]; FOR i0: CARDINAL IN [0..resultSeq.length) DO CrRPC.PutCARDINAL[h, ORD[resultSeq.body[i0].type]]; WITH resultSeq.body[i0] SELECT FROM it: peekShort RapunzelP2200V1.Result => { CrRPC.PutCARDINAL[h, it.peekShort.value]; }; it: pokeShort RapunzelP2200V1.Result => { NULL; -- RECORD [] }; ENDCASE; ENDLOOP; }; 5 => { -- PeekLong address: CARD; result: CARD; address _ CrRPC.GetCARD[h]; [result] _ PeekLong[h, address]; beginReturn[h]; CrRPC.PutCARD[h, result]; }; 3 => { -- PeekSeqShort address: CARD; count: CARDINAL; resultSeq: RapunzelP2200V1.SeqShort; address _ CrRPC.GetCARD[h]; count _ CrRPC.GetCARDINAL[h]; [resultSeq] _ PeekSeqShort[h, address, count]; beginReturn[h]; CrRPC.PutCARDINAL[h, resultSeq.length]; FOR i0: CARDINAL IN [0..resultSeq.length) DO CrRPC.PutCARDINAL[h, resultSeq.body[i0]]; ENDLOOP; }; 1 => { -- PeekShort address: CARD; result: CARDINAL; address _ CrRPC.GetCARD[h]; [result] _ PeekShort[h, address]; beginReturn[h]; CrRPC.PutCARDINAL[h, result]; }; 2 => { -- PokeShort address: CARD; value: CARDINAL; address _ CrRPC.GetCARD[h]; value _ CrRPC.GetCARDINAL[h]; [] _ PokeShort[h, address, value]; beginReturn[h]; }; ENDCASE => { beginReject[h, CrRPC.noSuchProcedure]; }; EXITS Finished => { NULL }; }; CrRPC.RegisterServerProc[pgm~2200, serverProc~Server, pgmVersion~1]; CrRPC.EnsureListener[class~$SPP]; }... pRapunzelP2200V1ServerImpl.Mesa Copyright (C) 1986 by Xerox Corporation. All rights reserved. Generated by Willie-Sue.pa at October 10, 1986 1:53:10 pm PDT using Sirocco [1.0] of September 25, 1986 3:44:23 am PDT [h: Handle, pgm: CARD, pgmVersion: CARDINAL, proc: CARDINAL, beginReturn: BeginReturnProc, beginError: BeginErrorProc, beginReject: BeginRejectProc] ʘšœ™Jšœ>™>Jšœ=™=Jšœ8™8J˜—šÏk ˜ J˜J˜—J˜šÏnœœ˜(Jšœ˜"Jšœ˜—J˜šžœ˜Jšœ”™”J˜šœ˜šœÏc˜!J˜Jšœœ˜ J˜Jšœœ ˜J˜—J˜—J˜šœœ˜J˜$JšœŸ˜JšœŸ˜Jš˜J˜—J˜šœ˜šœŸ˜Jšœ œ˜J˜#J˜J˜˜Jšœ œ˜)Jšœ œ*˜9šœœœ˜#J˜)Jšœ˜—J˜—J˜J˜(J˜J˜J˜J˜—šœŸ ˜Jšœ œ˜Jšœœ˜ J˜J˜J˜J˜J˜!J˜J˜J˜J˜—šœŸ ˜J˜J˜%J˜˜Jšœ œ˜)Jšœ œ(˜5šœœœ˜#šœ˜ Jšœœ˜9šœ˜˜J˜!J˜J˜"J˜—˜J˜!J˜J˜ J˜"J˜—Jšœ˜—J˜—Jšœ˜—J˜—J˜J˜ J˜J˜J˜J˜'šœœœ˜,Jšœœ˜3šœœ˜#˜)J˜)J˜—˜)JšœŸ ˜J˜—Jšœ˜—Jšœ˜—J˜—šœŸ ˜Jšœ œ˜Jšœœ˜ J˜J˜J˜J˜ J˜J˜J˜J˜J˜—šœŸ˜Jšœ œ˜Jšœœ˜J˜$J˜J˜J˜J˜J˜.J˜J˜J˜J˜'šœœœ˜,J˜)Jšœ˜—J˜—šœŸ ˜Jšœ œ˜Jšœœ˜J˜J˜J˜J˜!J˜J˜J˜J˜J˜—šœŸ ˜Jšœ œ˜Jšœœ˜J˜J˜J˜J˜J˜"J˜J˜J˜J˜—šœ˜ J˜&J˜——J˜š˜Jšœœ˜—J˜—˜J˜DJ˜!—J˜J˜—…— ÒC