DIRECTORY RuntimeError USING [BoundsFault], SunRPC USING [Error, GetCard32, GetInt32, GetRefText, GetRope, Handle, PutRefText, PutRope, ReleaseReply, SendCallAndReceiveReply, StartCall], SunRPCAuth USING [Conversation], SunYP USING [all, AllProc, domain, DomainName, domainNonack, DomainProc, first, FirstProc, maplist, MaplistProc, master, MasterProc, match, MatchProc, next, NextProc, null, NullProc, order, OrderProc, program, programVersion, RequestKey, RequestNoKey, ResponseKeyVal, ResponseVal, Status], SunYPClient USING [] ; SunYPClientStub: CEDAR PROGRAM IMPORTS RuntimeError, SunRPC EXPORTS SunYPClient ~ { Handle: TYPE ~ SunRPC.Handle; Conversation: TYPE ~ SunRPCAuth.Conversation; fastTimeout: CARD ฌ 500; mediumTimeout: CARD ฌ 1000; slowTimeout: CARD ฌ 5000; defaultRetries: CARD ฌ 10; noRetries: CARD ฌ 0; Null: PUBLIC SunYP.NullProc -- [h: Handle, c: Conversation] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.null]; [] ฌ SunRPC.SendCallAndReceiveReply[h, fastTimeout, defaultRetries]; SunRPC.ReleaseReply[h]; }; Domain: PUBLIC SunYP.DomainProc -- [h: Handle, c: Conversation, domain: DomainName] RETURNS [serves: BOOL] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.domain]; SunRPC.PutRope[h, domain]; [] ฌ SunRPC.SendCallAndReceiveReply[h, fastTimeout, defaultRetries]; serves ฌ (SunRPC.GetCard32[h] # 0); SunRPC.ReleaseReply[h]; }; DomainNonack: PUBLIC PROC [h: SunRPC.Handle, c: SunRPCAuth.Conversation, domain: SunYP.DomainName, timeout: CARD] RETURNS [serves: BOOL] ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.domainNonack]; SunRPC.PutRope[h, domain]; [] ฌ SunRPC.SendCallAndReceiveReply[h, timeout, noRetries]; serves ฌ (SunRPC.GetCard32[h] # 0); SunRPC.ReleaseReply[h]; }; Match: PUBLIC SunYP.MatchProc -- [h: Handle, c: Conversation, req: RequestKey] RETURNS [resp: ResponseVal] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.match]; PutRequestKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; resp ฌ GetResponseVal[h]; SunRPC.ReleaseReply[h]; }; First: PUBLIC SunYP.FirstProc -- [h: Handle, c: Conversation, req: RequestNoKey] RETURNS [resp: ResponseKeyVal] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.first]; PutRequestNoKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; resp ฌ GetResponseKeyVal[h]; SunRPC.ReleaseReply[h]; }; Next: PUBLIC SunYP.NextProc -- [h: Handle, c: Conversation, req: RequestKey] RETURNS [resp: ResponseKeyVal] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.next]; PutRequestKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; resp ฌ GetResponseKeyVal[h]; SunRPC.ReleaseReply[h]; }; All: PUBLIC SunYP.AllProc -- [h: Handle, c: Conversation, req: RequestNoKey, eachResponseKeyVal: EachResponseKeyValProc] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.all]; PutRequestNoKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, slowTimeout, defaultRetries]; DO IF SunRPC.GetCard32[h] = 0 THEN EXIT; IF NOT eachResponseKeyVal[GetResponseKeyVal[h]].continue THEN EXIT; ENDLOOP; SunRPC.ReleaseReply[h]; }; Master: PUBLIC SunYP.MasterProc -- [h: Handle, c: Conversation, req: RequestNoKey] RETURNS [resp: ResponseMaster] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.master]; PutRequestNoKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, fastTimeout, defaultRetries]; resp.status ฌ GetStatus[h]; resp.master ฌ SunRPC.GetRope[h]; SunRPC.ReleaseReply[h]; }; Order: PUBLIC SunYP.OrderProc -- [h: Handle, c: Conversation, req: SunYP.RequestNoKey] RETURNS [resp: SunYP.ResponseOrder] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.order]; PutRequestNoKey[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, fastTimeout, defaultRetries]; resp.status ฌ GetStatus[h]; resp.ordernum ฌ SunRPC.GetCard32[h]; SunRPC.ReleaseReply[h]; }; Maplist: PUBLIC SunYP.MaplistProc -- [h: Handle, c: Conversation, req: DomainName, eachMapName: EachMapNameProc] RETURNS [status: Status] -- ~ { SunRPC.StartCall[h, c, SunYP.program, SunYP.programVersion, SunYP.maplist]; SunRPC.PutRope[h, req]; [] ฌ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; status ฌ GetStatus[h]; SELECT status FROM true, nomore => DO IF SunRPC.GetCard32[h] = 0 THEN EXIT; IF NOT eachMapName[SunRPC.GetRope[h]].continue THEN EXIT; ENDLOOP; ENDCASE; SunRPC.ReleaseReply[h]; }; GetStatus: PROC [h: SunRPC.Handle] RETURNS [status: SunYP.Status] ~ INLINE { ENABLE RuntimeError.BoundsFault => ERROR SunRPC.Error[$protocolError]; RETURN [GetStatusInner[h]]; }; GetStatusInner: PROC [h: SunRPC.Handle] RETURNS [SunYP.Status] ~ { x: INT ฌ SunRPC.GetInt32[h]; RETURN[VAL[CARDINAL[IF x >= 0 THEN x ELSE 1000-x]]]; }; PutRequestKey: PROC [h: SunRPC.Handle, req: SunYP.RequestKey] ~ { SunRPC.PutRope[h, req.domain]; SunRPC.PutRope[h, req.map]; SunRPC.PutRefText[h, req.key]; }; PutRequestNoKey: PROC [h: SunRPC.Handle, req: SunYP.RequestNoKey] ~ { SunRPC.PutRope[h, req.domain]; SunRPC.PutRope[h, req.map]; }; GetResponseVal: PROC [h: SunRPC.Handle] RETURNS [resp: SunYP.ResponseVal] ~ { resp.status ฌ GetStatus[h]; resp.val ฌ SunRPC.GetRefText[h]; }; GetResponseKeyVal: PROC [h: SunRPC.Handle] RETURNS [resp: SunYP.ResponseKeyVal] ~ { resp.status ฌ GetStatus[h]; resp.val ฌ SunRPC.GetRefText[h]; resp.key ฌ SunRPC.GetRefText[h]; }; }... าSunYPClientStub.mesa Copyright ำ 1989, 1991, 1992 by Xerox Corporation. All rights reserved. Demers, January 5, 1988 5:39:22 pm PST Willie-Sue, March 15, 1989 2:36:18 pm PST Types Parameters Procedures ส”–(cedarcode) style•NewlineDelimiter ˜codešœ™Kšœ ฯeœ=™HK™&K™)K˜—šฯk ˜ Kšœ žœ˜!Kšœžœ‚˜ŽKšœ žœ˜ Kšœžœ–˜กKšœ žœ˜Kšœ˜K˜—šฯnœžœž˜Kšžœ˜Kšžœ ˜K˜head™Kšœžœ˜Kšœžœ˜-—™ Kšœ žœ˜Kšœžœ˜Kšœ žœ˜Kšœžœ˜Kšœ žœ˜—™ šŸœžœฯc"œ˜BKšœH˜HKšœD˜DK˜K˜K˜—šŸœžœ Mœ˜qKšœJ˜JK˜KšœD˜DKšœ#˜#K˜K˜K˜—š Ÿ œžœžœSžœžœ žœ˜ŒKšœP˜PK˜Kšœ;˜;Kšœ#˜#K˜K˜K˜—šŸœžœ Oœ˜qKšœI˜IK˜KšœF˜FK˜K˜K˜K˜—šŸœžœ Tœ˜vKšœI˜IK˜KšœF˜FK˜K˜K˜K˜—šŸœžœ Rœ˜rKšœH˜HK˜KšœF˜FK˜K˜K˜K˜—šŸœžœ aœ˜KšœG˜GK˜KšœD˜Dšž˜Kšžœžœžœ˜%Kšžœžœ3žœžœ˜CKšžœ˜—K˜K˜K˜—šŸœžœ Tœ˜xKšœJ˜JK˜KšœD˜DK˜K˜ K˜K˜K˜—šŸœžœ _œ˜KšœI˜IK˜KšœD˜DK˜K˜$K˜K˜K˜—šŸœžœ jœ˜KšœK˜KK˜KšœF˜FKšœ˜šžœž˜šœž˜Kšžœžœžœ˜%Kšžœžœ)žœžœ˜9Kšžœ˜—Kšžœ˜—K˜K˜K˜—šŸ œžœžœžœ˜LKšžœžœ˜FKšžœ˜K˜K˜—šŸœžœžœ˜BKšœžœ˜Kš žœžœžœžœžœžœ ˜4K˜—K˜šŸ œžœ.˜AK˜K˜K˜K˜K˜—šŸœžœ0˜EK˜K˜K˜K˜—šŸœžœžœ˜MK˜K˜ K˜K˜—šŸœžœžœ!˜SK˜K˜ K˜ K˜K˜——K˜——…—pึ