You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
460 lines
18 KiB
460 lines
18 KiB
/* |
|
File: PMPrinterModule.h |
|
|
|
Contains: Mac OS X Printing Manager Printer Module Interfaces. |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1999-2001 by Apple Computer, Inc., all rights reserved |
|
|
|
Bugs?: For bug reports, consult the following page on |
|
the World Wide Web: |
|
|
|
http://developer.apple.com/bugreporter/ |
|
|
|
*/ |
|
#ifndef __CFSTRING__ |
|
#include <CFString.h> |
|
#endif |
|
|
|
#ifndef __PMTICKET__ |
|
#include <PMTicket.h> |
|
#endif |
|
|
|
#ifndef __PMPLUGINHEADER__ |
|
#include <PMPluginHeader.h> |
|
#endif |
|
|
|
#ifndef __PMERRORS__ |
|
#include <PMErrors.h> |
|
#endif |
|
|
|
#ifndef __PMRASTER__ |
|
#include <PMRaster.h> |
|
#endif |
|
|
|
|
|
/* context ID for PM Modules */ |
|
|
|
|
|
#if PRAGMA_ONCE |
|
#pragma once |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#if PRAGMA_IMPORT |
|
#pragma import on |
|
#endif |
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
typedef struct OpaquePMContext* PMContext; |
|
/* Opaque types for image access: */ |
|
typedef struct OpaquePMDrawingCtx* PMDrawingCtx; |
|
typedef struct OpaquePMImageRef* PMImageRef; |
|
/* Type ID, interface ID for the IOM CFPlugin */ |
|
#define kPModuleTypeIDStr "5D69ED5E-D5B5-11D3-9EFF-00050209D9C1" |
|
#define kPModuleIntfIDStr "5EDEC4FA-D5B5-11D3-AAF2-00050209D9C1" |
|
/* PM API version numbers (see PMPluginHeader.h for the meaning of these defintions) */ |
|
enum { |
|
kPMBuildVersionMajor = 1, |
|
kPMBuildVersionMinor = 0, |
|
kPMBaseVersionMajor = 1, |
|
kPMBaseVersionMinor = 0 |
|
}; |
|
|
|
/* |
|
Keys for the printer browser specification dictionary. This CFDictionary, |
|
created by the printer module, provides a printer browser module with the |
|
information it needs to browse for a given type of printer over its |
|
connection type, and to display it in PrintCenter's Browser Window. |
|
|
|
kPMPrinterBrowserKindKey corresponds to a CFStringRef to a human-readable |
|
printer type string that can be displayed in the browser view. For a printer |
|
driven by Apple's PostScript printer module over an AppleTalk connection, |
|
this would be the string "PostScript printer". |
|
|
|
kPMPrinterBrowserInfoKey corresponds to a CFTypeRef to connection-specific |
|
information used to look up a particular kind of printer over a given IO |
|
connection. A PostScript printer module supporting AppleTalk might specify |
|
the NBP lookup string "LaserWriter". |
|
|
|
kPMPrinterBrowserIconKey corresponds to a CFDataRef to the icon family data |
|
for the printer icon to be displayed in the browser view. The family data |
|
are entirely contained within the CFDataRef; i.e., it is *not* a handle. |
|
|
|
kPMPrinterBrowserDeviceIDKey corresponds to a CFStringRef to a USB/Firewire |
|
IEEE-1284 DeviceID string. e.g., "COMMAND SET: PostScript;" or |
|
"MFG: Hewlett-Packard; MDL: DeskJet 935C;" |
|
*/ |
|
#define kPMPrinterBrowserKindKey CFSTR("Printer Browser Kind") |
|
#define kPMPrinterBrowserInfoKey CFSTR("Printer Browser Info") |
|
#define kPMPrinterBrowserIconsKey CFSTR("Printer Browser Icons") |
|
#define kPMPrinterBrowserDeviceIDKey CFSTR("Printer Browser DeviceID") |
|
enum { |
|
kPMBrowserInfoNumValues = 4 |
|
}; |
|
|
|
|
|
/* Status and Error notification: */ |
|
|
|
/* |
|
* PMNotificationProcPtr |
|
* |
|
* Discussion: |
|
* A callback routine used for reporting printing status and errors |
|
* during a print job Event is constructed with known keys defined |
|
* below and passed to the printing manager in notificationDict |
|
* notificationReplyDict is used for blocking recoverable errors to |
|
* indicate user action |
|
*/ |
|
typedef CALLBACK_API_C( OSStatus , PMNotificationProcPtr )(const void *jobContext, CFDictionaryRef notificationDict, CFDictionaryRef *notificationReplyDict); |
|
|
|
/* |
|
* Discussion: |
|
* Status and error event codes and keys reported by the printer |
|
* module (used in PMNotificationProc) |
|
*/ |
|
enum { |
|
|
|
/* |
|
* non-error printer status |
|
*/ |
|
kPMEventPrinterStatus = 4000, |
|
|
|
/* |
|
* a fatal printing error has occurred. The Printer Module MUST stop |
|
* printing and return immediately after sending this event. |
|
*/ |
|
kPMEventErrorOccurred = 4001, |
|
|
|
/* |
|
* an auto-recoverable error occurred. The PM SHOULD keep trying to |
|
* print the job without waiting for any user action. If the PM |
|
* detects that the condition is cleared, it MUST send a |
|
* kPMEventRecoverableErrorCleared event, otherwise the condition |
|
* alert will not get cleared |
|
*/ |
|
kPMEventRecoverableErrorOccurred = 4002, |
|
|
|
/* |
|
* auto-recoverable error has been cleared, the job is continued |
|
* automatically and without user intervention. This event causes |
|
* the condition alert to close and the job state to change to |
|
* "printing". |
|
*/ |
|
kPMEventRecoverableErrorCleared = 4003 |
|
}; |
|
|
|
|
|
/* Event keys used in notification dictionaries */ |
|
#define kPMEventCodeKey CFSTR("com.apple.printing.EventCode") |
|
/* CFNumber (SInt32) containing the event code (above) */ |
|
#define kPMErrorCodeKey CFSTR("com.apple.printing.ErrorCode") |
|
/* CFNumber (SInt32) containing the error code (i.e., OSStatus) */ |
|
#define kPMErrorExplanationKey CFSTR("com.apple.printing.ErrorExplanation") |
|
/* CFString containing the text that shows up as bold text in the error/status alert */ |
|
#define kPMErrorTextKey CFSTR("com.apple.printing.ErrorText") |
|
/* CFString containing the text that shows up as regular text in the error/status alert */ |
|
#define kPMEventContextKey CFSTR("com.apple.printing.EventContext") |
|
/* CFNumber (SInt32) containing a context value. Used primarily to match a "cleared error" event with a prior "recoverable error" event */ |
|
/* prototypes for callback routines used for accessing print data */ |
|
typedef CALLBACK_API_C( OSStatus , PMJobStreamOpenProcPtr )(const void * jobContext); |
|
typedef CALLBACK_API_C( OSStatus , PMJobStreamReadWriteProcPtr )(const void *jobContext, void *buffPtr, UInt32 *size); |
|
typedef CALLBACK_API_C( OSStatus , PMJobStreamGetPosProcPtr )(const void *jobContext, UInt32 *markerPos); |
|
typedef CALLBACK_API_C( OSStatus , PMJobStreamSetPosProcPtr )(const void *jobContext, SInt16 posMode, UInt32 markerPos); |
|
typedef CALLBACK_API_C( OSStatus , PMJobStreamGetNextBandProcPtr )(const void *jobContext, PMRasterBand *pmRasterBand); |
|
/* the printing manager maintains this struct of callback procs for printer module data access */ |
|
struct PMJobStreamProcs { |
|
CFIndex version; |
|
|
|
PMJobStreamOpenProcPtr PMJobStreamOpenProc; |
|
PMJobStreamReadWriteProcPtr PMJobStreamReadProc; |
|
PMJobStreamReadWriteProcPtr PMJobStreamWriteProc; |
|
PMJobStreamGetPosProcPtr PMJobStreamGetPosProc; |
|
PMJobStreamSetPosProcPtr PMJobStreamSetPosProc; |
|
PMJobStreamGetPosProcPtr PMJobStreamGetEOFProc; |
|
}; |
|
typedef struct PMJobStreamProcs PMJobStreamProcs; |
|
/* prototypes for callback routines used for communication with the device/connection */ |
|
typedef CALLBACK_API_C( OSStatus , GetConnInfoProcPtr )(const void *jobContext, CFStringRef *connectionType, CFStringRef *pbmPath); |
|
typedef CALLBACK_API_C( OSStatus , PMIOOpenProcPtr )(const void * jobContext); |
|
typedef CALLBACK_API_C( OSStatus , PMIOReadProcPtr )(const void *jobContext, Ptr buffer, UInt32 *size, Boolean *eoj); |
|
typedef CALLBACK_API_C( OSStatus , PMIOWriteProcPtr )(const void *jobContext, Ptr buffer, UInt32 *size, Boolean eoj); |
|
typedef CALLBACK_API_C( OSStatus , PMIOStatusProcPtr )(const void *jobContext, CFStringRef *status); |
|
typedef CALLBACK_API_C( OSStatus , PMIOGetAttributeProcPtr )(const void *jobContext, CFStringRef attribute, CFTypeRef *result); |
|
typedef CALLBACK_API_C( OSStatus , PMIOSetAttributeProcPtr )(const void *jobContext, CFStringRef attribute, CFTypeRef data); |
|
typedef CALLBACK_API_C( OSStatus , PMIOCloseProcPtr )(const void * jobContext); |
|
|
|
/* |
|
* PMIOProcs |
|
* |
|
* Discussion: |
|
* The printing manager maintains this struct of callback procs for |
|
* printer module communication with the device |
|
*/ |
|
struct PMIOProcs { |
|
CFIndex version; |
|
|
|
/* |
|
* Get connection type string and Printer Browser Module path |
|
*/ |
|
GetConnInfoProcPtr GetConnInfoProc; |
|
|
|
/* |
|
* Open connection with target printer |
|
*/ |
|
PMIOOpenProcPtr PMIOOpenProc; |
|
|
|
/* |
|
* Read data from printer |
|
*/ |
|
PMIOReadProcPtr PMIOReadProc; |
|
|
|
/* |
|
* Write data to printer. Data is not buffered no matter how small |
|
* the buffer is. Therefore, it is recommended that the PM do its own |
|
* buffering before this call is made. |
|
*/ |
|
PMIOWriteProcPtr PMIOWriteProc; |
|
|
|
/* |
|
* Get status from the printer if any |
|
*/ |
|
PMIOStatusProcPtr PMIOStatusProc; |
|
|
|
/* |
|
* Get the value for a particular IOM attribute (see PMIOModule.h for |
|
* a list of attributes) |
|
*/ |
|
PMIOGetAttributeProcPtr PMIOGetAttributeProc; |
|
|
|
/* |
|
* Set a value for a particular IOM attribute (see PMIOModule.h for a |
|
* list of attributes) |
|
*/ |
|
PMIOSetAttributeProcPtr PMIOSetAttributeProc; |
|
|
|
/* |
|
* Close connection with printer. |
|
*/ |
|
PMIOCloseProcPtr PMIOCloseProc; |
|
}; |
|
typedef struct PMIOProcs PMIOProcs; |
|
typedef CALLBACK_API_C( OSStatus , PMCreatePrinterBrowserModuleInfoProcPtr )(CFStringRef connectionType, CFArrayRef *printerBrowserInfo); |
|
typedef CALLBACK_API_C( OSStatus , PMInitializeProcPtr )(CFDataRef printerAddress, const void *jobContext, const PMIOProcs *pmIOProcs, PMNotificationProcPtr pmNotificationProc, PMContext *printerModuleContext); |
|
typedef CALLBACK_API_C( OSStatus , PMCreatePrintingDialogExtensionsPathsProcPtr )(PMContext printerModuleContext, CFArrayRef *pdePaths); |
|
typedef CALLBACK_API_C( OSStatus , PMCreatePrinterTicketsProcPtr )(PMContext printerModuleContext, PMTicketRef *printerInfo, PMTemplateRef *jobTemplate); |
|
typedef CALLBACK_API_C( OSStatus , PMBeginJobProcPtr )(PMContext printerModuleContext, const void *jobContext, PMTicketRef jobTicket, PMTicketRef *converterSetup); |
|
typedef CALLBACK_API_C( OSStatus , PMPrintJobProcPtr )(PMContext printerModuleContext, const void *jobContext, PMTicketRef jobTicket, const PMJobStreamProcs *inDataProcs); |
|
typedef CALLBACK_API_C( OSStatus , PMPrintPageProcPtr )(PMContext printerModuleContext, const void *jobContext, PMTicketRef jobTicket, PMJobStreamGetNextBandProcPtr pmJobStreamGetNextBandProc); |
|
typedef CALLBACK_API_C( OSStatus , PMImageAccessProcPtr )(PMContext printerModuleContext, const void *jobContext, CFStringRef grafBase, PMDrawingCtx drawingCtx, PMImageRef imageRef, PMImageRef *outImageRefPtr); |
|
typedef CALLBACK_API_C( OSStatus , PMCancelJobProcPtr )(PMContext printerModuleContext, const void *jobContext); |
|
typedef CALLBACK_API_C( OSStatus , PMEndJobProcPtr )(PMContext printerModuleContext, const void *jobContext); |
|
typedef CALLBACK_API_C( OSStatus , PMTerminateProcPtr )(PMContext *printerModuleContext, const void *jobContext); |
|
|
|
/* |
|
* PMProcs |
|
* |
|
* Discussion: |
|
* Contains the function pointers required to be exported by a |
|
* Printer Module. |
|
*/ |
|
struct PMProcs { |
|
|
|
/* |
|
* The plugin header is required with all plugins and must proceed |
|
* object's layout. |
|
*/ |
|
PMPlugInHeader pluginHeader; |
|
|
|
/* |
|
* For a given connection type in 'connectionType', returns a ticket |
|
* containing printer browser information about the supported |
|
* printers that can be browsed for on that connection. If the |
|
* connection is not supported by the Printer Module, |
|
* kPMUnsupportedConnection error is returned. |
|
*/ |
|
PMCreatePrinterBrowserModuleInfoProcPtr CreatePrinterBrowserModuleInfo; |
|
|
|
/* |
|
* Create a new instance of the Printer Module and place it's |
|
* reference in 'printerModuleContext'. Few input parameters are |
|
* passed via this API that the PM should store in its local context |
|
* block for use during the session; such as: printerAddress, |
|
* jobContext (used in callbacks), pmIOProcs (used for communicating |
|
* with the device, and pmNotificationProc (used for reporting status |
|
* and errors). |
|
*/ |
|
PMInitializeProcPtr Initialize; |
|
|
|
/* |
|
* Return one or more paths of this Printer Module's Print Dialog |
|
* Extension(s) relative to base path /Library/Printers/ |
|
*/ |
|
PMCreatePrintingDialogExtensionsPathsProcPtr CreatePrintingDialogExtensionsPaths; |
|
|
|
/* |
|
* Returns printer module's template and printerinfo tickets to the |
|
* caller. A PrinterInfo ticket holds capability and product ID |
|
* information whereas a Template holds range and default information |
|
* about various print settings |
|
*/ |
|
PMCreatePrinterTicketsProcPtr CreatePrinterTickets; |
|
|
|
/* |
|
* Called by the Printing Manager to initiate a job. This function is |
|
* intended as a "setup" function, so all the information needed to |
|
* set up for printing is supplied: jobTicket has the control |
|
* parameters for this job, as defined by the application and user; |
|
* converterSetp allows the PM to setup a converter via standard |
|
* ticket tags. |
|
*/ |
|
PMBeginJobProcPtr BeginJob; |
|
|
|
/* |
|
* Begin sending print data to the printer. The Printing Manager |
|
* calls this API when page boundaries in the job can not be |
|
* determined (i.e PM specific format). inDataProcs contains |
|
* callbacks to access the print data; see PMJobStreamProcs |
|
* definitions above for more info on the callback routines. |
|
*/ |
|
PMPrintJobProcPtr PrintJob; |
|
|
|
/* |
|
* Send only a specific page to the printer. The PM needs to process |
|
* the data and make it ready for the printer hardware. |
|
* PMJobStreamGetNextBandProc is a callback to get the next available |
|
* band data. |
|
*/ |
|
PMPrintPageProcPtr PrintPage; |
|
|
|
/* |
|
* This API is called when an image is encountered during conversion. |
|
* This allows the Printer Module to access and modify the image |
|
* data (imageRef) and drawing context before the image is rasterized |
|
* into the page bands. Modified image should be returned in |
|
* outImageRefPtr. |
|
*/ |
|
PMImageAccessProcPtr ImageAccess; |
|
|
|
/* |
|
* Cancel the currently printing job. This function may be called |
|
* while the PM is executing code in PrintJob or PrintPage. |
|
*/ |
|
PMCancelJobProcPtr CancelJob; |
|
|
|
/* |
|
* Finish up the previously printed job. |
|
*/ |
|
PMEndJobProcPtr EndJob; |
|
|
|
/* |
|
* Dispose of the current PM session data allocated in Initialize. |
|
*/ |
|
PMTerminateProcPtr Terminate; |
|
}; |
|
typedef struct PMProcs PMProcs; |
|
/* PM interface is an object containing addresses to the module's entry points: */ |
|
struct PMInterface { |
|
const PMProcs * vtable; |
|
}; |
|
typedef struct PMInterface PMInterface; |
|
typedef const PMInterface * PMInterfaceRef; |
|
/* |
|
Paper names must all be ISO or PPD standard names, so we've defined constants here for |
|
developers to use in their code, mostly to make things more readable. |
|
*/ |
|
|
|
#define USExecutiveEnvelope CFSTR("Executive") |
|
#define Envelope9 CFSTR("na-number-9-envelope") |
|
#define Envelope10 CFSTR("na-number-10-envelope") |
|
#define Envelope10x15 CFSTR("na-10x15-envelope") |
|
#define EnvelopeB4 CFSTR("iso-b4-envelope") |
|
#define EnvelopeB5 CFSTR("iso-b5-envelope") |
|
#define EnvelopeC3 CFSTR("iso-c3-envelope") |
|
#define EnvelopeC4 CFSTR("iso-c4-envelope") |
|
#define EnvelopeC5 CFSTR("iso-c5-envelope") |
|
#define EnvelopeC6 CFSTR("iso-c6-envelope") |
|
#define Envelope6x9 CFSTR("na-6x9-envelope") |
|
#define Envelope7x9 CFSTR("na-7x9-envelope") |
|
#define Envelope9x11 CFSTR("na-9x11-envelope") |
|
#define Envelope9x12 CFSTR("na-9x12-envelope") |
|
#define Envelope10x13 CFSTR("na-10x13-envelope") |
|
#define Envelope10x14 CFSTR("na-10x14-envelope") |
|
#define EnvelopeMonarch CFSTR("monarch-envelope") |
|
#define EnvelopeLong CFSTR("iso-designated-long-envelope") |
|
#define Invoice CFSTR("invoice") |
|
#define USLetter CFSTR("na-letter") |
|
#define USLegal CFSTR("na-legal") |
|
#define Ledger CFSTR("ledger") |
|
#define Folio CFSTR("folio") |
|
#define Quarto CFSTR("quarto") |
|
#define A0 CFSTR("iso-a0") |
|
#define A1 CFSTR("iso-a1") |
|
#define A2 CFSTR("iso-a2") |
|
#define A3 CFSTR("iso-a3") |
|
#define A4 CFSTR("iso-a4") |
|
#define A5 CFSTR("iso-a5") |
|
#define A6 CFSTR("iso-a6") |
|
#define A7 CFSTR("iso-a7") |
|
#define A8 CFSTR("iso-a8") |
|
#define A9 CFSTR("iso-a9") |
|
#define B0 CFSTR("iso-b0") |
|
#define B1 CFSTR("iso-b1") |
|
#define B2 CFSTR("iso-b2") |
|
#define B3 CFSTR("iso-b3") |
|
#define B4 CFSTR("iso-b4") |
|
#define B5 CFSTR("iso-b5") |
|
#define B6 CFSTR("iso-b6") |
|
#define B7 CFSTR("iso-b7") |
|
#define B8 CFSTR("iso-b8") |
|
#define B9 CFSTR("iso-b9") |
|
#define B10 CFSTR("iso-b10") |
|
#define JISB0 CFSTR("jis-b0") |
|
#define JISB1 CFSTR("jis-b1") |
|
#define JISB2 CFSTR("jis-b2") |
|
#define JISB3 CFSTR("jis-b3") |
|
#define JISB4 CFSTR("jis-b4") |
|
#define JISB5 CFSTR("jis-b5") |
|
#define JISB7 CFSTR("jis-b7") |
|
#define JISB8 CFSTR("jis-b8") |
|
#define JISB9 CFSTR("jis-b9") |
|
#define JISB10 CFSTR("jis-b10") |
|
#define ASize CFSTR("a") |
|
#define BSize CFSTR("b") |
|
#define CSize CFSTR("c") |
|
#define DSize CFSTR("d") |
|
#define ESize CFSTR("e") |
|
#define iso10 CFSTR("iso-10") |
|
/* A string to define the default paper name. See sample code for usage.*/ |
|
|
|
#define DefaultPaper CFSTR("DefaultPaperSize") |
|
|
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=reset |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(pop) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack() |
|
#endif |
|
|
|
#ifdef PRAGMA_IMPORT_OFF |
|
#pragma import off |
|
#elif PRAGMA_IMPORT |
|
#pragma import reset |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif
|
|
|