-- Copyright (C) 1987 by Xerox Corporation. All rights reserved. -- Stub file was translated on March 26, 1987 5:07:14 pm PST by Lupine of January 22, 1987 5:37:32 pm PST -- Source interface OldAlpineDebug came from file OldAlpineDebug.bcd, which was created on March 26, 1987 5:07:02 pm PST with version stamp 61#252#26055555412 from source of January 7, 1987 10:02:53 am PST. -- The RPC stub modules for OldAlpineDebug are: -- OldAlpineDebugRpcControl.mesa; -- OldAlpineDebugRpcClientImpl.mesa; -- OldAlpineDebugRpcBinderImpl.mesa; -- OldAlpineDebugRpcServerImpl.mesa. -- The parameters for this translation are: -- Target language = Cedar -- Default parameter passing = VALUE -- Deallocate server heap arguments = TRUE -- Inline RpcServerImpl dispatcher stubs = TRUE -- Declare signals = TRUE -- Warn about short POINTER ("MDS") allocations = TRUE -- Maximum number of dynamic heap NEWs = 50, MDS NEWs = 50 -- Acceptable parameter protocols = VersionRange[1..1]. DIRECTORY OldAlpineEnvironment, OldAlpineDebug, OldAlpineDebugRpcControl USING [InterfaceRecord, InterMdsCallsOnly, LupineProtocolVersion, ProcedureIndex, SignalIndex], RPC --USING SOME OF [InterfaceName, standardZones, Zones]--, RPCLupine --USING SOME OF [Alloc, Call, DataLength, DeAlloc, Dispatcher, -- GetPkt, GetStubPkt, ImportHandle, ImportInterface, ImportInterfaceWithHost, -- maxDataLength, maxPrincipalLength, maxShortStringLength, noHost, -- pktOverhead, ReceiveExtraPkt, RPCHost, SendPrelimPkt, StartCall, -- StartSignal, StubPkt, UnimportInterface]--, LupineRuntime --USING SOME OF [BindingError, CheckPktLength, CopyFromPkt, -- CopyFromMultiplePkts, CopyToPkt, CopyToMultiplePkts, defaultZones, -- DispatchingError, FinishThisPkt, ListHeader, MarshalingError, -- MarshalingExprError, MarshalAtom, MarshalRope, NilHeader, ProtocolError, -- RopeHeader, RpcPktDoubleWord, RuntimeError, SequenceHeader, SHORT, -- StartNextPkt, StringHeader, StubPktDoubleWord, TranslationError, -- UnmarshalingError, UnmarshalingExprError, UnmarshalAtom, UnmarshalRope, -- WordsForChars]--, Atom --USING SOME OF [GetPName, MakeAtom]--, PrincOpsUtils --USING SOME OF [Enter, Exit]--, Rope --USING SOME OF [InlineFlatten, Length, NewText, Text]--, VM --USING SOME OF [AddressForPageNumber, PageCount, PageNumber, -- PageNumberForAddress, PagesForWords]--; OldAlpineDebugRpcClientImpl: MONITOR IMPORTS RpcPrivate: RPCLupine, Lupine: LupineRuntime, Atom, PrincOpsUtils, Rope EXPORTS OldAlpineDebugRpcControl SHARES OldAlpineDebug, OldAlpineDebugRpcControl, Rope = BEGIN OPEN OldAlpineDebug, RpcControl: OldAlpineDebugRpcControl, RpcPublic: RPC; -- Standard remote binding routines. ImportInterface: PUBLIC ENTRY SAFE PROCEDURE [ interface: RpcControl.InterfaceRecord, interfaceName: RpcPublic.InterfaceName, parameterStorage: RpcPublic.Zones, hostHint: RpcPrivate.RPCHost←RpcPrivate.noHost ] = TRUSTED BEGIN ENABLE UNWIND => NULL; IsNull: PROCEDURE [string: Rope.ROPE] RETURNS [BOOLEAN] = INLINE {RETURN[string.Length[] = 0]}; interface↑ ← [clientStubReadOwnerFileHeader: clientStubReadOwnerFileHeader, clientStubReadNextOwnerRecord: clientStubReadNextOwnerRecord, clientStubChangeSpaceForOwner: clientStubChangeSpaceForOwner, clientStubReadDBUniversalFile: clientStubReadDBUniversalFile, clientStubReportAccessCacheStats: clientStubReportAccessCacheStats, clientStubReportAccessVolatileStats: clientStubReportAccessVolatileStats, clientStubCrashSystem: clientStubCrashSystem, AccessFailed: AccessFailed, LockFailed: LockFailed, OperationFailed: OperationFailed, StaticallyInvalid: StaticallyInvalid, Unknown: Unknown]; interface.myInterface ← RpcPrivate.ImportInterfaceWithHost [ interface: [ type: IF ~IsNull[interfaceName.type] THEN interfaceName.type ELSE "OldAlpineDebug~61#252#26055555412", instance: interfaceName.instance, version: interfaceName.version ], localOnly: RpcControl.InterMdsCallsOnly, stubProtocol: RpcControl.LupineProtocolVersion, hostHint: hostHint ]; interface.paramZones ← [ gc: IF parameterStorage.gc # NIL THEN parameterStorage.gc ELSE Lupine.defaultZones.gc, heap: IF parameterStorage.heap # NIL THEN parameterStorage.heap ELSE Lupine.defaultZones.heap, mds: IF parameterStorage.mds # NIL THEN parameterStorage.mds ELSE Lupine.defaultZones.mds ]; interface.bound ← TRUE; END; -- Remote public procedure stubs. clientStubReadOwnerFileHeader: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord, conversation: OldAlpineEnvironment.Conversation, transID: OldAlpineEnvironment.TransID, volumeGroupID: OldAlpineEnvironment.VolumeGroupID] RETURNS [version: NAT, recordedVolGroupID: OldAlpineEnvironment.VolumeGroupID, totalQuota: OldAlpineEnvironment.PageCount, quotaLeft: OldAlpineEnvironment.PageCount, numberOfOwners: NAT, numberOfOwnerSlotsInUse: NAT, maxNumberOfOwnersAllowed: NAT] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ReadOwnerFileHeader, transID (1): OldAlpineEnvironment.TransID, volumeGroupID (10): OldAlpineEnvironment.VolumeGroupID]; ResultOverlay: TYPE = MACHINE DEPENDENT RECORD [ version (0): NAT, recordedVolGroupID (1): OldAlpineEnvironment.VolumeGroupID, totalQuota (6): OldAlpineEnvironment.PageCount, quotaLeft (8): OldAlpineEnvironment.PageCount, numberOfOwners (10): NAT, numberOfOwnerSlotsInUse (11): NAT, maxNumberOfOwnersAllowed (12): NAT]; pktBuffer: ARRAY [1..RpcPrivate.pktOverhead+15] OF WORD; pkt: RpcPrivate.StubPkt = RpcPrivate.GetStubPkt[space: @pktBuffer]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; resPkt: LONG POINTER TO ResultOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 15; lastPkt: BOOLEAN; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface, localConversation: conversation]; argPkt↑ ← [transID: transID, volumeGroupID: volumeGroupID]; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 13, signalHandler: ClientDispatcher]; [version: version, recordedVolGroupID: recordedVolGroupID, totalQuota: totalQuota, quotaLeft: quotaLeft, numberOfOwners: numberOfOwners, numberOfOwnerSlotsInUse: numberOfOwnerSlotsInUse, maxNumberOfOwnersAllowed: maxNumberOfOwnersAllowed] ← resPkt↑; Lupine.CheckPktLength[pkt: pkt, pktLength: 13]; RETURN[version, recordedVolGroupID, totalQuota, quotaLeft, numberOfOwners, numberOfOwnerSlotsInUse, maxNumberOfOwnersAllowed]; END; -- ReadOwnerFileHeader. clientStubReadNextOwnerRecord: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord, conversation: OldAlpineEnvironment.Conversation, transID: OldAlpineEnvironment.TransID, volumeGroupID: OldAlpineEnvironment.VolumeGroupID, contRecNum: INT, desiredProperties: OldAlpineEnvironment.OwnerPropertySet] RETURNS [entryEmpty: BOOLEAN, entryValid: BOOLEAN, owner: OldAlpineEnvironment.OwnerName, properties: LIST OF OldAlpineEnvironment.OwnerPropertyValuePair, nextContRecNum: INT] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ReadNextOwnerRecord, transID (1): OldAlpineEnvironment.TransID, volumeGroupID (10): OldAlpineEnvironment.VolumeGroupID, contRecNum (15): INT, desiredProperties (17): OldAlpineEnvironment.OwnerPropertySet]; ResultOverlay: TYPE = MACHINE DEPENDENT RECORD [ entryEmpty (0): BOOLEAN, entryValid (1): BOOLEAN, nextContRecNum (2): INT]; pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; resPkt: LONG POINTER TO ResultOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 18; lastPkt: BOOLEAN; BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254]; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface, localConversation: conversation]; argPkt↑ ← [transID: transID, volumeGroupID: volumeGroupID, contRecNum: contRecNum, desiredProperties: desiredProperties]; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 254, signalHandler: ClientDispatcher]; pktLength ← 4; BEGIN -- OnePkt. -- Move statics from pkt now. [entryEmpty: entryEmpty, entryValid: entryValid, nextContRecNum: nextContRecNum] ← resPkt↑; BEGIN -- Unmarshal owner: OldAlpineEnvironment.OwnerName from -- pkt.data[pktLength]. ropeIsNIL: Lupine.NilHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; ropeIsNIL ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeIsNIL THEN owner ← NIL ELSE BEGIN ropeLength: Lupine.RopeHeader; textRope: Rope.Text; ropeLength ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeLength > RpcPrivate.maxShortStringLength THEN Lupine.UnmarshalingError; owner ← textRope ← Rope.NewText[size: ropeLength]; pktLength ← Lupine.CopyFromPkt[pkt: pkt, pktLength: pktLength, dataAdr: BASE[DESCRIPTOR[textRope.text]], dataLength: Lupine.WordsForChars[ropeLength], alwaysOnePkt: FALSE]; END; -- IF ropeIsNIL. END; -- Unmarshal owner. BEGIN -- Unmarshal properties: LIST OF OldAlpineEnvironment.OwnerPropertyValuePair -- from pkt.data[pktLength]. lastNode: LIST OF OldAlpineEnvironment.OwnerPropertyValuePair ← (properties ← NIL); listLength: Lupine.ListHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; listLength ← Lupine.RpcPktDoubleWord[pkt, pktLength]↑; pktLength ← pktLength + 2; WHILE listLength > 0 DO thisNode1: LIST OF OldAlpineEnvironment.OwnerPropertyValuePair = interface.paramZones.gc.CONS[--DefaultValue--,NIL]; BEGIN -- Unmarshal thisNode1.first: OldAlpineEnvironment.OwnerPropertyValuePair -- from pkt.data[pktLength]. pktLength ← Lupine.CopyFromPkt[pkt: pkt, pktLength: pktLength, dataAdr: @thisNode1.first, dataLength: SIZE[OldAlpineEnvironment.OwnerPropertyValuePair], alwaysOnePkt: FALSE]; -- Restore garbled REFs to NIL following copy. BEGIN OPEN record: thisNode1.first; WITH variant: record SELECT FROM createAccessList => BEGIN OPEN record: variant; LOOPHOLE[record.createAccessList, LONG POINTER] ← NIL; END; -- OPEN record: variant. modifyAccessList => BEGIN OPEN record: variant; LOOPHOLE[record.modifyAccessList, LONG POINTER] ← NIL; END; -- OPEN record: variant. ENDCASE => NULL; -- WITH variant: record. END; -- OPEN record: thisNode1.first. BEGIN OPEN record: thisNode1.first; WITH variant: record SELECT FROM createAccessList => BEGIN -- Unmarshal variant: RECORD [createAccessList: -- AccessList] from pkt.data[pktLength]. BEGIN OPEN record: variant; BEGIN -- Unmarshal record.createAccessList: AccessList -- from pkt.data[pktLength]. lastNode: AccessList ← (record.createAccessList ← NIL); listLength: Lupine.ListHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; listLength ← Lupine.RpcPktDoubleWord[pkt, pktLength]↑; pktLength ← pktLength + 2; WHILE listLength > 0 DO thisNode5: AccessList = interface.paramZones.gc.CONS[--DefaultValue--,NIL]; BEGIN -- Unmarshal thisNode5.first: RName from -- pkt.data[pktLength]. ropeIsNIL: Lupine.NilHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; ropeIsNIL ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeIsNIL THEN thisNode5.first ← NIL ELSE BEGIN ropeLength: Lupine.RopeHeader; textRope: Rope.Text; ropeLength ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeLength > RpcPrivate.maxShortStringLength THEN Lupine.UnmarshalingError; thisNode5.first ← textRope ← Rope.NewText[size: ropeLength]; pktLength ← Lupine.CopyFromPkt[pkt: pkt, pktLength: pktLength, dataAdr: BASE[DESCRIPTOR[textRope.text]], dataLength: Lupine.WordsForChars[ropeLength], alwaysOnePkt: FALSE]; END; -- IF ropeIsNIL. END; -- Unmarshal thisNode5.first. IF lastNode # NIL THEN lastNode ← (lastNode.rest ← thisNode5) ELSE lastNode ← (record.createAccessList ← thisNode5); listLength ← listLength - 1; ENDLOOP; -- WHILE listLength > 0. END; -- Unmarshal record.createAccessList. END; -- OPEN record: variant. END; -- Unmarshal variant. modifyAccessList => BEGIN -- Unmarshal variant: RECORD [modifyAccessList: -- AccessList] from pkt.data[pktLength]. BEGIN OPEN record: variant; BEGIN -- Unmarshal record.modifyAccessList: AccessList -- from pkt.data[pktLength]. lastNode: AccessList ← (record.modifyAccessList ← NIL); listLength: Lupine.ListHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; listLength ← Lupine.RpcPktDoubleWord[pkt, pktLength]↑; pktLength ← pktLength + 2; WHILE listLength > 0 DO thisNode5: AccessList = interface.paramZones.gc.CONS[--DefaultValue--,NIL]; BEGIN -- Unmarshal thisNode5.first: RName from -- pkt.data[pktLength]. ropeIsNIL: Lupine.NilHeader; IF pktLength+2 > RpcPrivate.maxDataLength THEN pktLength ← Lupine.FinishThisPkt[pkt: pkt, pktLength: pktLength]; ropeIsNIL ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeIsNIL THEN thisNode5.first ← NIL ELSE BEGIN ropeLength: Lupine.RopeHeader; textRope: Rope.Text; ropeLength ← pkt.data[pktLength]; pktLength ← pktLength+1; IF ropeLength > RpcPrivate.maxShortStringLength THEN Lupine.UnmarshalingError; thisNode5.first ← textRope ← Rope.NewText[size: ropeLength]; pktLength ← Lupine.CopyFromPkt[pkt: pkt, pktLength: pktLength, dataAdr: BASE[DESCRIPTOR[textRope.text]], dataLength: Lupine.WordsForChars[ropeLength], alwaysOnePkt: FALSE]; END; -- IF ropeIsNIL. END; -- Unmarshal thisNode5.first. IF lastNode # NIL THEN lastNode ← (lastNode.rest ← thisNode5) ELSE lastNode ← (record.modifyAccessList ← thisNode5); listLength ← listLength - 1; ENDLOOP; -- WHILE listLength > 0. END; -- Unmarshal record.modifyAccessList. END; -- OPEN record: variant. END; -- Unmarshal variant. ENDCASE => NULL; -- WITH variant: record. END; -- OPEN record: thisNode1.first. END; -- Unmarshal thisNode1.first. IF lastNode # NIL THEN lastNode ← (lastNode.rest ← thisNode1) ELSE lastNode ← (properties ← thisNode1); listLength ← listLength - 1; ENDLOOP; -- WHILE listLength > 0. END; -- Unmarshal properties. Lupine.CheckPktLength[pkt: pkt, pktLength: pktLength]; RpcPrivate.DeAllocInline[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254]; RETURN[entryEmpty, entryValid, owner, properties, nextContRecNum]; END; -- OnePkt. END; -- UNWIND. END; -- ReadNextOwnerRecord. clientStubChangeSpaceForOwner: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord, conversation: OldAlpineEnvironment.Conversation, transID: OldAlpineEnvironment.TransID, volumeGroupID: OldAlpineEnvironment.VolumeGroupID, owner: OldAlpineEnvironment.OwnerName, nPages: OldAlpineEnvironment.PageCount] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ChangeSpaceForOwner, transID (1): OldAlpineEnvironment.TransID, volumeGroupID (10): OldAlpineEnvironment.VolumeGroupID, nPages (15): OldAlpineEnvironment.PageCount]; pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+51]]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 17; lastPkt: BOOLEAN; BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+51]; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface, localConversation: conversation]; argPkt↑ ← [transID: transID, volumeGroupID: volumeGroupID, nPages: nPages]; BEGIN -- Marshal owner: OldAlpineEnvironment.OwnerName to pkt.data[pktLength]. pkt.data[pktLength] ← owner=NIL; pktLength ← pktLength+1; IF owner # NIL THEN BEGIN textRope: Rope.Text = Rope.InlineFlatten[r: owner]; IF textRope.length > RpcPrivate.maxShortStringLength THEN Lupine.MarshalingError; pkt.data[pktLength] ← textRope.length; pktLength ← pktLength+1; pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength: pktLength, dataAdr: BASE[DESCRIPTOR[textRope.text]], dataLength: Lupine.WordsForChars[textRope.length], alwaysOnePkt: TRUE]; END; -- IF owner # NIL. END; -- Marshal owner. [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 0, signalHandler: ClientDispatcher]; Lupine.CheckPktLength[pkt: pkt, pktLength: 0]; RpcPrivate.DeAllocInline[LOOPHOLE[pkt], RpcPrivate.pktOverhead+51]; RETURN[]; END; -- UNWIND. END; -- ChangeSpaceForOwner. clientStubReadDBUniversalFile: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord, volumeGroupID: OldAlpineEnvironment.VolumeGroupID] RETURNS [dBID: OldAlpineEnvironment.UniversalFile] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ReadDBUniversalFile, volumeGroupID (1): OldAlpineEnvironment.VolumeGroupID]; ResultOverlay: TYPE = MACHINE DEPENDENT RECORD [ dBID (0): OldAlpineEnvironment.UniversalFile]; pktBuffer: ARRAY [1..RpcPrivate.pktOverhead+9] OF WORD; pkt: RpcPrivate.StubPkt = RpcPrivate.GetStubPkt[space: @pktBuffer]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; resPkt: LONG POINTER TO ResultOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 6; lastPkt: BOOLEAN; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface]; argPkt↑ ← [volumeGroupID: volumeGroupID]; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 9, signalHandler: ClientDispatcher]; [dBID: dBID] ← resPkt↑; Lupine.CheckPktLength[pkt: pkt, pktLength: 9]; RETURN[dBID]; END; -- ReadDBUniversalFile. clientStubReportAccessCacheStats: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord]RETURNS [nCacheEntries: NAT, statsCacheHit: INT, statsGrapevineAuthorized: INT, statsGrapevineNotAuthorized: INT, statsRegServersDown: INT, statsIndivGrapeNotAuthorized: INT] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ReportAccessCacheStats]; ResultOverlay: TYPE = MACHINE DEPENDENT RECORD [ nCacheEntries (0): NAT, statsCacheHit (1): INT, statsGrapevineAuthorized (3): INT, statsGrapevineNotAuthorized (5): INT, statsRegServersDown (7): INT, statsIndivGrapeNotAuthorized (9): INT]; pktBuffer: ARRAY [1..RpcPrivate.pktOverhead+11] OF WORD; pkt: RpcPrivate.StubPkt = RpcPrivate.GetStubPkt[space: @pktBuffer]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; resPkt: LONG POINTER TO ResultOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 1; lastPkt: BOOLEAN; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface]; argPkt.transferIndex ← ReportAccessCacheStats; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 11, signalHandler: ClientDispatcher]; [nCacheEntries: nCacheEntries, statsCacheHit: statsCacheHit, statsGrapevineAuthorized: statsGrapevineAuthorized, statsGrapevineNotAuthorized: statsGrapevineNotAuthorized, statsRegServersDown: statsRegServersDown, statsIndivGrapeNotAuthorized: statsIndivGrapeNotAuthorized] ← resPkt↑; Lupine.CheckPktLength[pkt: pkt, pktLength: 11]; RETURN[nCacheEntries, statsCacheHit, statsGrapevineAuthorized, statsGrapevineNotAuthorized, statsRegServersDown, statsIndivGrapeNotAuthorized]; END; -- ReportAccessCacheStats. clientStubReportAccessVolatileStats: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord]RETURNS [nRegs: INT, nInits: INT, nUnRegs: INT, nReorganizes: INT, nEnumAlls: INT, nAllocReqsWin: INT, nAllocReqsLose: INT, nDeallocReqs: INT, nRemoveOwner: INT, nEnumFindWin: INT, nEnumFindLose: INT, nSetEnums: INT, nActions: INT, nPhaseOnes: INT, nPhaseTwos: INT, nAborts: INT] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← ReportAccessVolatileStats]; ResultOverlay: TYPE = MACHINE DEPENDENT RECORD [ nRegs (0): INT, nInits (2): INT, nUnRegs (4): INT, nReorganizes (6): INT, nEnumAlls (8): INT, nAllocReqsWin (10): INT, nAllocReqsLose (12): INT, nDeallocReqs (14): INT, nRemoveOwner (16): INT, nEnumFindWin (18): INT, nEnumFindLose (20): INT, nSetEnums (22): INT, nActions (24): INT, nPhaseOnes (26): INT, nPhaseTwos (28): INT, nAborts (30): INT]; pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+32]]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; resPkt: LONG POINTER TO ResultOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 1; lastPkt: BOOLEAN; BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+32]; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface]; argPkt.transferIndex ← ReportAccessVolatileStats; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 32, signalHandler: ClientDispatcher]; [nRegs: nRegs, nInits: nInits, nUnRegs: nUnRegs, nReorganizes: nReorganizes, nEnumAlls: nEnumAlls, nAllocReqsWin: nAllocReqsWin, nAllocReqsLose: nAllocReqsLose, nDeallocReqs: nDeallocReqs, nRemoveOwner: nRemoveOwner, nEnumFindWin: nEnumFindWin, nEnumFindLose: nEnumFindLose, nSetEnums: nSetEnums, nActions: nActions, nPhaseOnes: nPhaseOnes, nPhaseTwos: nPhaseTwos, nAborts: nAborts] ← resPkt↑; Lupine.CheckPktLength[pkt: pkt, pktLength: 32]; RpcPrivate.DeAllocInline[LOOPHOLE[pkt], RpcPrivate.pktOverhead+32]; RETURN[nRegs, nInits, nUnRegs, nReorganizes, nEnumAlls, nAllocReqsWin, nAllocReqsLose, nDeallocReqs, nRemoveOwner, nEnumFindWin, nEnumFindLose, nSetEnums, nActions, nPhaseOnes, nPhaseTwos, nAborts]; END; -- UNWIND. END; -- ReportAccessVolatileStats. clientStubCrashSystem: PUBLIC PROCEDURE [interface: RpcControl.InterfaceRecord, conversation: OldAlpineEnvironment.Conversation, transID: OldAlpineEnvironment.TransID] = BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex ← CrashSystem, transID (1): OldAlpineEnvironment.TransID]; pktBuffer: ARRAY [1..RpcPrivate.pktOverhead+10] OF WORD; pkt: RpcPrivate.StubPkt = RpcPrivate.GetStubPkt[space: @pktBuffer]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 10; lastPkt: BOOLEAN; RpcPrivate.StartCall[callPkt: pkt, interface: interface.myInterface, localConversation: conversation]; argPkt↑ ← [transID: transID]; [returnLength: , lastPkt: lastPkt] ← RpcPrivate.Call[ pkt: pkt, callLength: pktLength, maxReturnLength: 0, signalHandler: ClientDispatcher]; Lupine.CheckPktLength[pkt: pkt, pktLength: 0]; RETURN[]; END; -- CrashSystem. -- Remote public signals and errors. AccessFailed: PUBLIC ERROR [missingAccess: OldAlpineEnvironment.NeededAccess] = CODE; LockFailed: PUBLIC ERROR [why: OldAlpineEnvironment.LockFailure] = CODE; OperationFailed: PUBLIC ERROR [why: OldAlpineEnvironment.OperationFailure] = CODE; StaticallyInvalid: PUBLIC ERROR = CODE; Unknown: PUBLIC ERROR [what: OldAlpineEnvironment.UnknownType] = CODE; -- Public signal and error dispatcher. ClientDispatcher: --PROCEDURE [pkt: RPCPkt, callLength: DataLength, -- lastPkt: BOOLEAN, localConversation: Conversation] RETURNS [returnLength: -- DataLength]-- RpcPrivate.Dispatcher = BEGIN SELECT LOOPHOLE[pkt.data[0], RpcControl.SignalIndex] FROM AccessFailed => RETURN[ AccessFailedStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; LockFailed => RETURN[ LockFailedStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; OperationFailed => RETURN[ OperationFailedStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; StaticallyInvalid => RETURN[ StaticallyInvalidStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; Unknown => RETURN[ UnknownStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; ENDCASE => RETURN[Lupine.DispatchingError[]]; END; -- ClientDispatcher -- Public signal and error dispatcher stubs. AccessFailedStub: --ERROR [missingAccess: OldAlpineEnvironment.NeededAccess]-- RpcPrivate.Dispatcher = INLINE BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.SignalIndex, missingAccess (1): OldAlpineEnvironment.NeededAccess]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; Lupine.CheckPktLength[pkt: pkt, pktLength: 2]; ERROR AccessFailed[argPkt.missingAccess]; END; -- AccessFailedStub. LockFailedStub: --ERROR [why: OldAlpineEnvironment.LockFailure]-- RpcPrivate.Dispatcher = INLINE BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.SignalIndex, why (1): OldAlpineEnvironment.LockFailure]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; Lupine.CheckPktLength[pkt: pkt, pktLength: 2]; ERROR LockFailed[argPkt.why]; END; -- LockFailedStub. OperationFailedStub: --ERROR [why: OldAlpineEnvironment.OperationFailure]-- RpcPrivate.Dispatcher = INLINE BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.SignalIndex, why (1): OldAlpineEnvironment.OperationFailure]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; Lupine.CheckPktLength[pkt: pkt, pktLength: 2]; ERROR OperationFailed[argPkt.why]; END; -- OperationFailedStub. StaticallyInvalidStub: --ERROR-- RpcPrivate.Dispatcher = INLINE BEGIN Lupine.CheckPktLength[pkt: pkt, pktLength: 1]; ERROR StaticallyInvalid[]; END; -- StaticallyInvalidStub. UnknownStub: --ERROR [what: OldAlpineEnvironment.UnknownType]-- RpcPrivate.Dispatcher = INLINE BEGIN ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.SignalIndex, what (1): OldAlpineEnvironment.UnknownType]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; Lupine.CheckPktLength[pkt: pkt, pktLength: 2]; ERROR Unknown[argPkt.what]; END; -- UnknownStub. -- No module initialization. END. -- OldAlpineDebugRpcClientImpl.