Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

461 lines
18 KiB

5 years ago
/*
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