DIRECTORY CrRPC, RapunzelP1620V0; RapunzelP1620V0ServerImpl: CEDAR PROGRAM IMPORTS CrRPC, RapunzelP1620V0 ~ { OPEN RapunzelP1620V0; Server: CrRPC.ServerProc ~ { ENABLE { RapunzelP1620V0.Fault => { -- (0) beginError[h, 0]; CrRPC.PutCARDINAL[h, ORD[code]]; CrRPC.PutCARD[h, address]; GO TO Finished; }; }; IF (pgmVersion # 0) THEN { beginReject[h, CrRPC.noSuchVersion]; CrRPC.PutCARDINAL[h, 0]; --low CrRPC.PutCARDINAL[h, 0]; --high RETURN }; SELECT proc FROM 4 => { -- PokeSeqShort address: CARD; args: RapunzelP1620V0.SeqShort; address _ CrRPC.GetCARD[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; args _ NEW[RapunzelP1620V0.SeqShortObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO args.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ PokeSeqShort[h, address, args]; beginReturn[h]; }; 6 => { -- PokeLong address: CARD; arg: CARD; address _ CrRPC.GetCARD[h]; arg _ CrRPC.GetCARD[h]; [] _ PokeLong[h, address, arg]; beginReturn[h]; }; 0 => { -- DoCmds cmds: RapunzelP1620V0.SeqCmd; results: RapunzelP1620V0.SeqResult; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; cmds _ NEW[RapunzelP1620V0.SeqCmdObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO TRUSTED { tag2: RapunzelP1620V0.OpCode ~ VAL[CrRPC.GetCARDINAL[h]]; SELECT tag2 FROM peekShort => { x3: RapunzelP1620V0.PeekShortCmd; x3.address _ CrRPC.GetCARD[h]; cmds.body[i0] _ [peekShort[x3]]; }; pokeShort => { x4: RapunzelP1620V0.PokeShortCmd; x4.address _ CrRPC.GetCARD[h]; x4.value _ CrRPC.GetCARDINAL[h]; cmds.body[i0] _ [pokeShort[x4]]; }; ENDCASE; }; ENDLOOP; }; [results] _ DoCmds[h, cmds]; beginReturn[h]; CrRPC.PutCARDINAL[h, results.length]; FOR i0: CARDINAL IN [0..results.length) DO CrRPC.PutCARDINAL[h, ORD[results.body[i0].type]]; WITH results.body[i0] SELECT FROM it: peekShort RapunzelP1620V0.Result => { CrRPC.PutCARDINAL[h, it.peekShort.value]; }; it: pokeShort RapunzelP1620V0.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; results: RapunzelP1620V0.SeqShort; address _ CrRPC.GetCARD[h]; count _ CrRPC.GetCARDINAL[h]; [results] _ PeekSeqShort[h, address, count]; beginReturn[h]; CrRPC.PutCARDINAL[h, results.length]; FOR i0: CARDINAL IN [0..results.length) DO CrRPC.PutCARDINAL[h, results.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; arg: CARDINAL; address _ CrRPC.GetCARD[h]; arg _ CrRPC.GetCARDINAL[h]; [] _ PokeShort[h, address, arg]; beginReturn[h]; }; ENDCASE => { beginReject[h, CrRPC.noSuchProcedure]; }; EXITS Finished => { NULL }; }; CrRPC.RegisterServerProc[pgm~1620, serverProc~Server, pgmVersion~0]; CrRPC.EnsureListener[class~$SPP]; }... 4RapunzelP1620V0ServerImpl.Mesa Copyright (C) 1986 by Xerox Corporation. All rights reserved. Generated by Sirocco on September 18, 1986 5:40:06 pm PDT [h: Handle, pgm: CARD, pgmVersion: CARDINAL, proc: CARDINAL, beginReturn: BeginReturnProc, beginError: BeginErrorProc, beginReject: BeginRejectProc] Êú˜šœ™Jšœ>™>Jšœ9™9—J˜šÏ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šœœ*˜5šœœœ˜#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šœœ(˜3šœœœ˜#šœ˜ Jšœœ˜9šœ˜˜J˜!J˜J˜ J˜—˜J˜!J˜J˜ J˜ J˜—Jšœ˜—J˜—Jšœ˜—J˜—J˜J˜J˜J˜J˜J˜%šœœœ˜*Jšœœ˜1šœœ˜!˜)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˜—…— –Ä