417 lines
12 KiB
C
417 lines
12 KiB
C
/*++
|
|
|
|
Copyright (c) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ppd.h
|
|
|
|
Abstract:
|
|
|
|
PPD parser specific header file
|
|
|
|
Environment:
|
|
|
|
Windows NT PostScript driver
|
|
|
|
Revision History:
|
|
|
|
10/11/96 -davidx-
|
|
Make CustomPageSize feature an option of PageSize.
|
|
|
|
08/16/96 -davidx-
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _PPD_H_
|
|
#define _PPD_H_
|
|
|
|
//
|
|
// We need to include <printoem.h> for its definition of CUSTOMPARAM_xxx
|
|
// constants and CUSTOMSIZEPARAM structure.
|
|
//
|
|
|
|
#ifndef KERNEL_MODE
|
|
#include <winddiui.h>
|
|
#endif
|
|
|
|
#include <printoem.h>
|
|
|
|
//
|
|
// PPD parser version number
|
|
//
|
|
|
|
#define PRIVATE_PARSER_VERSION 0x0017
|
|
#define PPD_PARSER_VERSION MAKELONG(PRIVATE_PARSER_VERSION, SHARED_PARSER_VERSION)
|
|
|
|
//
|
|
// Current PPD spec version
|
|
//
|
|
|
|
#define PPD_SPECVERSION_43 0x00040003
|
|
|
|
//
|
|
// Binary printer description filename extension
|
|
//
|
|
|
|
#ifndef ADOBE
|
|
#define BPD_FILENAME_EXT TEXT(".BPD")
|
|
#else
|
|
#define BPD_FILENAME_EXT TEXT(".ABD")
|
|
#endif
|
|
|
|
//
|
|
// Given a pointer to raw printer description data, initialize pointers
|
|
// to INFOHEADER and UIINFO structures
|
|
//
|
|
|
|
#define PPD_GET_UIINFO_FROM_RAWDATA(pRawData, pInfoHdr, pUIInfo) { \
|
|
ASSERT((pRawData) != NULL && (pRawData) == (pRawData)->pvPrivateData); \
|
|
(pInfoHdr) = (PINFOHEADER) (pRawData); \
|
|
(pUIInfo) = GET_UIINFO_FROM_INFOHEADER(pInfoHdr); \
|
|
}
|
|
|
|
//
|
|
// Given a pointer to raw printer description data, initialize pointers
|
|
// to INFOHEADER and PPDDATA structures
|
|
//
|
|
|
|
#define PPD_GET_PPDDATA_FROM_RAWDATA(pRawData, pInfoHdr, pPpdData) { \
|
|
ASSERT((pRawData) != NULL && (pRawData) == (pRawData)->pvPrivateData); \
|
|
(pInfoHdr) = (PINFOHEADER) (pRawData); \
|
|
(pPpdData) = GET_DRIVER_INFO_FROM_INFOHEADER(pInfoHdr); \
|
|
}
|
|
|
|
|
|
//
|
|
// Constants for PPDDATA.dwCustomSizeFlags
|
|
//
|
|
|
|
#define CUSTOMSIZE_CUTSHEET 0x0001 // device supports cut-sheet
|
|
#define CUSTOMSIZE_ROLLFED 0x0002 // device supports roll-feed
|
|
#define CUSTOMSIZE_DEFAULTCUTSHEET 0x0004 // default to cut-sheet
|
|
#define CUSTOMSIZE_SHORTEDGEFEED 0x0008 // default to short edge feed
|
|
#define CUSTOMSIZE_CENTERREG 0x0010 // center-registered
|
|
|
|
#define CUSTOMORDER(pPpdData, csindex) \
|
|
((pPpdData)->CustomSizeParams[csindex].dwOrder)
|
|
|
|
#define MINCUSTOMPARAM(pPpdData, csindex) \
|
|
((pPpdData)->CustomSizeParams[csindex].lMinVal)
|
|
|
|
#define MAXCUSTOMPARAM(pPpdData, csindex) \
|
|
((pPpdData)->CustomSizeParams[csindex].lMaxVal)
|
|
|
|
#define MAXCUSTOMPARAM_WIDTH(pPpdData) MAXCUSTOMPARAM(pPpdData, CUSTOMPARAM_WIDTH)
|
|
#define MAXCUSTOMPARAM_HEIGHT(pPpdData) MAXCUSTOMPARAM(pPpdData, CUSTOMPARAM_HEIGHT)
|
|
#define MAXCUSTOMPARAM_WIDTHOFFSET(pPpdData) MAXCUSTOMPARAM(pPpdData, CUSTOMPARAM_WIDTHOFFSET)
|
|
#define MAXCUSTOMPARAM_HEIGHTOFFSET(pPpdData) MAXCUSTOMPARAM(pPpdData, CUSTOMPARAM_HEIGHTOFFSET)
|
|
#define MAXCUSTOMPARAM_ORIENTATION(pPpdData) MAXCUSTOMPARAM(pPpdData, CUSTOMPARAM_ORIENTATION)
|
|
|
|
#define MINCUSTOMPARAM_WIDTH(pPpdData) MINCUSTOMPARAM(pPpdData, CUSTOMPARAM_WIDTH)
|
|
#define MINCUSTOMPARAM_HEIGHT(pPpdData) MINCUSTOMPARAM(pPpdData, CUSTOMPARAM_HEIGHT)
|
|
#define MINCUSTOMPARAM_WIDTHOFFSET(pPpdData) MINCUSTOMPARAM(pPpdData, CUSTOMPARAM_WIDTHOFFSET)
|
|
#define MINCUSTOMPARAM_HEIGHTOFFSET(pPpdData) MINCUSTOMPARAM(pPpdData, CUSTOMPARAM_HEIGHTOFFSET)
|
|
#define MINCUSTOMPARAM_ORIENTATION(pPpdData) MINCUSTOMPARAM(pPpdData, CUSTOMPARAM_ORIENTATION)
|
|
|
|
//
|
|
// This structure contains the information parsed from the PPD file that's
|
|
// not stored in UIINFO structure.
|
|
//
|
|
|
|
typedef struct _PPDDATA {
|
|
|
|
DWORD dwSizeOfStruct; // size of this structure
|
|
DWORD dwFlags; // misc. flags
|
|
DWORD dwExtensions; // language extensions
|
|
DWORD dwSetResType; // how to set resolution
|
|
DWORD dwPpdFilever; // PPD file version
|
|
DWORD dwPSVersion; // PostScript interpreter version number
|
|
INVOCATION PSVersion; // PSVersion string
|
|
INVOCATION Product; // Product string
|
|
|
|
DWORD dwOutputOrderIndex; // index of feature "OutputOrder"
|
|
DWORD dwCustomSizeFlags; // custom page size flags and parameters
|
|
DWORD dwLeadingEdgeLong; // option index for *LeadingEdge Long
|
|
DWORD dwLeadingEdgeShort; // option index for *LeadingEdge Short
|
|
DWORD dwUseHWMarginsTrue; // option index for *UseHWMargins True
|
|
DWORD dwUseHWMarginsFalse;// option index for *UseHWMargins False
|
|
CUSTOMSIZEPARAM CustomSizeParams[CUSTOMPARAM_MAX];
|
|
|
|
DWORD dwNt4Checksum; // NT4 PPD checksum
|
|
DWORD dwNt4DocFeatures; // NT4 number of doc-sticky features
|
|
DWORD dwNt4PrnFeatures; // NT4 number of printer-sticky features
|
|
ARRAYREF Nt4Mapping; // feature index mapping from NT4 to NT5
|
|
|
|
INVOCATION PatchFile; // PatchFile invocation string
|
|
INVOCATION JclBegin; // JCLBegin invocation string
|
|
INVOCATION JclEnterPS; // JCLEnterLanguage invocation string
|
|
INVOCATION JclEnd; // JCLEnd invocation string
|
|
INVOCATION ManualFeedFalse; // *ManualFeed False invocation string
|
|
|
|
PTRREF loDefaultFont; // byte-offset to the default device font
|
|
ARRAYREF DeviceFonts; // array of DEVFONT structures
|
|
|
|
ARRAYREF OrderDeps; // array of ORDERDEPEND structures
|
|
ARRAYREF QueryOrderDeps; // array of ORDERDEPEND structures for query order dependency
|
|
ARRAYREF JobPatchFiles; // array of JobPatchFile invocation strings
|
|
|
|
DWORD dwUserDefUILangID; // user's default UI language ID when .bpd is generated
|
|
|
|
} PPDDATA, *PPPDDATA;
|
|
|
|
//
|
|
// Constants for PPDDATA.dwFlags field
|
|
//
|
|
|
|
#define PPDFLAG_REQEEXEC 0x0001 // requires eexec-encoded Type1 font
|
|
#define PPDFLAG_PRINTPSERROR 0x0002 // print PS error page
|
|
#define PPDFLAG_HAS_JCLBEGIN 0x0004 // JCLBegin entry is present
|
|
#define PPDFLAG_HAS_JCLENTERPS 0x0008 // JCLToPSInterpreter entry is present
|
|
#define PPDFLAG_HAS_JCLEND 0x0010 // JCLEnd entry is present
|
|
|
|
//
|
|
// Decide if the printer can fully support custom page size feature:
|
|
// PPD4.3 device (cut-sheet or roll-fed)
|
|
// pre-PPD4.3 roll-fed device
|
|
//
|
|
|
|
#define SUPPORT_FULL_CUSTOMSIZE_FEATURES(pUIInfo, pPpdData) \
|
|
((pUIInfo)->dwSpecVersion >= PPD_SPECVERSION_43 || \
|
|
((pPpdData)->dwCustomSizeFlags & CUSTOMSIZE_ROLLFED))
|
|
|
|
//
|
|
// PPD spec says if *CustomPageSize is present, *LeadingEdge should also be
|
|
// present. But there are some PPD files that don't have *LeadingEdge statements,
|
|
// in which case we assume the device supports both Long and Short leading edges.
|
|
//
|
|
// Also, there are PPD files that specify neither Long nor Short option for
|
|
// *LeadingEdge, in which case we also assume the device supports both Long and
|
|
// Short leading edges.
|
|
//
|
|
|
|
#define SKIP_LEADINGEDGE_CHECK(pUIInfo, pPpdData) \
|
|
((GET_PREDEFINED_FEATURE((pUIInfo), GID_LEADINGEDGE) == NULL) || \
|
|
((pPpdData)->dwLeadingEdgeLong == OPTION_INDEX_ANY && \
|
|
(pPpdData)->dwLeadingEdgeShort == OPTION_INDEX_ANY))
|
|
|
|
#define LONGEDGEFIRST_SUPPORTED(pUIInfo, pPpdData) \
|
|
(SKIP_LEADINGEDGE_CHECK(pUIInfo, pPpdData) || \
|
|
((pPpdData)->dwLeadingEdgeLong != OPTION_INDEX_ANY))
|
|
|
|
#define SHORTEDGEFIRST_SUPPORTED(pUIInfo, pPpdData) \
|
|
(SKIP_LEADINGEDGE_CHECK(pUIInfo, pPpdData) || \
|
|
((pPpdData)->dwLeadingEdgeShort != OPTION_INDEX_ANY))
|
|
|
|
//
|
|
// Minimum amount of free VM for Level1 and Level2 printer
|
|
//
|
|
|
|
#define MIN_FREEMEM_L1 (172*KBYTES)
|
|
#define MIN_FREEMEM_L2 (249*KBYTES)
|
|
|
|
//
|
|
// Default job timeout and wait timeout measured in seconds
|
|
//
|
|
|
|
#define DEFAULT_JOB_TIMEOUT 0
|
|
#define DEFAULT_WAIT_TIMEOUT 300
|
|
|
|
//
|
|
// Landscape orientation options
|
|
//
|
|
|
|
#define LSO_ANY 0
|
|
#define LSO_PLUS90 90
|
|
#define LSO_MINUS90 270
|
|
|
|
//
|
|
// How to set resolution
|
|
//
|
|
|
|
#define RESTYPE_NORMAL 0
|
|
#define RESTYPE_JCL 1
|
|
#define RESTYPE_EXITSERVER 2
|
|
|
|
//
|
|
// Language extensions
|
|
//
|
|
|
|
#define LANGEXT_DPS 0x0001
|
|
#define LANGEXT_CMYK 0x0002
|
|
#define LANGEXT_COMPOSITE 0x0004
|
|
#define LANGEXT_FILESYSTEM 0x0008
|
|
|
|
//
|
|
// Default resolution when no information is provided in the PPD file
|
|
//
|
|
|
|
#define DEFAULT_RESOLUTION 300
|
|
|
|
//
|
|
// Data structure for storing information about device fonts
|
|
//
|
|
|
|
typedef struct _DEVFONT {
|
|
|
|
PTRREF loFontName; // byte offset to font name (ANSI string)
|
|
PTRREF loDisplayName; // byte offset to translation string (Unicode string)
|
|
PTRREF loEncoding; // encoding (ANSI string)
|
|
PTRREF loCharset; // charset (ANSI string)
|
|
PTRREF loVersion; // version (ANSI string)
|
|
DWORD dwStatus; // status
|
|
|
|
} DEVFONT, *PDEVFONT;
|
|
|
|
#define FONTSTATUS_UNKNOWN 0
|
|
#define FONTSTATUS_ROM 1
|
|
#define FONTSTATUS_DISK 2
|
|
|
|
//
|
|
// Data structure for storing information about order dependencies
|
|
//
|
|
|
|
typedef struct _ORDERDEPEND {
|
|
|
|
LONG lOrder; // order value from *OrderDependency entry
|
|
DWORD dwSection; // in which section should the code appear
|
|
DWORD dwPPDSection; // orignal section specified in PPD (no parser conversion)
|
|
DWORD dwFeatureIndex; // index of the feature involved
|
|
DWORD dwOptionIndex; // index of the option involved (if any)
|
|
DWORD dwNextOrderDep; // points to the list of order dependencies
|
|
// related to a feature; always starts with
|
|
// the entry whose dwOptionIndex = OPTION_INDEX_ANY
|
|
|
|
} ORDERDEPEND, *PORDERDEPEND;
|
|
|
|
#define NULL_ORDERDEP 0xffffffff
|
|
#define INVALID_FEATURE_INDEX 0xffffffff
|
|
|
|
//
|
|
// Constants for ORDERDEPENDENCY.section field
|
|
//
|
|
|
|
#define SECTION_JCLSETUP 0x0001
|
|
#define SECTION_EXITSERVER 0x0002
|
|
#define SECTION_PROLOG 0x0004
|
|
#define SECTION_UNASSIGNED 0x0008
|
|
|
|
//
|
|
// Change SECTION_ANYSETUP to be smaller than SECTION_DOCSETUP/SECTION_PAGESETUP
|
|
// so that in the ascending order dependency list, for nodes with the same order value,
|
|
// SECTION_ANYSETUP nodes will be in front of SECTION_DOCSETUP/SECTION_PAGESETUP nodes.
|
|
//
|
|
|
|
#define SECTION_ANYSETUP 0x0010
|
|
#define SECTION_DOCSETUP 0x0020
|
|
#define SECTION_PAGESETUP 0x0040
|
|
|
|
//
|
|
// Load cached binary PPD data file into memory
|
|
//
|
|
|
|
PRAWBINARYDATA
|
|
PpdLoadCachedBinaryData(
|
|
IN PTSTR ptstrPpdFilename
|
|
);
|
|
|
|
//
|
|
// Parse the ASCII text PPD file and cached the resulting binary data
|
|
//
|
|
|
|
PRAWBINARYDATA
|
|
PpdParseTextFile(
|
|
IN PTSTR ptstrPpdFilename
|
|
);
|
|
|
|
//
|
|
// Generate a filename for the cached binary PPD data given a PPD filename
|
|
//
|
|
|
|
PTSTR
|
|
GenerateBpdFilename(
|
|
IN PTSTR ptstrPpdFilename
|
|
);
|
|
|
|
//
|
|
// Validate the specified custom page size parameters and
|
|
// Fix up any inconsistencies found.
|
|
//
|
|
|
|
BOOL
|
|
BValidateCustomPageSizeData(
|
|
IN PRAWBINARYDATA pRawData,
|
|
IN OUT PCUSTOMSIZEDATA pCSData
|
|
);
|
|
|
|
//
|
|
// Initialize custom page size parameters to their default values
|
|
//
|
|
|
|
VOID
|
|
VFillDefaultCustomPageSizeData(
|
|
IN PRAWBINARYDATA pRawData,
|
|
OUT PCUSTOMSIZEDATA pCSData,
|
|
IN BOOL bMetric
|
|
);
|
|
|
|
//
|
|
// Return the valid ranges for custom page size width, height,
|
|
// and offset parameters based on the specifed paper feed direction
|
|
//
|
|
|
|
typedef struct _CUSTOMSIZERANGE {
|
|
|
|
DWORD dwMin;
|
|
DWORD dwMax;
|
|
|
|
} CUSTOMSIZERANGE, *PCUSTOMSIZERANGE;
|
|
|
|
VOID
|
|
VGetCustomSizeParamRange(
|
|
IN PRAWBINARYDATA pRawData,
|
|
IN PCUSTOMSIZEDATA pCSData,
|
|
OUT PCUSTOMSIZERANGE pCSRange
|
|
);
|
|
|
|
//
|
|
// Convert NT4 feature/option selections to NT5 format
|
|
//
|
|
|
|
VOID
|
|
VConvertOptSelectArray(
|
|
PRAWBINARYDATA pRawData,
|
|
POPTSELECT pNt5Options,
|
|
DWORD dwNt5MaxCount,
|
|
PBYTE pubNt4Options,
|
|
DWORD dwNt4MaxCount,
|
|
INT iMode
|
|
);
|
|
|
|
//
|
|
// Return a copy of the default font substitution table
|
|
//
|
|
|
|
PTSTR
|
|
PtstrGetDefaultTTSubstTable(
|
|
PUIINFO pUIInfo
|
|
);
|
|
|
|
|
|
//
|
|
// Check whether a form is supported through custom paper size, and if yes
|
|
// which direction the paper is fed. pwFeedDirection can be NULL
|
|
//
|
|
BOOL
|
|
BFormSupportedThruCustomSize(
|
|
PRAWBINARYDATA pRawData,
|
|
DWORD dwX,
|
|
DWORD dwY,
|
|
PWORD pwFeedDirection
|
|
);
|
|
|
|
#endif // !_PPD_H_
|
|
|