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 _ 2000; slowTimeout: CARD _ 5000; defaultRetries: CARD _ 5; 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 Demers, October 6, 1987 4:56:23 pm PDT Types Parameters Procedures Κ]˜codešœ™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šœœœ˜%Jšœœ3œœ˜CJšœ˜—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˜J˜K˜K˜—šžœœ0˜EK˜K˜K˜K˜—šžœœœ˜MK˜K˜ K˜K˜—šžœœœ!˜SK˜K˜ K˜ K˜K˜——K˜——…—p+