490 lines
16 KiB
C
490 lines
16 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996 - 1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
devmode.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
DEVMODE related declarations and definitions
|
||
|
|
||
|
[Environment:]
|
||
|
|
||
|
Win32 subsystem, printer drivers
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
02/04/07 -davidx-
|
||
|
Devmode changes to support OEM plugins.
|
||
|
|
||
|
07/31/96 -davidx-
|
||
|
Add BValidateDevmodeFormFields.
|
||
|
|
||
|
07/31/96 -amandan-
|
||
|
Updated for UI Module
|
||
|
|
||
|
07/22/96 -srinivac-
|
||
|
Updated for PSCRIPT5
|
||
|
|
||
|
07/25/95 -davidx-
|
||
|
Created it.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _DEVMODE_H_
|
||
|
#define _DEVMODE_H_
|
||
|
|
||
|
//
|
||
|
// Maximum scale factor and maximum copy count
|
||
|
//
|
||
|
|
||
|
#define MIN_SCALE 1
|
||
|
#define MAX_SCALE 1000
|
||
|
#define MIN_COPIES 1
|
||
|
#define MAX_COPIES 9999
|
||
|
|
||
|
//
|
||
|
// PostScript driver private devmode flags
|
||
|
//
|
||
|
|
||
|
#define PSDEVMODE_EPS 0x00000001 // outputting EPS file
|
||
|
#define PSDEVMODE_EHANDLER 0x00000002 // download error handler
|
||
|
#define PSDEVMODE_MIRROR 0x00000004 // mirror image
|
||
|
#define PSDEVMODE_BLACK 0x00000008 // all colors set to black
|
||
|
#define PSDEVMODE_NEG 0x00000010 // negative image
|
||
|
#define PSDEVMODE_FONTSUBST 0x00000020 // font substitution enabled
|
||
|
#define PSDEVMODE_COMPRESSBMP 0x00000040 // bitmap compr. is enabled
|
||
|
#define PSDEVMODE_ENUMPRINTERFONTS 0x00000080 // use printer fonts
|
||
|
#define PSDEVMODE_INDEPENDENT 0x00000100 // do page independence
|
||
|
#define PSDEVMODE_LSROTATE 0x00000200 // rotated landscape
|
||
|
#define PSDEVMODE_NO_LEVEL2 0x00000400 // don't use level 2 features
|
||
|
#define PSDEVMODE_CTRLD_BEFORE 0x00000800 // send ^D before job - obsolete
|
||
|
#define PSDEVMODE_CTRLD_AFTER 0x00001000 // send ^D after job - obsolete
|
||
|
#define PSDEVMODE_METAFILE_SPOOL 0x00002000 // enable metafile spooling
|
||
|
#define PSDEVMODE_NO_JOB_CONTROL 0x00004000 // don't send job control code
|
||
|
|
||
|
|
||
|
//
|
||
|
// The following flags are obsolete and are used for compatibility. When
|
||
|
// a devmode comes into the driver or a devmode leaves the driver, these
|
||
|
// fields are checked or updated respectively. Internally the driver
|
||
|
// uses new fields to mainatain these values. The obsolete flags are:
|
||
|
//
|
||
|
// PSDEVMODE_EPS
|
||
|
// PSDEVMODE_INDEPENDENT
|
||
|
// PSDEVMODE_NO_LEVEL2
|
||
|
// PSDEVMODE_FONTSUBST
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Nup values
|
||
|
//
|
||
|
|
||
|
typedef enum {
|
||
|
ONE_UP,
|
||
|
TWO_UP,
|
||
|
FOUR_UP,
|
||
|
SIX_UP,
|
||
|
NINE_UP,
|
||
|
SIXTEEN_UP,
|
||
|
BOOKLET_UP,
|
||
|
} LAYOUT;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Output dialect values
|
||
|
//
|
||
|
|
||
|
typedef enum {
|
||
|
SPEED, // optimize for speed
|
||
|
PORTABILITY, // optimize for portability
|
||
|
EPS, // generate eps output
|
||
|
ARCHIVE, // output for archival
|
||
|
} DIALECT;
|
||
|
|
||
|
//
|
||
|
// TT font downloading formats
|
||
|
//
|
||
|
|
||
|
typedef enum {
|
||
|
TT_DEFAULT, // download in default format
|
||
|
TYPE_1, // download as Type 1 outlines
|
||
|
TYPE_3, // download as Type 3 bitmaps
|
||
|
TYPE_42, // download as Type 42 fonts
|
||
|
TRUEIMAGE, // download as TrueType
|
||
|
TT_NODOWNLOAD, // do not download TT fonts
|
||
|
} TTDLFMT;
|
||
|
|
||
|
//
|
||
|
// Custom page size feed directions
|
||
|
// Use #define instead of enums because they're used in resource file.
|
||
|
//
|
||
|
|
||
|
#define LONGEDGEFIRST 0 // long edge first
|
||
|
#define SHORTEDGEFIRST 1 // short edge first
|
||
|
#define LONGEDGEFIRST_FLIPPED 2 // long edge first, upside down
|
||
|
#define SHORTEDGEFIRST_FLIPPED 3 // short edge first, upside down
|
||
|
#define MAX_FEEDDIRECTION 4
|
||
|
|
||
|
//
|
||
|
// PostScript driver devmode
|
||
|
//
|
||
|
|
||
|
typedef struct _CUSTOMSIZEDATA { // custom page size parameters
|
||
|
|
||
|
DWORD dwX; // logical paper width (in microns)
|
||
|
DWORD dwY; // logical paper height
|
||
|
DWORD dwWidthOffset; // offset perpendicular to feed direction
|
||
|
DWORD dwHeightOffset; // offset parallel to feed direction
|
||
|
WORD wFeedDirection; // paper feed direction
|
||
|
WORD wCutSheet; // use cut-sheet behavior or not
|
||
|
|
||
|
} CUSTOMSIZEDATA, *PCUSTOMSIZEDATA;
|
||
|
|
||
|
typedef struct _PSDRVEXTRA {
|
||
|
|
||
|
DWORD dwSignature; // private devmode signature
|
||
|
DWORD dwFlags; // flag bits
|
||
|
WCHAR wchEPSFile[40]; // EPS file name
|
||
|
COLORADJUSTMENT coloradj; // structure for halftoning
|
||
|
|
||
|
WORD wReserved1; // old PPD checksum set to 0
|
||
|
WORD wSize; // size of PRIVATEDEVMODE
|
||
|
|
||
|
FIX_24_8 fxScrFreq; // halftone screen frequency
|
||
|
FIX_24_8 fxScrAngle; // halftone screen angle
|
||
|
DIALECT iDialect; // output dialect
|
||
|
TTDLFMT iTTDLFmt; // download TT fonts as
|
||
|
BOOL bReversePrint; // print in reverse order?
|
||
|
LAYOUT iLayout; // nup value
|
||
|
INT iPSLevel; // Language level (1, 2 or 3)
|
||
|
|
||
|
DWORD dwReserved2; // reserved
|
||
|
WORD wOEMExtra; // size of OEM private data
|
||
|
WORD wVer; // DRIVEREXTRA version
|
||
|
CUSTOMSIZEDATA csdata; // custom page size parameters
|
||
|
|
||
|
DWORD dwReserved3[4]; // reserved for future use
|
||
|
|
||
|
DWORD dwChecksum32; // checksum for option array
|
||
|
DWORD dwOptions; // number of doc-sticky features
|
||
|
OPTSELECT aOptions[MAX_PRINTER_OPTIONS]; // printer options
|
||
|
|
||
|
} PSDRVEXTRA, *PPSDRVEXTRA;
|
||
|
|
||
|
//
|
||
|
// Constants for PSDRVEXTRA.dwSignature and PSDRVEXTRA.wVer
|
||
|
//
|
||
|
|
||
|
#define PSDEVMODE_SIGNATURE 0x56495250
|
||
|
#define PSDRVEXTRA_VERSION 0x0010
|
||
|
|
||
|
//
|
||
|
// Declarations of earlier version DEVMODEs
|
||
|
//
|
||
|
|
||
|
#define PSDRIVER_VERSION_351 0x350 // 3.51 driver version number
|
||
|
|
||
|
typedef struct _PSDRVEXTRA351 {
|
||
|
|
||
|
DWORD dwSignature;
|
||
|
DWORD dwFlags;
|
||
|
WCHAR wchEPSFile[40];
|
||
|
COLORADJUSTMENT coloradj;
|
||
|
|
||
|
} PSDRVEXTRA351;
|
||
|
|
||
|
#define PSDRIVER_VERSION_400 0x400 // 4.00 driver version number
|
||
|
|
||
|
typedef struct _PSDRVEXTRA400 {
|
||
|
|
||
|
DWORD dwSignature;
|
||
|
DWORD dwFlags;
|
||
|
WCHAR wchEPSFile[40];
|
||
|
COLORADJUSTMENT coloradj;
|
||
|
WORD wChecksum;
|
||
|
WORD wOptions;
|
||
|
BYTE aubOptions[64];
|
||
|
|
||
|
} PSDRVEXTRA400;
|
||
|
|
||
|
//
|
||
|
// We have changed PSDRIVER_VERSION number from Win2K's 0x501 to XP's 0x502.
|
||
|
// We must use Win2K's 0x501 here. (see PConvertToCurrentVersionDevmodeWithOemPlugins)
|
||
|
//
|
||
|
#define PSDRIVER_VERSION_500 0x501 // 5.00 driver version number
|
||
|
|
||
|
typedef struct _PSDRVEXTRA500 {
|
||
|
|
||
|
DWORD dwSignature; // private devmode signature
|
||
|
DWORD dwFlags; // flag bits
|
||
|
WCHAR wchEPSFile[40]; // EPS file name
|
||
|
COLORADJUSTMENT coloradj; // structure for halftoning
|
||
|
|
||
|
WORD wReserved1; // old PPD checksum set to 0
|
||
|
WORD wSize; // size of PRIVATEDEVMODE
|
||
|
|
||
|
FIX_24_8 fxScrFreq; // halftone screen frequency
|
||
|
FIX_24_8 fxScrAngle; // halftone screen angle
|
||
|
DIALECT iDialect; // output dialect
|
||
|
TTDLFMT iTTDLFmt; // download TT fonts as
|
||
|
BOOL bReversePrint; // print in reverse order?
|
||
|
LAYOUT iLayout; // nup value
|
||
|
INT iPSLevel; // Language level (1, 2 or 3)
|
||
|
|
||
|
DWORD dwReserved2; // reserved
|
||
|
WORD wOEMExtra; // size of OEM private data
|
||
|
WORD wVer; // DRIVEREXTRA version
|
||
|
CUSTOMSIZEDATA csdata; // custom page size parameters
|
||
|
|
||
|
DWORD dwReserved3[4]; // reserved for future use
|
||
|
|
||
|
DWORD dwChecksum32; // checksum for option array
|
||
|
DWORD dwOptions; // number of doc-sticky features
|
||
|
OPTSELECT aOptions[MAX_PRINTER_OPTIONS]; // printer options
|
||
|
|
||
|
} PSDRVEXTRA500;
|
||
|
|
||
|
//
|
||
|
// Unidrv driver devmode
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Quality macro definitions to be saved in DEVMODE.dmDitherType
|
||
|
//
|
||
|
|
||
|
#define MAX_QUALITY_SETTINGS 3
|
||
|
#define MIN_QUALITY_SETTINGS 1
|
||
|
|
||
|
#define QUALITY_MACRO_START DMDITHER_USER // 256
|
||
|
#define QUALITY_MACRO_BEST QUALITY_MACRO_START + QS_BEST
|
||
|
#define QUALITY_MACRO_BETTER QUALITY_MACRO_START + QS_BETTER
|
||
|
#define QUALITY_MACRO_DRAFT QUALITY_MACRO_START + QS_DRAFT
|
||
|
#define QUALITY_MACRO_END QUALITY_MACRO_START + MAX_QUALITY_SETTINGS
|
||
|
|
||
|
#define QUALITY_MACRO_CUSTOM 0xFFFFFFFF
|
||
|
|
||
|
//
|
||
|
// Used for bits in the dwFlags field below.
|
||
|
//
|
||
|
|
||
|
#define DXF_TEXTASGRAPHICS 0x0002 // Set to disable font cacheing in printer
|
||
|
#define DXF_JOBSEP 0x0004 // Enable Job Separator operation on printer
|
||
|
#define DXF_PAGEPROT 0x0008 // Page memory protected: PCL 5
|
||
|
#define DXF_NOEMFSPOOL 0x0010 // Set to disable EMF spooling; default off
|
||
|
#define DXF_VECTOR 0x0020 // Set to indicate user selected vector mode
|
||
|
#define DXF_DOWNLOADTT 0x0040 // Set to indicate printer supports tt downloading
|
||
|
#define DXF_CUSTOM_QUALITY 0x0080 // Set to indicate Custom quality is selected
|
||
|
|
||
|
typedef struct _UNIDRVEXTRA {
|
||
|
|
||
|
DWORD dwSignature;
|
||
|
WORD wVer;
|
||
|
WORD sPadding;
|
||
|
WORD wSize; // was dmDefaultDest
|
||
|
WORD wOEMExtra; // was dmTextQuality
|
||
|
DWORD dwChecksum32;
|
||
|
DWORD dwFlags;
|
||
|
BOOL bReversePrint; // print in reverse order?
|
||
|
LAYOUT iLayout; // nup value
|
||
|
QUALITYSETTING iQuality; // quality settings
|
||
|
WORD wReserved[6];
|
||
|
DWORD dwOptions; // number of doc-sticky features
|
||
|
OPTSELECT aOptions[MAX_PRINTER_OPTIONS];
|
||
|
DWORD dwEndingPad; // padding DWORD to make size of public devmode
|
||
|
// plus Unidrv private devmode multiple of 8-bytes.
|
||
|
|
||
|
} UNIDRVEXTRA, *PUNIDRVEXTRA;
|
||
|
|
||
|
//
|
||
|
// Constants for UNIDRVEXTRA.dwSignature and UNIDRVEXTRA.wVersion
|
||
|
//
|
||
|
|
||
|
#define UNIDEVMODE_SIGNATURE 'UNID'
|
||
|
#define UNIDRVEXTRA_VERSION 0x0022
|
||
|
|
||
|
#define MAXHE 30
|
||
|
#define MAXCART 4
|
||
|
#define UNIDRIVER_VERSION_351 0x301
|
||
|
#define UNIDRIVER_VERSION_400 0x301
|
||
|
#define UNIDRIVER_VERSION_500 0x500
|
||
|
|
||
|
typedef struct _UNIDRVEXTRA351 {
|
||
|
|
||
|
SHORT sVer; // Version for validity testing
|
||
|
SHORT sDefaultDest;
|
||
|
SHORT sTextQuality;
|
||
|
WORD wMiniVer; // Minidriver Version
|
||
|
SHORT sBrush; // type of dithering brush
|
||
|
SHORT sCTT; // CTT value for txtonly
|
||
|
SHORT sNumCarts; // # of cartridges selected.
|
||
|
SHORT aFontCarts[MAXCART];
|
||
|
SHORT sMemory; // current printer memory configuration.
|
||
|
SHORT aIndex[MAXHE];
|
||
|
|
||
|
// Following are NT additions
|
||
|
SHORT sFlags; // Miscellaneous flags; defined below
|
||
|
SHORT sPadding;
|
||
|
COLORADJUSTMENT ca; // Halftoning information. (see wingdi.h)
|
||
|
|
||
|
} UNIDRVEXTRA351, UNIDRVEXTRA400;
|
||
|
|
||
|
typedef struct _UNIDRVEXTRA500 {
|
||
|
|
||
|
DWORD dwSignature;
|
||
|
WORD wVer;
|
||
|
WORD sPadding;
|
||
|
WORD wSize; // was dmDefaultDest
|
||
|
WORD wOEMExtra; // was dmTextQuality
|
||
|
DWORD dwChecksum32;
|
||
|
DWORD dwFlags;
|
||
|
BOOL bReversePrint; // print in reverse order?
|
||
|
LAYOUT iLayout; // nup value
|
||
|
QUALITYSETTING iQuality; // quality settings
|
||
|
WORD wReserved[6];
|
||
|
DWORD dwOptions; // number of doc-sticky features
|
||
|
OPTSELECT aOptions[MAX_PRINTER_OPTIONS];
|
||
|
|
||
|
//
|
||
|
// See PConvertToCurrentVersionDevmodeWithOemPlugins() for the reason
|
||
|
// why dwEndingPad field is not here.
|
||
|
//
|
||
|
} UNIDRVEXTRA500;
|
||
|
|
||
|
//
|
||
|
// Default halftone parameters
|
||
|
//
|
||
|
|
||
|
extern DEVHTINFO gDefaultDevHTInfo;
|
||
|
extern COLORADJUSTMENT gDefaultHTColorAdjustment;
|
||
|
|
||
|
//
|
||
|
// Validate the form-related fields in the input devmode and
|
||
|
// make sure they're consistent with each other.
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
BValidateDevmodeFormFields(
|
||
|
HANDLE hPrinter,
|
||
|
PDEVMODE pDevmode,
|
||
|
PRECTL prcImageArea,
|
||
|
FORM_INFO_1 *pForms,
|
||
|
DWORD dwForms
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Initialized the form-related devmode fields with their default values
|
||
|
//
|
||
|
|
||
|
#define LETTER_FORMNAME TEXT("Letter")
|
||
|
#define A4_FORMNAME TEXT("A4")
|
||
|
|
||
|
VOID
|
||
|
VDefaultDevmodeFormFields(
|
||
|
PUIINFO pUIInfo,
|
||
|
PDEVMODE pDevmode,
|
||
|
BOOL bMetric
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Unit for DEVMODE.dmPaperWidth and DEVMODE.dmPaperLength fields
|
||
|
// 0.1mm = 100 microns
|
||
|
//
|
||
|
|
||
|
#define DEVMODE_PAPER_UNIT 100
|
||
|
|
||
|
//
|
||
|
// Allocate memory and initialize it with default devmode information
|
||
|
// This include public devmode, driver private devmode, as well as
|
||
|
// private devmode for any OEM plugins.
|
||
|
//
|
||
|
|
||
|
// NOTE: type POEM_PLUGINS is defined in oemutil.h. To avoid unnecessarily
|
||
|
// include that header file everywhere (which includes winddiui.h, compstui.h, ...)
|
||
|
// we declare the type here as well.
|
||
|
|
||
|
typedef struct _OEM_PLUGINS *POEM_PLUGINS;
|
||
|
|
||
|
PDEVMODE
|
||
|
PGetDefaultDevmodeWithOemPlugins(
|
||
|
IN LPCTSTR ptstrPrinterName,
|
||
|
IN PUIINFO pUIInfo,
|
||
|
IN PRAWBINARYDATA pRawData,
|
||
|
IN BOOL bMetric,
|
||
|
IN OUT POEM_PLUGINS pOemPlugins,
|
||
|
IN HANDLE hPrinter
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Valicate input devmode and merge it into the output devmode.
|
||
|
// This include public devmode, driver private devmode, as well as
|
||
|
// private devmode for any OEM plugins.
|
||
|
//
|
||
|
// The output devmode must be valid when this function is called.
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
BValidateAndMergeDevmodeWithOemPlugins(
|
||
|
IN OUT PDEVMODE pdmOutput,
|
||
|
IN PUIINFO pUIInfo,
|
||
|
IN PRAWBINARYDATA pRawData,
|
||
|
IN PDEVMODE pdmInput,
|
||
|
IN OUT POEM_PLUGINS pOemPlugins,
|
||
|
IN HANDLE hPrinter
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// These functions are implemented in driver-specific libraries
|
||
|
// lib\ps and lib\uni.
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
BInitDriverDefaultDevmode(
|
||
|
OUT PDEVMODE pdmOut,
|
||
|
IN LPCTSTR ptstrPrinterName,
|
||
|
IN PUIINFO pUIInfo,
|
||
|
IN PRAWBINARYDATA pRawData,
|
||
|
IN BOOL bMetric
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
BMergeDriverDevmode(
|
||
|
IN OUT PDEVMODE pdmOut,
|
||
|
IN PUIINFO pUIInfo,
|
||
|
IN PRAWBINARYDATA pRawData,
|
||
|
IN PDEVMODE pdmIn
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Information about driver private devmode
|
||
|
//
|
||
|
|
||
|
typedef struct _DRIVER_DEVMODE_INFO {
|
||
|
|
||
|
WORD dmDriverVersion; // current driver version
|
||
|
WORD dmDriverExtra; // size of current version private devmode
|
||
|
|
||
|
WORD dmDriverVersion500; // 5.0 driver version
|
||
|
WORD dmDriverExtra500; // size of 5.0 private devmode
|
||
|
WORD dmDriverVersion400; // 4.0 driver version
|
||
|
WORD dmDriverExtra400; // size of 4.0 private devmode
|
||
|
WORD dmDriverVersion351; // 3.51 driver version
|
||
|
WORD dmDriverExtra351; // size of 3.51 private devmode
|
||
|
|
||
|
} DRIVER_DEVMODE_INFO;
|
||
|
|
||
|
extern CONST DRIVER_DEVMODE_INFO gDriverDMInfo;
|
||
|
extern CONST DWORD gdwDriverDMSignature;
|
||
|
|
||
|
//
|
||
|
// Given a pointer to a public devmode, return
|
||
|
// a pointer to the driver private portion.
|
||
|
//
|
||
|
|
||
|
#define GET_DRIVER_PRIVATE_DEVMODE(pdm) ((PBYTE) (pdm) + (pdm)->dmSize)
|
||
|
|
||
|
#endif // !_DEVMODE_H_
|
||
|
|