{ Created: Saturday, July 27, 1991 at 10:35 PM Printing.p Pascal Interface to the Macintosh Libraries Copyright Apple Computer, Inc. 1985-1991 All rights reserved This file is used in these builds: BigBang Sys606 Change History (most recent first): <5> 2/18/92 MH This file now uses the inline access to the _PrGlue trap which was formerly provided in PrintTraps.p. The glue routines from interfaces.o which were formerly accessed via this file were only necessary to support execution on a Mac Plus or earlier running system 4.0 or earlier. It is no longer necessary to support that configuration in current internal or external product development. The file PrintTraps.p is now a stub which only includes this file. <4> 8/8/91 JL Added OpNotImpl as Found in IM v. V p. 411 <3> 7/31/91 JL Updated Copyright. Restored Comments. <2> 1/28/91 LN Checked in Database Generated File from DSG. Added PrIdleProcPtr to match .h file. To Do: } {$IFC UNDEFINED UsingIncludes} {$SETC UsingIncludes := 0} {$ENDC} {$IFC NOT UsingIncludes} UNIT Printing; INTERFACE {$ENDC} {$IFC UNDEFINED UsingPrinting} {$SETC UsingPrinting := 1} {$I+} {$SETC PrintingIncludes := UsingIncludes} {$SETC UsingIncludes := 1} {$IFC UNDEFINED UsingQuickdraw} {$I $$Shell(PInterfaces)Quickdraw.p} {$ENDC} {$IFC UNDEFINED UsingDialogs} {$I $$Shell(PInterfaces)Dialogs.p} {$ENDC} {$SETC UsingIncludes := PrintingIncludes} CONST iPFMaxPgs = 128; iPrPgFract = 120; {Page scale factor. ptPgSize (below) is in units of 1/iPrPgFract} iPrPgFst = 1; {Page range constants} iPrPgMax = 9999; iPrRelease = 3; {Current version number of the code.} iPrSavPFil = -1; iPrAbort = $0080; iPrDevCtl = 7; {The PrDevCtl Proc's ctl number} lPrReset = $00010000; {The PrDevCtl Proc's CParam for reset} lPrLineFeed = $00030000; lPrLFStd = $0003FFFF; {The PrDevCtl Proc's CParam for std paper advance} lPrLFSixth = $0003FFFF; lPrPageEnd = $00020000; {The PrDevCtl Proc's CParam for end page} lPrDocOpen = $00010000; lPrPageOpen = $00040000; lPrPageClose = $00020000; lPrDocClose = $00050000; iFMgrCtl = 8; {The FMgr's Tail-hook Proc's ctl number} iMscCtl = 9; {The FMgr's Tail-hook Proc's ctl number} iPvtCtl = 10; {The FMgr's Tail-hook Proc's ctl number} iMemFullErr = -108; iIOAbort = -27; pPrGlobals = $00000944; {The PrVars lo mem area:} bDraftLoop = 0; bSpoolLoop = 1; bUser1Loop = 2; bUser2Loop = 3; fNewRunBit = 2; fHiResOK = 3; fWeOpenedRF = 4; {Driver constants } iPrBitsCtl = 4; lScreenBits = 0; lPaintBits = 1; lHiScreenBits = $00000002; {The Bitmap Print Proc's Screen Bitmap param} lHiPaintBits = $00000003; {The Bitmap Print Proc's Paint [sq pix] param} iPrIOCtl = 5; iPrEvtCtl = 6; {The PrEvent Proc's ctl number} lPrEvtAll = $0002FFFD; {The PrEvent Proc's CParam for the entire screen} lPrEvtTop = $0001FFFD; {The PrEvent Proc's CParam for the top folder} iPrDrvrRef = -3; getRslDataOp = 4; setRslOp = 5; draftBitsOp = 6; noDraftBitsOp = 7; getRotnOp = 8; NoSuchRsl = 1; OpNotImpl = 2; {the driver doesn't support this opcode} RgType1 = 1; TYPE TFeed = (feedCut,feedFanfold,feedMechCut,feedOther); TScan = (scanTB,scanBT,scanLR,scanRL); TPRect = ^Rect; { A Rect Ptr } PrIdleProcPtr = ProcPtr; PItemProcPtr = ProcPtr; TPPrPort = ^TPrPort; TPrPort = RECORD gPort: GrafPort; {The Printer's graf port.} gProcs: QDProcs; {..and its procs} lGParam1: LONGINT; {16 bytes for private parameter storage.} lGParam2: LONGINT; lGParam3: LONGINT; lGParam4: LONGINT; fOurPtr: BOOLEAN; {Whether the PrPort allocation was done by us.} fOurBits: BOOLEAN; {Whether the BitMap allocation was done by us.} END; { Printing Graf Port. All printer imaging, whether spooling, banding, etc, happens "thru" a GrafPort. This is the "PrPeek" record. } TPPrInfo = ^TPrInfo; TPrInfo = RECORD iDev: INTEGER; {Font mgr/QuickDraw device code} iVRes: INTEGER; {Resolution of device, in device coordinates} iHRes: INTEGER; {..note: V before H => compatable with Point.} rPage: Rect; {The page (printable) rectangle in device coordinates.} END; { Print Info Record: The parameters needed for page composition. } TPPrStl = ^TPrStl; TPrStl = RECORD wDev: INTEGER; iPageV: INTEGER; iPageH: INTEGER; bPort: SignedByte; feed: TFeed; END; TPPrXInfo = ^TPrXInfo; TPrXInfo = RECORD iRowBytes: INTEGER; iBandV: INTEGER; iBandH: INTEGER; iDevBytes: INTEGER; iBands: INTEGER; bPatScale: SignedByte; bUlThick: SignedByte; bUlOffset: SignedByte; bUlShadow: SignedByte; scan: TScan; bXInfoX: SignedByte; END; TPPrJob = ^TPrJob; TPrJob = RECORD iFstPage: INTEGER; {Page Range.} iLstPage: INTEGER; iCopies: INTEGER; {No. copies.} bJDocLoop: SignedByte; {The Doc style: Draft, Spool, .., and ..} fFromUsr: BOOLEAN; {Printing from an User's App (not PrApp) flag} pIdleProc: PrIdleProcPtr; {The Proc called while waiting on IO etc.} pFileName: StringPtr; {Spool File Name: NIL for default.} iFileVol: INTEGER; {Spool File vol, set to 0 initially} bFileVers: SignedByte; {Spool File version, set to 0 initially} bJobX: SignedByte; {An eXtra byte.} END; TPrFlag1 = PACKED RECORD f15: BOOLEAN; f14: BOOLEAN; f13: BOOLEAN; f12: BOOLEAN; f11: BOOLEAN; f10: BOOLEAN; f9: BOOLEAN; f8: BOOLEAN; f7: BOOLEAN; f6: BOOLEAN; f5: BOOLEAN; f4: BOOLEAN; f3: BOOLEAN; f2: BOOLEAN; fLstPgFst: BOOLEAN; fUserScale: BOOLEAN; END; { Print Job: Print "form" for a single print request. } TPPrint = ^TPrint; THPrint = ^TPPrint; TPrint = RECORD iPrVersion: INTEGER; {(2) Printing software version} prInfo: TPrInfo; {(14) the PrInfo data associated with the current style.} rPaper: Rect; {(8) The paper rectangle [offset from rPage]} prStl: TPrStl; {(8) This print request's style.} prInfoPT: TPrInfo; {(14) Print Time Imaging metrics} prXInfo: TPrXInfo; {(16) Print-time (expanded) Print info record.} prJob: TPrJob; {(20) The Print Job request (82) Total of the above; 120-82 = 38 bytes needed to fill 120} CASE INTEGER OF 0: (printX: ARRAY [1..19] OF INTEGER); 1: (prFlag1: TPrFlag1; {a word of flags} iZoomMin: INTEGER; iZoomMax: INTEGER; hDocName: StringHandle); {current doc's name, nil = front window} END; { The universal 120 byte printing record } TPPrStatus = ^TPrStatus; TPrStatus = RECORD iTotPages: INTEGER; {Total pages in Print File.} iCurPage: INTEGER; {Current page number} iTotCopies: INTEGER; {Total copies requested} iCurCopy: INTEGER; {Current copy number} iTotBands: INTEGER; {Total bands per page.} iCurBand: INTEGER; {Current band number} fPgDirty: BOOLEAN; {True if current page has been written to.} fImaging: BOOLEAN; {Set while in band's DrawPic call.} hPrint: THPrint; {Handle to the active Printer record} pPrPort: TPPrPort; {Ptr to the active PrPort} hPic: PicHandle; {Handle to the active Picture} END; { Print Status: Print information during printing. } TPPfPgDir = ^TPfPgDir; THPfPgDir = ^TPPfPgDir; TPfPgDir = RECORD iPages: INTEGER; iPgPos: ARRAY [0..128] OF LONGINT; {ARRAY [0..iPfMaxPgs] OF LONGINT} END; { PicFile = a TPfHeader followed by n QuickDraw Pics (whose PicSize is invalid!) } TPPrDlg = ^TPrDlg; TPrDlg = RECORD Dlg: DialogRecord; {The Dialog window} pFltrProc: ModalFilterProcPtr; {The Filter Proc.} pItemProc: PItemProcPtr; {The Item evaluating proc.} hPrintUsr: THPrint; {The user's print record.} fDoIt: BOOLEAN; fDone: BOOLEAN; lUser1: LONGINT; {Four longs for user's to hang global data.} lUser2: LONGINT; {...Plus more stuff needed by the particular printing dialog.} lUser3: LONGINT; lUser4: LONGINT; END; PDlgInitProcPtr = ProcPtr; TGnlData = RECORD iOpCode: INTEGER; iError: INTEGER; lReserved: LONGINT; {more fields here depending on call} END; TRslRg = RECORD iMin: INTEGER; iMax: INTEGER; END; TRslRec = RECORD iXRsl: INTEGER; iYRsl: INTEGER; END; TGetRslBlk = RECORD iOpCode: INTEGER; iError: INTEGER; lReserved: LONGINT; iRgType: INTEGER; xRslRg: TRslRg; yRslRg: TRslRg; iRslRecCnt: INTEGER; rgRslRec: ARRAY [1..27] OF TRslRec; END; TSetRslBlk = RECORD iOpCode: INTEGER; iError: INTEGER; lReserved: LONGINT; hPrint: THPrint; iXRsl: INTEGER; iYRsl: INTEGER; END; TDftBitsBlk = RECORD iOpCode: INTEGER; iError: INTEGER; lReserved: LONGINT; hPrint: THPrint; END; TGetRotnBlk = RECORD iOpCode: INTEGER; iError: INTEGER; lReserved: LONGINT; hPrint: THPrint; fLandscape: BOOLEAN; bXtra: SignedByte; END; TPBitMap = ^BitMap; { A BitMap Ptr } TN = 0..15; { a Nibble } TPWord = ^TWord; THWord = ^TPWord; TWord = PACKED RECORD CASE INTEGER OF 0: (c1,c0: CHAR); 1: (b1,b0: SignedByte); 2: (usb1,usb0: Byte); 3: (n3,n2,n1,n0: TN); 4: (f15,f14,f13,f12,f11,f10,f9,f8,f7,f6,f5,f4,f3,f2,f1,f0: BOOLEAN); 5: (i0: INTEGER); END; TPLong = ^TLong; THLong = ^TPLong; TLong = RECORD CASE INTEGER OF 0: (w1,w0: TWord); 1: (b1,b0: LONGINT); 2: (p0: Ptr); 3: (h0: Handle); 4: (pt: Point); END; PROCEDURE PrPurge; INLINE $2F3C,$A800,$0000,$A8FD; PROCEDURE PrNoPurge; INLINE $2F3C,$B000,$0000,$A8FD; PROCEDURE PrOpen; INLINE $2F3C,$C800,$0000,$A8FD; PROCEDURE PrClose; INLINE $2F3C,$D000,$0000,$A8FD; PROCEDURE PrintDefault(hPrint: THPrint); INLINE $2F3C,$2004,$0480,$A8FD; FUNCTION PrValidate(hPrint: THPrint): BOOLEAN; INLINE $2F3C,$5204,$0498,$A8FD; FUNCTION PrStlDialog(hPrint: THPrint): BOOLEAN; INLINE $2F3C,$2A04,$0484,$A8FD; FUNCTION PrJobDialog(hPrint: THPrint): BOOLEAN; INLINE $2F3C,$3204,$0488,$A8FD; FUNCTION PrStlInit(hPrint: THPrint): TPPrDlg; INLINE $2F3C,$3C04,$040C,$A8FD; FUNCTION PrJobInit(hPrint: THPrint): TPPrDlg; INLINE $2F3C,$4404,$0410,$A8FD; PROCEDURE PrJobMerge(hPrintSrc: THPrint;hPrintDst: THPrint); INLINE $2F3C,$5804,$089C,$A8FD; FUNCTION PrDlgMain(hPrint: THPrint;pDlgInit: PDlgInitProcPtr): BOOLEAN; INLINE $2F3C,$4A04,$0894,$A8FD; FUNCTION PrOpenDoc(hPrint: THPrint;pPrPort: TPPrPort;pIOBuf: Ptr): TPPrPort; INLINE $2F3C,$0400,$0C00,$A8FD; PROCEDURE PrCloseDoc(pPrPort: TPPrPort); INLINE $2F3C,$0800,$0484,$A8FD; PROCEDURE PrOpenPage(pPrPort: TPPrPort;pPageFrame: TPRect); INLINE $2F3C,$1000,$0808,$A8FD; PROCEDURE PrClosePage(pPrPort: TPPrPort); INLINE $2F3C,$1800,$040C,$A8FD; PROCEDURE PrPicFile(hPrint: THPrint;pPrPort: TPPrPort;pIOBuf: Ptr;pDevBuf: Ptr; VAR prStatus: TPrStatus); INLINE $2F3C,$6005,$1480,$A8FD; FUNCTION PrError: INTEGER; INLINE $2F3C,$BA00,$0000,$A8FD; PROCEDURE PrSetError(iErr: INTEGER); INLINE $2F3C,$C000,$0200,$A8FD; PROCEDURE PrGeneral(pData: Ptr); INLINE $2F3C,$7007,$0480,$A8FD; PROCEDURE PrDrvrOpen; INLINE $2F3C,$8000,$0000,$A8FD; PROCEDURE PrDrvrClose; INLINE $2F3C,$8800,$0000,$A8FD; PROCEDURE PrCtlCall(iWhichCtl: INTEGER;lParam1: LONGINT;lParam2: LONGINT; lParam3: LONGINT); INLINE $2F3C,$A000,$0E00,$A8FD; FUNCTION PrDrvrDCE: Handle; INLINE $2F3C,$9400,$0000,$A8FD; FUNCTION PrDrvrVers: INTEGER; INLINE $2F3C,$9A00,$0000,$A8FD; {$ENDC} { UsingPrinting } {$IFC NOT UsingIncludes} END. {$ENDC}