{ Created: Sunday, January 6, 1991 at 10:57 PM Printing.p Pascal Interface to the Macintosh Libraries Copyright Apple Computer, Inc. 1985-1989 All rights reserved } {$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} iMemFullErr = -108; iIOAbort = -27; pPrGlobals = $00000944; {The PrVars lo mem area:} bDraftLoop = 0; bSpoolLoop = 1; bUser1Loop = 2; bUser2Loop = 3; 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; 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; { 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} printX: ARRAY [1..19] OF INTEGER; {Spare to fill to 120 bytes!} 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; PROCEDURE PrNoPurge; PROCEDURE PrOpen; PROCEDURE PrClose; PROCEDURE PrintDefault(hPrint: THPrint); FUNCTION PrValidate(hPrint: THPrint): BOOLEAN; FUNCTION PrStlDialog(hPrint: THPrint): BOOLEAN; FUNCTION PrJobDialog(hPrint: THPrint): BOOLEAN; FUNCTION PrStlInit(hPrint: THPrint): TPPrDlg; FUNCTION PrJobInit(hPrint: THPrint): TPPrDlg; PROCEDURE PrJobMerge(hPrintSrc: THPrint;hPrintDst: THPrint); FUNCTION PrDlgMain(hPrint: THPrint;pDlgInit: PDlgInitProcPtr): BOOLEAN; FUNCTION PrOpenDoc(hPrint: THPrint;pPrPort: TPPrPort;pIOBuf: Ptr): TPPrPort; PROCEDURE PrCloseDoc(pPrPort: TPPrPort); PROCEDURE PrOpenPage(pPrPort: TPPrPort;pPageFrame: TPRect); PROCEDURE PrClosePage(pPrPort: TPPrPort); PROCEDURE PrPicFile(hPrint: THPrint;pPrPort: TPPrPort;pIOBuf: Ptr;pDevBuf: Ptr; VAR prStatus: TPrStatus); FUNCTION PrError: INTEGER; PROCEDURE PrSetError(iErr: INTEGER); PROCEDURE PrGeneral(pData: Ptr); PROCEDURE PrDrvrOpen; PROCEDURE PrDrvrClose; PROCEDURE PrCtlCall(iWhichCtl: INTEGER;lParam1: LONGINT;lParam2: LONGINT; lParam3: LONGINT); FUNCTION PrDrvrDCE: Handle; FUNCTION PrDrvrVers: INTEGER; {$ENDC} { UsingPrinting } {$IFC NOT UsingIncludes} END. {$ENDC}