DIRECTORY RefText USING [New, ReleaseScratch], SunMount USING [dump, DumpProc, EachExportProc, EachGroupProc, export, ExportProc, fhSize, FHStatus, maxNameLen, maxPathLen, mnt, MntProc, Name, null, NullProc, Path, program, programVersion, umnt, umntall, UmntallProc, UmntProc], SunMountClient USING [], SunRPC USING [GetAlign, GetBlock, GetCard32, GetEphemeralRefText, Handle, PutRefText, ReleaseReply, SendCallAndReceiveReply, StartCall] ; SunMountClientStub: CEDAR PROGRAM IMPORTS RefText, SunRPC EXPORTS SunMountClient ~ { Handle: TYPE ~ SunRPC.Handle; Name: TYPE ~ SunMount.Name; Path: TYPE ~ SunMount.Path; maxPathLen: CARDINAL ~ SunMount.maxPathLen; maxNameLen: CARDINAL ~ SunMount.maxNameLen; fhSize: CARDINAL ~ SunMount.fhSize; fastTimeout: CARD _ 500; mediumTimeout: CARD _ 2000; slowTimeout: CARD _ 5000; defaultRetries: CARD _ 5; noRetries: CARD _ 0; Null: PUBLIC SunMount.NullProc -- [h: Handle, c: Conversation] -- ~ { SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.null]; [] _ SunRPC.SendCallAndReceiveReply[h, fastTimeout, defaultRetries]; SunRPC.ReleaseReply[h]; }; Mnt: PUBLIC SunMount.MntProc -- [h: Handle, c: Conversation, directory: Path] RETURNS [reply: FHStatus] -- ~ { SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.mnt]; SunRPC.PutRefText[h, directory]; [] _ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; reply _ GetFHStatus[h]; SunRPC.ReleaseReply[h]; }; Dump: PUBLIC SunMount.DumpProc -- [h: Handle, c: Conversation, eachMount: EachMountProc] -- ~ { hostNameBuf: Name _ NIL; directoryBuf: Path _ NIL; SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.dump]; [] _ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, noRetries]; WHILE (SunRPC.GetCard32[h] # 0) DO hostNameBuf _ SunRPC.GetEphemeralRefText[h, hostNameBuf]; directoryBuf _ SunRPC.GetEphemeralRefText[h, directoryBuf]; IF NOT eachMount[hostNameBuf, directoryBuf].continue THEN EXIT; ENDLOOP; IF hostNameBuf # NIL THEN RefText.ReleaseScratch[hostNameBuf]; IF directoryBuf # NIL THEN RefText.ReleaseScratch[directoryBuf]; SunRPC.ReleaseReply[h]; }; Umnt: PUBLIC SunMount.UmntProc -- [h: Handle, c: Conversation, directory: Path] -- ~ { SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.umnt]; SunRPC.PutRefText[h, directory]; [] _ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; SunRPC.ReleaseReply[h]; }; Umntall: PUBLIC SunMount.UmntallProc -- [h: Handle, c: Conversation] -- ~ { SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.umntall]; [] _ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; SunRPC.ReleaseReply[h]; }; Export: PUBLIC SunMount.ExportProc -- [h: Handle, c: Conversation, eachExport: EachExportProc, eachGroup: EachGroupProc] -- ~ { exportBuf: Path _ NIL; groupBuf: Name _ NIL; SunRPC.StartCall[h, c, SunMount.program, SunMount.programVersion, SunMount.export]; [] _ SunRPC.SendCallAndReceiveReply[h, mediumTimeout, defaultRetries]; WHILE (SunRPC.GetCard32[h] # 0) DO exportBuf _ SunRPC.GetEphemeralRefText[h, exportBuf]; IF NOT eachExport[exportBuf].continue THEN GOTO Quit; WHILE (SunRPC.GetCard32[h] # 0) DO groupBuf _ SunRPC.GetEphemeralRefText[h, groupBuf]; IF NOT eachGroup[groupBuf].continue THEN GOTO Quit; ENDLOOP; REPEAT Quit => NULL; ENDLOOP; IF exportBuf # NIL THEN RefText.ReleaseScratch[exportBuf]; IF groupBuf # NIL THEN RefText.ReleaseScratch[groupBuf]; SunRPC.ReleaseReply[h]; }; GetFHStatus: PROC [h: SunRPC.Handle] RETURNS [response: SunMount.FHStatus] ~ { IF (response.status _ SunRPC.GetCard32[h]) = 0 THEN { response.directory _ RefText.New[fhSize]; SunRPC.GetBlock[h, response.directory, 0, fhSize]; SunRPC.GetAlign[h]; }; }; }... ’SunMountClientStub.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Demers, September 20, 1987 12:46:43 pm PDT Types Parameters Procedures Κ˜codešœ™K™Kšœœœ&˜@K˜K˜K˜—šžœœŸ3œ˜VKšœQ˜QJ˜ KšœF˜FK˜K˜K˜—šžœœŸ"œ˜KKšœT˜TKšœF˜FK˜K˜K˜—šžœœŸXœ˜Kšœœ˜Kšœœ˜KšœS˜SKšœF˜Fšœ˜"Kšœ4˜5Kšœœ œœ˜5šœ˜"Kšœ2˜3Kšœœœœ˜3Kšœ˜—š˜Kšœœ˜ —Kšœ˜—Kšœ œœ#˜:Kšœ œœ"˜8K˜K˜K˜—šž œœœ"˜Nšœ.œ˜6Kšœ)˜)Kšœ2˜2K˜K˜—K˜K˜——K˜—J˜—…—ͺΩ