Copyright (C) 1985 by Xerox Corporation. All rights reserved.
Stub file was translated on June 22, 1985 9:34:43 pm PDT by Lupine of May 23, 1985 8:38:08 am PDT
Source interface CedarNSPrintUtils came from file CedarNSPrintUtils.bcd, which was created on June 22, 1985 9:34:05 pm PDT with version stamp 44#63#2012746333 from source of June 22, 1985 1:52:12 am PDT.
The RPC stub modules for CedarNSPrintUtils are:
CedarNSPrintUtilsRpcControl.mesa;
CedarNSPrintUtilsRpcClientImpl.mesa;
CedarNSPrintUtilsRpcBinderImpl.mesa;
CedarNSPrintUtilsRpcServerImpl.mesa.
The parameters for this translation are:
Target language = Cedar
Default parameter passing = VALUE
Deallocate server heap arguments = TRUE
Inline RpcServerImpl dispatcher stubs = FALSE
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
CedarNSPrint,
CedarNSPrintUtils,
CedarNSPrintUtilsRpcControl 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, maxDataLength,
maxPrincipalLength, maxShortStringLength, pktOverhead, ReceiveExtraPkt,
-- 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]--;
CedarNSPrintUtilsRpcClientImpl: MONITOR
IMPORTS RpcPrivate: RPCLupine, Lupine: LupineRuntime, Atom, PrincOpsUtils,
Rope
EXPORTS CedarNSPrintUtils, CedarNSPrintUtilsRpcControl
SHARES CedarNSPrintUtils, CedarNSPrintUtilsRpcControl, Rope
= BEGIN OPEN CedarNSPrintUtils, RpcControl: CedarNSPrintUtilsRpcControl,
RpcPublic: RPC;
Standard remote binding routines.
bound: BOOLEANFALSE;
myInterface: RpcPrivate.ImportHandle;
paramZones: RpcPublic.Zones ← RpcPublic.standardZones;
ImportInterface: PUBLIC ENTRY SAFE PROCEDURE [
interfaceName: RpcPublic.InterfaceName,
parameterStorage: RpcPublic.Zones ] =
TRUSTED BEGIN ENABLE UNWIND => NULL;
IsNull: PROCEDURE [string: Rope.ROPE] RETURNS [BOOLEAN] =
INLINE {RETURN[string.Length[] = 0]};
myInterface ← RpcPrivate.ImportInterface [
interface: [
type: IF ~IsNull[interfaceName.type]
THEN interfaceName.type ELSE "CedarNSPrintUtils~44#63#2012746333",
instance: interfaceName.instance,
version: interfaceName.version ],
localOnly: RpcControl.InterMdsCallsOnly,
stubProtocol: RpcControl.LupineProtocolVersion ];
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 ];
bound ← TRUE;
END;
UnimportInterface: PUBLIC ENTRY SAFE PROCEDURE =
TRUSTED BEGIN ENABLE UNWIND => NULL;
IF ~bound THEN Lupine.BindingError;
myInterface ← RpcPrivate.UnimportInterface[myInterface];
paramZones ← RpcPublic.standardZones;
bound ← FALSE;
END;
Remote public procedure stubs.
FreeString: PUBLIC PROCEDURE [string: LONG POINTER TO String] =
BEGIN
ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [
transferIndex (0): RpcControl.ProcedureIndex ← FreeString];
pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]];
argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0];
pktLength: RpcPrivate.DataLength ← 1;
lastPkt: BOOLEAN;
BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254];
RpcPrivate.StartCall[callPkt: pkt, interface: myInterface];
argPkt.transferIndex ← FreeString;
BEGIN -- Marshal string: LONG POINTER TO String to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← string=NIL; pktLength ← pktLength+1;
IF string # NIL THEN
BEGIN -- Marshal string^: String to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength: pktLength,
dataAdr: string, dataLength: SIZE[String], alwaysOnePkt:
FALSE];
BEGIN OPEN record: string^;
BEGIN -- Marshal record.bytes: LONG POINTER TO PACKED
ARRAY CARDINAL OF [0..255] to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← record.bytes=NIL; pktLength ←
pktLength+1;
IF record.bytes # NIL THEN
BEGIN -- Marshal record.bytes^: PACKED ARRAY CARDINAL
OF [0..255] to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength:
pktLength, dataAdr: @record.bytes^, dataLength: SIZE[PACKED
ARRAY CARDINAL OF [0..255]], alwaysOnePkt: FALSE];
END; -- Marshal record.bytes^.
END; -- Marshal record.bytes.
END; -- OPEN record: string^.
END; -- Marshal string^.
END; -- Marshal string.
[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+254];
RETURN[];
END; -- UNWIND.
END; -- FreeString.
FreeMedia: PUBLIC PROCEDURE [media: LONG POINTER TO Media] =
BEGIN
ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [
transferIndex (0): RpcControl.ProcedureIndex ← FreeMedia];
pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]];
argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0];
pktLength: RpcPrivate.DataLength ← 1;
lastPkt: BOOLEAN;
BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254];
RpcPrivate.StartCall[callPkt: pkt, interface: myInterface];
argPkt.transferIndex ← FreeMedia;
BEGIN -- Marshal media: LONG POINTER TO Media to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← media=NIL; pktLength ← pktLength+1;
IF media # NIL THEN
BEGIN -- Marshal media^: Media to pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^ ← (IF BASE[media^]=NIL
THEN 0 ELSE LENGTH[media^]);
pktLength ← pktLength + 2;
IF BASE[media^] # NIL THEN
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength: pktLength,
dataAdr: BASE[media^], dataLength: SIZE[CedarNSPrint.Medium]*LENGTH[media^],
alwaysOnePkt: FALSE];
END; -- Marshal media^.
END; -- Marshal media.
[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+254];
RETURN[];
END; -- UNWIND.
END; -- FreeMedia.
FreePrinterProperties: PUBLIC PROCEDURE [printerProperties: LONG
POINTER TO PrinterProperties] =
BEGIN
ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [
transferIndex (0): RpcControl.ProcedureIndex ← FreePrinterProperties];
pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]];
argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0];
pktLength: RpcPrivate.DataLength ← 1;
lastPkt: BOOLEAN;
BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254];
RpcPrivate.StartCall[callPkt: pkt, interface: myInterface];
argPkt.transferIndex ← FreePrinterProperties;
BEGIN -- Marshal printerProperties: LONG POINTER TO PrinterProperties
to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← printerProperties=NIL; pktLength ← pktLength+1;
IF printerProperties # NIL THEN
BEGIN -- Marshal printerProperties^: PrinterProperties to
pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^ ← (IF BASE[printerProperties^]=NIL
THEN 0 ELSE LENGTH[printerProperties^]);
pktLength ← pktLength + 2;
IF BASE[printerProperties^] # NIL THEN
FOR element2: CARDINAL IN [FIRST[CARDINAL]..FIRST[CARDINAL]+LENGTH[printerProperties^])
DO
BEGIN -- Marshal printerProperties^[element2]: CedarNSPrint.PrinterProperty
to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength:
pktLength, dataAdr: @printerProperties^[element2],
dataLength: SIZE[CedarNSPrint.PrinterProperty], alwaysOnePkt:
FALSE];
BEGIN OPEN record: printerProperties^[element2];
WITH variant: record SELECT FROM
media =>
BEGIN -- Marshal variant: MACHINE DEPENDENT
RECORD [media: Media] to pkt.data[pktLength].
BEGIN OPEN record: variant;
BEGIN -- Marshal record.media: Media to pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt:
pkt, pktLength: pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^
← (IF BASE[record.media]=NIL THEN 0 ELSE
LENGTH[record.media]);
pktLength ← pktLength + 2;
IF BASE[record.media] # NIL THEN
pktLength ← Lupine.CopyToPkt[pkt: pkt,
pktLength: pktLength, dataAdr: BASE[record.media],
dataLength: SIZE[Medium]*LENGTH[record.media],
alwaysOnePkt: FALSE];
END; -- Marshal record.media.
END; -- OPEN record: variant.
END; -- Marshal variant.
ENDCASE => NULL; -- WITH variant: record.
END; -- OPEN record: printerProperties^[element2].
END; -- Marshal printerProperties^[element2].
ENDLOOP; -- FOR element2.
END; -- Marshal printerProperties^.
END; -- Marshal printerProperties.
[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+254];
RETURN[];
END; -- UNWIND.
END; -- FreePrinterProperties.
FreePrinterStatus: PUBLIC PROCEDURE [printerStatus: LONG POINTER
TO PrinterStatus] =
BEGIN
ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [
transferIndex (0): RpcControl.ProcedureIndex ← FreePrinterStatus];
pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]];
argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0];
pktLength: RpcPrivate.DataLength ← 1;
lastPkt: BOOLEAN;
BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254];
RpcPrivate.StartCall[callPkt: pkt, interface: myInterface];
argPkt.transferIndex ← FreePrinterStatus;
BEGIN -- Marshal printerStatus: LONG POINTER TO PrinterStatus
to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← printerStatus=NIL; pktLength ← pktLength+1;
IF printerStatus # NIL THEN
BEGIN -- Marshal printerStatus^: PrinterStatus to pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^ ← (IF BASE[printerStatus^]=NIL
THEN 0 ELSE LENGTH[printerStatus^]);
pktLength ← pktLength + 2;
IF BASE[printerStatus^] # NIL THEN
FOR element2: CARDINAL IN [FIRST[CARDINAL]..FIRST[CARDINAL]+LENGTH[printerStatus^])
DO
BEGIN -- Marshal printerStatus^[element2]: CedarNSPrint.PrinterStatusComponent
to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength:
pktLength, dataAdr: @printerStatus^[element2], dataLength:
SIZE[CedarNSPrint.PrinterStatusComponent], alwaysOnePkt:
FALSE];
BEGIN OPEN record: printerStatus^[element2];
WITH variant: record SELECT FROM
media =>
BEGIN -- Marshal variant: MACHINE DEPENDENT
RECORD [media: Media] to pkt.data[pktLength].
BEGIN OPEN record: variant;
BEGIN -- Marshal record.media: Media to pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt:
pkt, pktLength: pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^
← (IF BASE[record.media]=NIL THEN 0 ELSE
LENGTH[record.media]);
pktLength ← pktLength + 2;
IF BASE[record.media] # NIL THEN
pktLength ← Lupine.CopyToPkt[pkt: pkt,
pktLength: pktLength, dataAdr: BASE[record.media],
dataLength: SIZE[Medium]*LENGTH[record.media],
alwaysOnePkt: FALSE];
END; -- Marshal record.media.
END; -- OPEN record: variant.
END; -- Marshal variant.
ENDCASE => NULL; -- WITH variant: record.
END; -- OPEN record: printerStatus^[element2].
END; -- Marshal printerStatus^[element2].
ENDLOOP; -- FOR element2.
END; -- Marshal printerStatus^.
END; -- Marshal printerStatus.
[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+254];
RETURN[];
END; -- UNWIND.
END; -- FreePrinterStatus.
FreeRequestStatus: PUBLIC PROCEDURE [requestStatus: LONG POINTER
TO RequestStatus] =
BEGIN
ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [
transferIndex (0): RpcControl.ProcedureIndex ← FreeRequestStatus];
pkt: RpcPrivate.RPCPkt = RpcPrivate.GetPkt[space: RpcPrivate.AllocInline[RpcPrivate.pktOverhead+254]];
argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0];
pktLength: RpcPrivate.DataLength ← 1;
lastPkt: BOOLEAN;
BEGIN ENABLE UNWIND => RpcPrivate.DeAlloc[LOOPHOLE[pkt], RpcPrivate.pktOverhead+254];
RpcPrivate.StartCall[callPkt: pkt, interface: myInterface];
argPkt.transferIndex ← FreeRequestStatus;
BEGIN -- Marshal requestStatus: LONG POINTER TO RequestStatus
to pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
pkt.data[pktLength] ← requestStatus=NIL; pktLength ← pktLength+1;
IF requestStatus # NIL THEN
BEGIN -- Marshal requestStatus^: RequestStatus to pkt.data[pktLength].
IF pktLength+2 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt: pkt, pktLength:
pktLength];
Lupine.RpcPktDoubleWord[pkt, pktLength]^ ← (IF BASE[requestStatus^]=NIL
THEN 0 ELSE LENGTH[requestStatus^]);
pktLength ← pktLength + 2;
IF BASE[requestStatus^] # NIL THEN
FOR element2: CARDINAL IN [FIRST[CARDINAL]..FIRST[CARDINAL]+LENGTH[requestStatus^])
DO
BEGIN -- Marshal requestStatus^[element2]: CedarNSPrint.RequestStatusComponent
to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt, pktLength:
pktLength, dataAdr: @requestStatus^[element2], dataLength:
SIZE[CedarNSPrint.RequestStatusComponent], alwaysOnePkt:
FALSE];
BEGIN OPEN record: requestStatus^[element2];
WITH variant: record SELECT FROM
statusMessage =>
BEGIN -- Marshal variant: MACHINE DEPENDENT
RECORD [statusMessage: String] to pkt.data[pktLength].
BEGIN OPEN record: variant;
BEGIN -- Marshal record.statusMessage: String
to pkt.data[pktLength].
BEGIN OPEN record: record.statusMessage;
BEGIN -- Marshal record.bytes: LONG POINTER
TO PACKED ARRAY CARDINAL OF [0..255] to
pkt.data[pktLength].
IF pktLength+1 > RpcPrivate.maxDataLength
THEN pktLength ← Lupine.StartNextPkt[pkt:
pkt, pktLength: pktLength];
pkt.data[pktLength] ← record.bytes=NIL;
pktLength ← pktLength+1;
IF record.bytes # NIL THEN
BEGIN -- Marshal record.bytes^: PACKED
ARRAY CARDINAL OF [0..255] to pkt.data[pktLength].
pktLength ← Lupine.CopyToPkt[pkt: pkt,
pktLength: pktLength, dataAdr: @record.bytes^,
dataLength: SIZE[PACKED ARRAY CARDINAL
OF [0..255]], alwaysOnePkt: FALSE];
END; -- Marshal record.bytes^.
END; -- Marshal record.bytes.
END; -- OPEN record: record.statusMessage.
END; -- Marshal record.statusMessage.
END; -- OPEN record: variant.
END; -- Marshal variant.
ENDCASE => NULL; -- WITH variant: record.
END; -- OPEN record: requestStatus^[element2].
END; -- Marshal requestStatus^[element2].
ENDLOOP; -- FOR element2.
END; -- Marshal requestStatus^.
END; -- Marshal requestStatus.
[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+254];
RETURN[];
END; -- UNWIND.
END; -- FreeRequestStatus.
Remote public signals and errors.
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
ENDCASE => RETURN[Lupine.DispatchingError[]];
END; -- ClientDispatcher
Public signal and error dispatcher stubs.
Marshall/Unmarshal procedures.
No module initialization.
END. -- CedarNSPrintUtilsRpcClientImpl.