<> <> <> <> DIRECTORY CrRPC, TimeP15V2, AuthenticationP14V2, BulkDataP0V1, PrintingP4V3; PrintingP4V3ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS PrintingP4V3 ~ { OPEN PrintingP4V3; <> TransferError: PUBLIC TransferErrorType ~ CODE; InsufficientSpoolSpace: PUBLIC InsufficientSpoolSpaceType ~ CODE; Busy: PUBLIC BusyType ~ CODE; SpoolingQueueFull: PUBLIC SpoolingQueueFullType ~ CODE; SpoolingDisabled: PUBLIC SpoolingDisabledType ~ CODE; ConnectionError: PUBLIC ConnectionErrorType ~ CODE; MediumUnavailable: PUBLIC MediumUnavailableType ~ CODE; InvalidPrintParameters: PUBLIC InvalidPrintParametersType ~ CODE; Undefined: PUBLIC UndefinedType ~ CODE; SystemError: PUBLIC SystemErrorType ~ CODE; MasterTooLarge: PUBLIC MasterTooLargeType ~ CODE; ServiceUnavailable: PUBLIC ServiceUnavailableType ~ CODE; TooManyClients: PUBLIC TooManyClientsType ~ CODE; <> GetError: CrRPC.GetErrorProc ~ { SELECT errNum FROM 12 => { problem: TransferProblem; problem _ VAL[CrRPC.GetCard16[s]]; ERROR TransferError[problem] }; 1 => ERROR InsufficientSpoolSpace[]; 0 => ERROR Busy[]; 7 => ERROR SpoolingQueueFull[]; 6 => ERROR SpoolingDisabled[]; 11 => { problem: ConnectionProblem; problem _ VAL[CrRPC.GetCard16[s]]; ERROR ConnectionError[problem] }; 5 => ERROR MediumUnavailable[]; 2 => ERROR InvalidPrintParameters[]; 10 => { problem: CARD16; problem _ CrRPC.GetCard16[s]; ERROR Undefined[problem] }; 8 => ERROR SystemError[]; 3 => ERROR MasterTooLarge[]; 4 => ERROR ServiceUnavailable[]; 9 => ERROR TooManyClients[]; ENDCASE => { ERROR CrRPC.Error[h, remoteError, "Unexpected Remote Error"]; }; }; <> GetPrintRequestStatus: PUBLIC GetPrintRequestStatusType ~ { PutArgs: CrRPC.PutArgsProc ~ { FOR i1: CARDINAL IN [0..5) DO CrRPC.PutCard16[s, printRequestID[i1]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { status _ UProc2[h, s]; }; CrRPC.Call[h~h, remotePgm~4, remotePgmVersion~3, remoteProc~2 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; GetPrinterProperties: PUBLIC GetPrinterPropertiesType ~ { PutArgs: CrRPC.PutArgsProc ~ { }; GetResults: CrRPC.GetResultsProc ~ { properties _ UProc3[h, s]; }; CrRPC.Call[h~h, remotePgm~4, remotePgmVersion~3, remoteProc~1 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; GetPrinterStatus: PUBLIC GetPrinterStatusType ~ { PutArgs: CrRPC.PutArgsProc ~ { }; GetResults: CrRPC.GetResultsProc ~ { status _ UProc4[h, s]; }; CrRPC.Call[h~h, remotePgm~4, remotePgmVersion~3, remoteProc~3 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; Print: PUBLIC PrintType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutBulkDataSource[h, s, master]; MProc5[h, s, printAttributes]; MProc6[h, s, printOptions]; }; GetResults: CrRPC.GetResultsProc ~ { FOR i7: CARDINAL IN [0..5) DO printRequestID[i7] _ CrRPC.GetCard16[s]; ENDLOOP; }; CrRPC.Call[h~h, remotePgm~4, remotePgmVersion~3, remoteProc~0 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; <> UProc3: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: PrinterProperties] ~ { { length9: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[PrinterPropertiesObject[length9]]; FOR i8: CARDINAL IN [0..length9) DO res.body[i8] _ UProc10[h, s]; ENDLOOP; }; }; UProc2: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: RequestStatus] ~ { { length12: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[RequestStatusObject[length12]]; FOR i11: CARDINAL IN [0..length12) DO res.body[i11] _ UProc13[h, s]; ENDLOOP; }; }; UProc4: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: PrinterStatus] ~ { { length15: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[PrinterStatusObject[length15]]; FOR i14: CARDINAL IN [0..length15) DO res.body[i14] _ UProc16[h, s]; ENDLOOP; }; }; MProc6: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: PrintOptions] ~ { CrRPC.PutCard16[s, val.length]; FOR i17: CARDINAL IN [0..val.length) DO MProc18[h, s, val.body[i17]]; ENDLOOP; }; UProc13: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: JobStatus] ~ { { tag19: JobStatusKind ~ VAL[CrRPC.GetCard16[s]]; SELECT tag19 FROM status => { temp20: InterpressMasterStatus; temp20 _ VAL[CrRPC.GetCard16[s]]; res _ NEW[JobStatusObject.status _ [status[temp20]]] }; statusMessage => { temp20: ROPE; temp20 _ CrRPC.GetRope[s]; res _ NEW[JobStatusObject.statusMessage _ [statusMessage[temp20]]] }; ENDCASE => ERROR; }; }; MProc5: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: PrintAttributes] ~ { CrRPC.PutCard16[s, val.length]; FOR i21: CARDINAL IN [0..val.length) DO MProc22[h, s, val.body[i21]]; ENDLOOP; }; UProc16: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: ServiceStatus] ~ { { tag23: StatusKind ~ VAL[CrRPC.GetCard16[s]]; SELECT tag23 FROM spooler => { temp24: SpoolerStatus; temp24 _ VAL[CrRPC.GetCard16[s]]; res _ NEW[ServiceStatusObject.spooler _ [spooler[temp24]]] }; formatter => { temp24: FormatterStatus; temp24 _ VAL[CrRPC.GetCard16[s]]; res _ NEW[ServiceStatusObject.formatter _ [formatter[temp24]]] }; printer => { temp24: MarkingEngineStatus; temp24 _ VAL[CrRPC.GetCard16[s]]; res _ NEW[ServiceStatusObject.printer _ [printer[temp24]]] }; media => { temp24: Media; temp24 _ UProc25[h, s]; res _ NEW[ServiceStatusObject.media _ [media[temp24]]] }; ENDCASE => ERROR; }; }; UProc10: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Property] ~ { { tag26: PropertyKind ~ VAL[CrRPC.GetCard16[s]]; SELECT tag26 FROM ppmedia => { temp27: Media; temp27 _ UProc25[h, s]; res _ NEW[PropertyObject.ppmedia _ [ppmedia[temp27]]] }; ppstaple => { temp27: BOOLEAN; temp27 _ CrRPC.GetBool[s]; res _ NEW[PropertyObject.ppstaple _ [ppstaple[temp27]]] }; pptwoSided => { temp27: BOOLEAN; temp27 _ CrRPC.GetBool[s]; res _ NEW[PropertyObject.pptwoSided _ [pptwoSided[temp27]]] }; ENDCASE => ERROR; }; }; MProc18: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: Option] ~ { CrRPC.PutCard16[s, ORD[val.type]]; WITH val SELECT FROM it: REF OptionObject.printObjectSize => { CrRPC.PutCard32[s, it^.printObjectSize]; }; it: REF OptionObject.recipientName => { CrRPC.PutRope[s, it^.recipientName]; }; it: REF OptionObject.message => { CrRPC.PutRope[s, it^.message]; }; it: REF OptionObject.copyCount => { CrRPC.PutCard16[s, it^.copyCount]; }; it: REF OptionObject.pagesToPrint => { CrRPC.PutCard16[s, it^.pagesToPrint.beginningPageNumber]; CrRPC.PutCard16[s, it^.pagesToPrint.endingPageNumber]; }; it: REF OptionObject.mediumHint => { MProc29[h, s, it^.mediumHint]; }; it: REF OptionObject.priorityHint => { CrRPC.PutCard16[s, ORD[it^.priorityHint]]; }; it: REF OptionObject.releaseKey => { CrRPC.PutCard16[s, it^.releaseKey]; }; it: REF OptionObject.staple => { CrRPC.PutBool[s, it^.staple]; }; it: REF OptionObject.twoSided => { CrRPC.PutBool[s, it^.twoSided]; }; ENDCASE; }; MProc22: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: Attribute] ~ { CrRPC.PutCard16[s, ORD[val.type]]; WITH val SELECT FROM it: REF AttributeObject.printObjectName => { CrRPC.PutRope[s, it^.printObjectName]; }; it: REF AttributeObject.printObjectCreateDate => { CrRPC.PutCard32[s, it^.printObjectCreateDate]; }; it: REF AttributeObject.senderName => { CrRPC.PutRope[s, it^.senderName]; }; ENDCASE; }; UProc25: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Media] ~ { { length32: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[MediaObject[length32]]; FOR i31: CARDINAL IN [0..length32) DO res.body[i31] _ UProc33[h, s]; ENDLOOP; }; }; MProc29: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: Medium] ~ { CrRPC.PutCard16[s, ORD[val.type]]; WITH val SELECT FROM it: REF MediumObject.paper => { MProc35[h, s, it^.paper]; }; ENDCASE; }; UProc33: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Medium] ~ { { tag36: MediumKind ~ VAL[CrRPC.GetCard16[s]]; SELECT tag36 FROM paper => { temp37: Paper; temp37 _ UProc38[h, s]; res _ NEW[MediumObject.paper _ [paper[temp37]]] }; ENDCASE => ERROR; }; }; MProc35: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: Paper] ~ { CrRPC.PutCard16[s, ORD[val.type]]; WITH val SELECT FROM it: REF PaperObject.unknown => { NULL; -- RECORD [] -- }; it: REF PaperObject.knownSize => { CrRPC.PutCard16[s, ORD[it^.knownSize]]; }; it: REF PaperObject.otherSize => { CrRPC.PutCard16[s, it^.otherSize.width]; CrRPC.PutCard16[s, it^.otherSize.length]; }; ENDCASE; }; UProc38: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: Paper] ~ { { tag40: PaperKind ~ VAL[CrRPC.GetCard16[s]]; SELECT tag40 FROM unknown => { temp41: EmptyRecord; temp41.null _ 0; res _ NEW[PaperObject.unknown _ [unknown[temp41]]] }; knownSize => { temp41: KnownPaperSize; temp41 _ VAL[CrRPC.GetCard16[s]]; res _ NEW[PaperObject.knownSize _ [knownSize[temp41]]] }; otherSize => { temp41: PaperDimensions; temp41.width _ CrRPC.GetCard16[s]; temp41.length _ CrRPC.GetCard16[s]; res _ NEW[PaperObject.otherSize _ [otherSize[temp41]]] }; ENDCASE => ERROR; }; }; }...