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: BOOLEAN ← FALSE;
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[]];
 
 
Public signal and error dispatcher stubs.
Marshall/Unmarshal procedures.
No module initialization.
END.  -- CedarNSPrintUtilsRpcClientImpl.