-- 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.