windows-nt/Source/XPSP1/NT/printscan/print/drivers/usermode/inc/gpd.h
2020-09-26 16:20:57 +08:00

1125 lines
36 KiB
C

/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
gpd.h
Abstract:
GPD parser specific header file
Environment:
Windows NT Unidrv driver
Revision History:
10/15/96 -amandan-
Created it.
10/22/96 -zhanw-
add definition of all GPD constants
1/16/97 -zhanw-
update based on the latest GPD spec
--*/
#ifndef _GPD_H_
#define _GPD_H_
#define UNUSED_ITEM 0xFFFFFFFF
#define END_OF_LIST 0XFFFFFFFF
#define END_SEQUENCE 0xFFFFFFFF
#define MAX_THRESHOLD 0x7FFF
#define HT_PATSIZE_AUTO 255
//
// Binary printer description filename extension
//
#define BUD_FILENAME_EXT TEXT(".BUD")
// driver chooses 'best' GDI halftone pattern.
// ---- Qualified Names Section ---- //
// Note: Current practice of using the same code
// to store Integers, constants, and Qualified Names
// in List structures requires the QUALNAME structure
// to fit inside one DWORD.
typedef struct
{
WORD wFeatureID ;
WORD wOptionID ;
} QUALNAME, * PQUALNAME ;
// assign this struct the tag 'qn'
// ---- End of Qualified Names Section ---- //
typedef DWORD LISTINDEX;
//
// PRINTER TYPE enumeration
//
typedef enum _PRINTERTYPE {
PT_SERIAL,
PT_PAGE,
PT_TTY
} PRINTERTYPE;
//
// OEMPRINTINGCALLBACKS enumeration
//
typedef enum _OEMPRINTINGCALLBACKS {
OEMPC_OEMDownloadFontheader,
OEMPC_OEMDownloadCharGlyph,
OEMPC_OEMTTDownloadMethod,
OEMPC_OEMOutputCharStr,
OEMPC_OEMImageProcessing,
OEMPC_OEMCompression,
OEMPC_OEMHalftonePattern,
OEMPC_OEMFilterGraphics
} OEMPRINTINGCALLBACKS;
//
// define possible values for *CursorXAfterCR keyword
//
typedef enum _CURSORXAFTERCR {
CXCR_AT_PRINTABLE_X_ORIGIN,
CXCR_AT_CURSOR_X_ORIGIN
} CURSORXAFTERCR;
//
// define values for *CursorXAfterSendBlockData keyword
//
typedef enum _CURSORXAFTERSENDBLOCKDATA {
CXSBD_AT_GRXDATA_END,
CXSBD_AT_GRXDATA_ORIGIN,
CXSBD_AT_CURSOR_X_ORIGIN
} CURSORXAFTERSENDBLOCKDATA;
//
// define values for *CursorYAfterSendBlockData keyword
//
typedef enum _CURSORYAFTERSENDBLOCKDATA {
CYSBD_NO_MOVE,
CYSBD_AUTO_INCREMENT
} CURSORYAFTERSENDBLOCKDATA;
//
// define values for *OutputDataFormat keyword
//
typedef enum _OUTPUTDATAFORMAT {
ODF_H_BYTE,
ODF_V_BYTE
} OUTPUTDATAFORMAT;
//
// define values for *CharPosition keyword
//
typedef enum _CHARPOSITION {
CP_UPPERLEFT,
CP_BASELINE
} CHARPOSITION;
//
// define values for *DLSymbolSet
//
typedef enum _DLSYMBOLSET {
DLSS_PC8,
DLSS_ROMAN8
} DLSYMBOLSET;
//
// define values for *FontFormat keyword
//
typedef enum _FONTFORMAT {
FF_HPPCL,
FF_HPPCL_RES,
FF_HPPCL_OUTLINE,
FF_OEM_CALLBACK
} FONTFORMAT;
typedef enum _CURSORXAFTERRECTFILL {
CXARF_AT_RECT_X_ORIGIN,
CXARF_AT_RECT_X_END
} CURSORXAFTERRECTFILL;
typedef enum _CURSORYAFTERRECTFILL {
CYARF_AT_RECT_Y_ORIGIN,
CYARF_AT_RECT_Y_END
} CURSORYAFTERRECTFILL;
typedef enum _RASTERMODE {
RASTMODE_DIRECT,
RASTMODE_INDEXED
} RASTERMODE;
//
// GLOBAL ENTRIES
// Global entries applies to the whole GPD file.
// The driver creates a GLOBALS struct and the parsers initializes
// it. The driver keeps a pointer to the GLOBALS struct in PDEVICE.
//
typedef struct _GLOBALS {
//
// General
//
PWSTR pwstrGPDSpecVersion; // "GPDSPecVersion"
PWSTR pwstrGPDFileVersion; // "GPDFileVersion"
POINT ptMasterUnits; // "MasterUnits"
PWSTR pwstrModelName; // "ModelName"
PWSTR pwstrGPDFileName; // "GPDFileName"
PRINTERTYPE printertype; // "PrinterType"
PWSTR pwstrIncludeFiles; // "Include"
PWSTR pwstrResourceDLL; // "ResourceDLL"
DWORD dwMaxCopies; // "MaxCopies"
DWORD dwFontCartSlots; // "FontCartSlots"
// these two fields hold a true pointer and the number of bytes of
// OEM supplied binary data defined in the GPD file.
PBYTE pOEMCustomData; // "OEMCustomData" location of data
DWORD dwOEMCustomData; // "OEMCustomData" byte count of data
BOOL bRotateCoordinate; // "RotateCoordinate"
BOOL bRotateRasterData; // "RotateRaster"
LISTINDEX liTextCaps; // *TextCaps, offset to a list of
BOOL bRotateFont; // "RotateFont"
LISTINDEX liMemoryUsage; // *MemoryUsage
LISTINDEX liReselectFont; // *ReselectFont
LISTINDEX liOEMPrintingCallbacks; // *OEMPrintingCallbacks
//
// Cursor Control related information
//
CURSORXAFTERCR cxaftercr; // "CursorXAfterCR"
LISTINDEX liBadCursorMoveInGrxMode; // "BadCursorMoveInGrxMode"
LISTINDEX liYMoveAttributes; // "YMoveAttributes"
DWORD dwMaxLineSpacing; // "MaxLineSpacing"
BOOL bEjectPageWithFF; // "EjectPageWithFF"
BOOL bUseSpaceForXMove ; // UseSpaceForXMove?
BOOL bAbsXMovesRightOnly ; // AbsXMovesRightOnly?
DWORD dwXMoveThreshold; // *XMoveThreshold, never negative
DWORD dwYMoveThreshold; // *YMoveThreshold, never negative
POINT ptDeviceUnits; // *XMoveUnit, *YMoveUnit
DWORD dwLineSpacingMoveUnit; // *LineSpacingMoveUnit
//
// Color related information
//
BOOL bChangeColorMode; // "ChangeColorModeOnPage"
DWORD dwMagentaInCyanDye; // "MagentaInCyanDye"
DWORD dwYellowInCyanDye; // "YellowInCyanDye"
DWORD dwCyanInMagentaDye; // "CyanInMagentaDye"
DWORD dwYellowInMagentaDye; // "YellowInMagentaDye"
DWORD dwCyanInYellowDye; // "CyanInYellowDye"
DWORD dwMagentaInYellowDye; // "MagentaInYellowDye"
BOOL bEnableGDIColorMapping; // "EnableGDIColorMapping?"
DWORD dwMaxNumPalettes; // "MaxNumPalettes"
// the Palette entries are indicies to first item in a list.
LISTINDEX liPaletteSizes; // "PaletteSizes"
LISTINDEX liPaletteScope; // "PaletteScope"
//
// Raster related information
//
OUTPUTDATAFORMAT outputdataformat; // "OutputDataFormat"
BOOL bOptimizeLeftBound; // *OptimizaLeftBound?
LISTINDEX liStripBlanks ; // "StripBlanks"
BOOL bRasterSendAllData ; // "RasterSendAllData?"
CURSORXAFTERSENDBLOCKDATA cxafterblock; // "CursorXAfterSendBlockData"
CURSORYAFTERSENDBLOCKDATA cyafterblock; // "CursorYAfterSendBlockData"
BOOL bUseCmdSendBlockDataForColor; // "UseExpColorSelectCmd"
BOOL bMoveToX0BeforeColor; // "MoveToX0BeforeSetColor"
BOOL bSendMultipleRows; // *SendMultipleRows?
DWORD dwMaxMultipleRowBytes ; // "*MaxMultipleRowBytes"
BOOL bMirrorRasterByte; // *MirrorRasterByte?
BOOL bMirrorRasterPage; // *MirrorRasterPage?
//
//Font Information
//Device Font Specific.
//
LISTINDEX liDeviceFontList; // "DeviceFonts" Index to Font List Node
DWORD dwDefaultFont; // "DefaultFont ID"
DWORD dwMaxFontUsePerPage; // "MaxFontUsePerPage"
DWORD dwDefaultCTT; // *DefaultCTT
DWORD dwLookaheadRegion; // *LookAheadRegion, never negative
INT iTextYOffset; // *TextYOffset, could be negative
CHARPOSITION charpos; // "CharPosition"
//
//Font Substitution.
//
BOOL bTTFSEnabled ; //"TTFSEnabled?"
//
//Font Download
//
DWORD dwMinFontID; // "MinFontID"
DWORD dwMaxFontID; // "MaxFontID"
DWORD dwMaxNumDownFonts; // *MaxNumDownFonts
DLSYMBOLSET dlsymbolset; // *DLSymbolSet
DWORD dwMinGlyphID; // "MinGlyphID"
DWORD dwMaxGlyphID; // "MaxGlyphID"
FONTFORMAT fontformat; // "FontFormat"
//
// font simulation
//
BOOL bDiffFontsPerByteMode; // "DiffFontsPerByteMode?"
//
// rectangle area fill
//
CURSORXAFTERRECTFILL cxafterfill; // *CursorXAfterRectFill
CURSORYAFTERRECTFILL cyafterfill; // *CursorYAfterRectFill
DWORD dwMinGrayFill; // *MinGrayFill
DWORD dwMaxGrayFill; // *MaxGrayFill
DWORD dwTextHalftoneThreshold ; // *TextHalftoneThreshold
} GLOBALS, *PGLOBALS;
//
// DATA TYPE
// Enumeration of all data types in DataType array refernce
//
typedef enum _DATATYPE {
DT_COMMANDTABLE, // maps UnidrvID to index into COMMANDARRAY
DT_COMMANDARRAY,
DT_PARAMETERS,
DT_TOKENSTREAM, // stream of RPN operator tokens
DT_LISTNODE, // holds a LIST of dword values
DT_LOCALLISTNODE, // holds a LIST of dword values
DT_FONTSCART, // list of FontCartridges
DT_FONTSUBST, // Font Substitution table.
DT_LAST
} DATATYPE;
//
// GPDDRIVERINFO fields will be access via by predefined macros due
// to the possiblities that different base address might be required
// by the GPD parser.
//
typedef struct _GPDDRIVERINFO {
DWORD dwSize; // Size if GPDDRIVERINFO
ARRAYREF DataType[DT_LAST]; // global list of ALL
// Array References. See DATATYPE
// enumeration for details.
DWORD dwJobSetupIndex; // Index to listnode containing
DWORD dwDocSetupIndex; // list of indicies to COMMANDARRAY.
DWORD dwPageSetupIndex; //
DWORD dwPageFinishIndex; //
DWORD dwDocFinishIndex; //
DWORD dwJobFinishIndex; //
PBYTE pubResourceData; // Pointer to resource data base address
PINFOHEADER pInfoHeader; // Pointer to InfoHeader;
GLOBALS Globals; // GLOBALS struct
} GPDDRIVERINFO, *PGPDDRIVERINFO;
// ---- WARNING, the following section is owned ---- //
// by peterwo. Do not make any changes in these //
// definitions without his permission. //
// --------------- No Tresspassing --------------- //
//
// SEQUENCE COMMANDS
// The GPD identifies 6 sections of a job stream. Within a section, the commands
// are sent out in the increasing order of the sequence number. The number doesn
// not have to be consecutive.
// The driver will send out sequence commands for each
// of the following sections:
// JOB_SETUP
// DOC_SETUP
// PAGE_SETUP
// PAGE_FINISH
// DOC_FINISH
// JOB_FINISH
//
// SECTION enumeration
//
typedef enum _SEQSECTION {
SS_UNINITIALIZED,
SS_JOBSETUP,
SS_DOCSETUP,
SS_PAGESETUP,
SS_PAGEFINISH,
SS_DOCFINISH,
SS_JOBFINISH,
} SEQSECTION;
#if 0
// the sequence structure has been abandoned in favor
// of storing the list of COMMAND indicies in LISTNODE
// structures. The parser will convert wFeatureIndex
// into a command Index so the UI module will only
// deal with command indicies.
typedef struct _SEQUENCE{
WORD wIndexOfCmd; // Index into the COMMAND array
WORD wFeatureIndex; // Index into the FEATURE array
// FEATURE array is in UIINFO
WORD wNextInSequence; // Next sequence commands to send for this setion
// If equal to END_SEQUENCE, means no more for this section
WORD wReserved;
} SEQUENCE, *PSEQUENCE;
#endif
//
// ORDERDEPENDENCY
// Orderdepend is not use by the graphics driver, it's mainly present
// for the parsers.
//
typedef struct
{
SEQSECTION eSection; // Specifies the section
DWORD dwOrder ; // order within each section.
} ORDERDEPENDENCY , * PORDERDEPENDENCY ;
// assign this struct the type 'ord'
//
// COMMAND
// All commands listed in GPD will be parsed into the format defined below.
// The command array is a one dimensional array, accessible via predefined index.
// The invocation string an be in the form of one or more binary string concatenated
// together. Between binary string, there can exists parameter reference, always headed
// by a %. For example, %paramref, where paramref is the index into the PARAMETER array.
//
typedef struct _COMMAND{
INVOCATION strInvocation; // binary string and parameter references
ORDERDEPENDENCY ordOrder; // ORDERDEPENDENCY info
DWORD dwCmdCallbackID; // Command callback IDs are defined in
// GPD. If set to NO_CALLBACK_ID, it means
// that this cmd doesn't need to be hooked
DWORD dwStandardVarsList; // If the dwCmdCallbackID is not used, ignore this
// Otherwise, use dwStandardVarsList as the
// as a list of standard variable that need to be
// passed in command callbacks.
// dwStandardVarsList is an index into the
// LIST array
BOOL bNoPageEject; // does command cause ejection of current page?
// bitfield type doesn't exist for keywords not in snapshot table.
// all StartDoc commands with this flag set form a subset that
// may be sent as a group. They will not cause a page ejection.
} COMMAND, *PCOMMAND;
// assign this struct the type 'cmd'
#define NO_CALLBACK_ID (0xffffffff)
//
// PARAMETER
// All the parameters required by defined commands are stored in the PARAMETER array
// The driver will use the parameter reference in INVOCATION string as the index
// into this array for parameters.
//
typedef struct _PARAMETER{
DWORD dwFormat; // Specifies the format of the parameter
DWORD dwDigits; // Specifies the number of digits to be
// emmitted, this is only valid if the
// format is "D" or "d" AND dwFlags has
// PARAM_FLAG_FIELDWIDTH_USED
DWORD dwFlags; // Flags for parameters, which action to carray out:
// PARAM_FLAG_MIN_USED
// PARAM_FLAG_MAX_USED
// PARAM_FLAG_FIELDWIDTH_USED
LONG lMin; // If PARAMETER_MINUSED is set, use this
// as the min value for parameter
LONG lMax; // If PARAMETER_MAXUSED is set, use this
// as the max value for parameter
ARRAYREF arTokens; // Refernce to array of TOKENs for RPN calculator
} PARAMETER, *PPARAMETER;
// assign this struct the type 'param'
#define PARAM_FLAG_MIN_USED 0x00000001
// lMin field is used
#define PARAM_FLAG_MAX_USED 0x00000002
// lMax field is used
#define PARAM_FLAG_FIELDWIDTH_USED 0x00000004
// if fieldwidth was specified for 'd' or 'D' format.
#define PARAM_FLAG_MAXREPEAT_USED 0x00000008 // dead
// dwMaxRepeat field is used
//
// OPERATOR
// The following is an enumeration of the OPERATOR in TOKENSTREAM
//
typedef enum _OPERATOR
{
OP_INTEGER, // dwValue contains an integer
OP_VARI_INDEX, // dwValue contains index to Standard Variable Table.
//
// these operators will actually be inserted into the token
// stream.
//
OP_MIN, OP_MAX, OP_ADD, OP_SUB, OP_MULT,
OP_DIV, OP_MOD, OP_MAX_REPEAT, OP_HALT,
//
// these operators are used only in the temporary stack
//
OP_OPENPAR, OP_CLOSEPAR, OP_NEG,
//
// these operators are processed immediately by the
// token parser and are not stored.
//
OP_COMMA, OP_NULL, OP_LAST
}OPERATOR ;
//
// TOKENSTREAM
// This contains the token stream (operands and operators) for the parameter.
//
typedef struct _TOKENSTREAM{
DWORD dwValue; // Integer for Standard variable
OPERATOR eType; // Type of Value or Operator
} TOKENSTREAM, *PTOKENSTREAM;
// assign this struct the type 'tstr'
//
//FONTSUBSTITUTION
//Font substitution Table. This structure is same as that defined by the parser.
//
typedef struct _TTFONTSUBTABLE
{
ARRAYREF arTTFontName ; //True Type Font name to be substituted.
ARRAYREF arDevFontName ; // Device Font name of the Font to be used.
DWORD dwRcTTFontNameID ; //
DWORD dwRcDevFontNameID ; //
} TTFONTSUBTABLE, *PTTFONTSUBTABLE ;
// tag 'ttft'
// ---- List Values Section ---- //
/* this defines the nodes used to implement a singly-linked
list of DWORD items. Some values are stored in Lists. */
typedef struct
{
DWORD dwData ;
DWORD dwNextItem ; // index of next listnode
} LISTNODE, * PLISTNODE ;
// assign this struct the type 'lst'
// ---- End of List Values Section ---- //
// ---- Special default values used in snapshot ---- //
#define NO_LIMIT_NUM 0xffffffff
/// #define NO_RC_CTT_ID 0xffffffff set to zero if none supplied.
#define WILDCARD_VALUE (0x80000000)
// if '*' appears in place of an integer, it is assigned this value.
// ---- End of Peterwo's Restricted Area ---- //
//
// STANDARD VARIABLE
// The following is an enumeration of the standard variable as defined in the GPD,
// the TOKEN STREAM struct will contain either the actual parameter value or an index
// to this table. The Control Module will keep a table of this in the PDEVICE,
// the parser will use this enumeration table to initialize the dwValue of TOKENSTREAM
//
typedef enum _STDVARIABLE{
SV_NUMDATABYTES, // "NumOfDataBytes"
SV_WIDTHINBYTES, // "RasterDataWidthInBytes"
SV_HEIGHTINPIXELS, // "RasterDataHeightInPixels"
SV_COPIES, // "NumOfCopies"
SV_PRINTDIRECTION, // "PrintDirInCCDegrees"
SV_DESTX, // "DestX"
SV_DESTY, // "DestY"
SV_DESTXREL, // "DestXRel"
SV_DESTYREL, // "DestYRel"
SV_LINEFEEDSPACING, // "LinefeedSpacing"
SV_RECTXSIZE, // "RectXSize"
SV_RECTYSIZE, // "RectYSize"
SV_GRAYPERCENT, // "GrayPercentage"
SV_NEXTFONTID, // "NextFontID"
SV_NEXTGLYPH, // "NextGlyph"
SV_PHYSPAPERLENGTH, // "PhysPaperLength"
SV_PHYSPAPERWIDTH, // "PhysPaperWidth"
SV_FONTHEIGHT, // "FontHeight"
SV_FONTWIDTH, // "FontWidth"
SV_FONTMAXWIDTH, // "FontMaxWidth"
SV_FONTBOLD, // "FontBold"
SV_FONTITALIC, // "FontItalic"
SV_FONTUNDERLINE, // "FontUnderline"
SV_FONTSTRIKETHRU, // "FontStrikeThru"
SV_CURRENTFONTID, // "CurrentFontID"
SV_TEXTYRES, // "TextYRes"
SV_TEXTXRES, // "TextXRes"
SV_GRAPHICSYRES, // "GraphicsYRes"
SV_GRAPHICSXRES, // "GraphicsXRes"
SV_ROP3, // "Rop3"
SV_REDVALUE, // "RedValue"
SV_GREENVALUE, // "GreenValue"
SV_BLUEVALUE, // "BlueValue"
SV_PALETTEINDEXTOPROGRAM, // "PaletteIndexToProgram"
SV_CURRENTPALETTEINDEX, // "CurrentPaletteIndex"
SV_PATTERNBRUSH_TYPE, // "PatternBrushType"
SV_PATTERNBRUSH_ID, // "PatternBrushID"
SV_PATTERNBRUSH_SIZE, // "PatternBrushSize"
SV_CURSORORIGINX, // "CursorOriginX"
SV_CURSORORIGINY, // "CursorOriginY"
// this is in MasterUnits and in the coordinates of the currently selected orientation.
// this value is defined as ImageableOrigin - CursorOrigin
SV_PAGENUMBER, // "PageNumber"
// this value tracks number of times DrvStartBand has been called since
// StartDoc.
//
// Put new enum above SV_MAX
//
SV_MAX
}STDVARIABLE;
//
// GENERAL PRINTING COMMAND
// General printing commands contains such commands as
// cusor control, color, and overlay etc.
// The following is the enumeration of general printing commands. The list
// of commands are in GPDDRIVERINFO Cmds array, this list is accessed by
// the SEQUENCE struct.
//
typedef enum CMDINDEX
{ // unidrv index for commands
// Printer Configuration
FIRST_CONFIG_CMD,
CMD_STARTJOB = FIRST_CONFIG_CMD, // "CmdStartJob"
CMD_STARTDOC, // "CmdStartDoc"
CMD_STARTPAGE, // "CmdStartPage"
CMD_ENDPAGE, // "CmdEndPage"
CMD_ENDDOC, // "CmdEndDoc"
CMD_ENDJOB, // "CmdEndJob"
CMD_COPIES, // "CmdCopies"
CMD_SLEEPTIMEOUT, // "CmdSleepTimeOut"
LAST_CONFIG_CMD, // Larger than any Config Command value.
//
// GENERAL
//
//
// CURSOR CONTROL
//
CMD_XMOVEABSOLUTE, // "CmdXMoveAbsolute"
CMD_XMOVERELLEFT, // "CmdXMoveRelLeft"
CMD_XMOVERELRIGHT, // "CmdXMoveRelRight"
CMD_YMOVEABSOLUTE, // "CmdYMoveAbsolute"
CMD_YMOVERELUP, // "CmdYMoveRelUp"
CMD_YMOVERELDOWN, // "CmdYMoveRelDown"
CMD_SETSIMPLEROTATION, // "CmdSetSimpleRotation"
CMD_SETANYROTATION, // "CmdSetAnyRotation"
CMD_UNIDIRECTIONON, // "CmdUniDirectionOn"
CMD_UNIDIRECTIONOFF, // "CmdUniDirectionOff"
CMD_SETLINESPACING, // "CmdSetLineSpacing"
CMD_PUSHCURSOR, // "CmdPushCursor"
CMD_POPCURSOR, // "CmdPopCursor"
CMD_BACKSPACE, // "CmdBackSpace"
CMD_FORMFEED, // "CmdFF"
CMD_CARRIAGERETURN, // "CmdCR"
CMD_LINEFEED, // "CmdLF"
//
// COLOR
//
CMD_SELECTBLACKCOLOR, // "CmdSelectBlackColor"
CMD_SELECTREDCOLOR, // "CmdSelectRedColor"
CMD_SELECTGREENCOLOR, // "CmdSelectGreenColor"
CMD_SELECTYELLOWCOLOR, // "CmdSelectYellowColor"
CMD_SELECTBLUECOLOR, // "CmdSelectBlueColor"
CMD_SELECTMAGENTACOLOR, // "CmdSelectMagentaColor"
CMD_SELECTCYANCOLOR, // "CmdSelectCyanColor"
CMD_SELECTWHITECOLOR, // "CmdSelectWhiteColor"
CMD_BEGINPALETTEDEF, // "CmdBeginPaletteDef"
CMD_ENDPALETTEDEF, // "CmdEndPaletteDef"
CMD_DEFINEPALETTEENTRY, // "CmdDefinePaletteEntry"
CMD_BEGINPALETTEREDEF, // "CmdBeginPaletteReDef"
CMD_ENDPALETTEREDEF, // "CmdEndPaletteReDef"
CMD_REDEFINEPALETTEENTRY, // "CmdReDefinePaletteEntry"
CMD_SELECTPALETTEENTRY, // "CmdSelectPaletteEntry"
CMD_PUSHPALETTE, // "CmdPushPalette"
CMD_POPPALETTE, // "CmdPopPalette"
//
// DATACOMPRESSION
//
CMD_ENABLETIFF4, // "CmdEnableTIFF4"
CMD_ENABLEDRC, // "CmdEnableDRC"
CMD_ENABLEFERLE, // CmdEnableFE_RLE
CMD_ENABLEOEMCOMP, // "CmdEnableOEMComp"
CMD_DISABLECOMPRESSION, // "CmdDisableCompression"
//
// Raster Data Emission
//
CMD_BEGINRASTER, // "CmdBeginRaster"
CMD_ENDRASTER, // "CmdEndRaster"
CMD_SETDESTBMPWIDTH, // "CmdSetDestBmpWidth"
CMD_SETDESTBMPHEIGHT, // "CmdSetDestBmpHeight"
CMD_SETSRCBMPWIDTH, // "CmdSetSrcBmpWidth"
CMD_SETSRCBMPHEIGHT, // "CmdSetSrcBmpHeight"
CMD_SENDBLOCKDATA, // "CmdSendBlockData"
CMD_ENDBLOCKDATA, // "CmdEndBlockData"
CMD_SENDREDDATA, // "CmdSendRedData"
CMD_SENDGREENDATA, // "CmdSendGreenData"
CMD_SENDBLUEDATA, // "CmdSendBlueData"
CMD_SENDCYANDATA, // "CmdSendCyanData"
CMD_SENDMAGENTADATA, // "CmdSendMagentaData"
CMD_SENDYELLOWDATA, // "CmdSendYellowData"
CMD_SENDBLACKDATA, // "CmdSendBlackData"
//
// Font Downloading
//
CMD_SETFONTID, // "CmdSetFontID"
CMD_SELECTFONTID, // "CmdSelectFontID"
CMD_SETCHARCODE, // "CmdSetCharCode"
CMD_DESELECTFONTID, // "CmdDeselectFontID"
CMD_SELECTFONTHEIGHT, // "CmdSelectFontHeight"
CMD_SELECTFONTWIDTH, // "CmdSelectFontWidth"
CMD_DELETEFONT, // "CmdDeleteFont"
//
// Font Simulation
//
CMD_SETFONTSIM, // "CmdSetFontSim"
CMD_BOLDON, // "CmdBoldOn"
CMD_BOLDOFF, // "CmdBoldOff"
CMD_ITALICON, // "CmdItalicOn"
CMD_ITALICOFF, // "CmdItalicOff"
CMD_UNDERLINEON, // "CmdUnderlineOn"
CMD_UNDERLINEOFF, // "CmdUnderlineOff"
CMD_STRIKETHRUON, // "CmdStrikeThruOn"
CMD_STRIKETHRUOFF, // "CmdStrikeThruOff"
CMD_WHITETEXTON, // "CmdWhiteTextOn"
CMD_WHITETEXTOFF, // "CmdWhiteTextOff"
CMD_SELECTSINGLEBYTEMODE, // "CmdSelectSingleByteMode"
CMD_SELECTDOUBLEBYTEMODE, // "CmdSelectDoubleByteMode"
CMD_VERTICALPRINTINGON, // "CmdVerticalPrintingOn"
CMD_VERTICALPRINTINGOFF, // "CmdVerticalPrintingOff"
CMD_CLEARALLFONTATTRIBS, // "CmdClearAllFontAttribs"
//
// Print Object Specific Halftone Alogorithms (Used mainly for color devices)
//
CMD_SETTEXTHTALGO, // "CmdSetTextHTAlgo"
CMD_SETGRAPHICSHTALGO, // "CmdSetGraphicsHTAlgo"
CMD_SETPHOTOHTALGO, // "CmdSetPhotoHTAlgo"
//
// Vector Printing
//
CMD_FIRST_RULES, // existence of the RULES commands
// imples RULES_ABLE
CMD_SETRECTWIDTH = CMD_FIRST_RULES, // "CmdSetRectWidth"
CMD_SETRECTHEIGHT, // "CmdSetRectHeight"
CMD_SETRECTSIZE, // "CmdSetRectSize"
CMD_RECTGRAYFILL, // "CmdRectGrayFill"
CMD_RECTWHITEFILL, // "CmdRectWhiteFill"
CMD_RECTBLACKFILL, // "CmdRectBlackFill"
CMD_LAST_RULES = CMD_RECTBLACKFILL,
//
// Brush Selection
//
CMD_DOWNLOAD_PATTERN, // "CmdDownloadPattern"
CMD_SELECT_PATTERN, // "CmdSelectPattern"
CMD_SELECT_WHITEBRUSH, // "CmdSelectWhiteBrush"
CMD_SELECT_BLACKBRUSH, // "CmdSelectBlackBrush"
//
// Put new commands above CMD_MAX
//
CMD_MAX
} CMDINDEX;
//
// Rendering Information for Predefined Features
//
//
// GID_RESOLUTION
//
typedef struct _RESOLUTIONEX {
POINT ptGrxDPI; // *DPI
POINT ptTextDPI; // *TextDPI
DWORD dwMinStripBlankPixels ; // *MinStripBlankPixels
DWORD dwPinsPerPhysPass; // *PinsPerPhysPass
DWORD dwPinsPerLogPass; // *PinsPerLogPass
DWORD dwSpotDiameter; // *SpotDiameter
BOOL bRequireUniDir; // *RequireUniDir?
DWORD dwRedDeviceGamma ; // "RedDeviceGamma"
DWORD dwGreenDeviceGamma ; // "GreenDeviceGamma"
DWORD dwBlueDeviceGamma ; // "BlueDeviceGamma"
} RESOLUTIONEX, * PRESOLUTIONEX;
//
// GID_COLORMODE
//
typedef struct _COLORMODEEX {
BOOL bColor; // *Color?
DWORD dwPrinterNumOfPlanes; // *DevNumOfPlanes
DWORD dwPrinterBPP; // *DevBPP
LISTINDEX liColorPlaneOrder; // *ColorPlaneOrder
DWORD dwDrvBPP; // *DrvBPP
DWORD dwIPCallbackID ; // *IPCallbackID
RASTERMODE dwRasterMode ; // *RasterMode
DWORD dwPaletteSize ; // *PaletteSize
BOOL bPaletteProgrammable; // *PaletteProgrammable?
} COLORMODEEX, *PCOLORMODEEX;
//
// GID_PAGESIZE
//
typedef struct _PAGESIZEEX {
SIZEL szImageArea; // *PrintableArea, for non-CUSTOMSIZE options
POINT ptImageOrigin; // *PrintableOrigin, for non-CUSTOMSIZE options
POINT ptPrinterCursorOrig; // *CursorOrigin
POINT ptMinSize; // *MinSize, for CUSTOMSIZE option only
POINT ptMaxSize; // *MaxSize, for CUSTOMSIZE option only
DWORD dwTopMargin; // *TopMargin, for CUSTOMSIZE option only
DWORD dwBottomMargin; // *BottomMargin, for CUSTOMSIZE option only
DWORD dwMaxPrintableWidth; // *MaxPrintableWidth, for CUSTOMSIZE option only
DWORD dwMinLeftMargin; // *MinLeftMargin, for CUSTOMSIZE option only
BOOL bCenterPrintArea; // *CenterPrintable?, for CUSTOMSIZE option only
BOOL bRotateSize; // *RotateSize?
DWORD dwPortRotationAngle; // *PortRotationAngle
INVOCATION strCustCursorOriginX ; // "CustCursorOriginX"
INVOCATION strCustCursorOriginY ; // "CustCursorOriginY"
INVOCATION strCustPrintableOriginX ; // "CustPrintableOriginX"
INVOCATION strCustPrintableOriginY ; // "CustPrintableOriginY"
INVOCATION strCustPrintableSizeX; // "CustPrintableSizeX"
INVOCATION strCustPrintableSizeY; // "CustPrintableSizeY"
} PAGESIZEEX, *PPAGESIZEEX;
//
// define standard PageProtect options (for PAGEPROTECT.dwPageProtectID)
//
typedef enum _PAGEPRO {
PAGEPRO_ON,
PAGEPRO_OFF
} PAGEPRO;
//
// define possible values for *FeatureType keyword
//
typedef enum _FEATURETYPE {
FT_DOCPROPERTY,
FT_JOBPROPERTY,
FT_PRINTERPROPERTY
} FEATURETYPE;
//
// define possible values for *PromptTime keyword
//
typedef enum _PROMPTTIME {
PROMPT_UISETUP,
PROMPT_PRTSTARTDOC
} PROMPTTIME;
//
// define color plane id's, used by *ColorPlaneOrder keyword
//
typedef enum _COLORPLANE {
COLOR_YELLOW,
COLOR_MAGENTA,
COLOR_CYAN,
COLOR_BLACK,
COLOR_RED,
COLOR_GREEN,
COLOR_BLUE
} COLORPLANE;
//
// define values for *BadCursorMoveInGrxMode keyword
//
typedef enum _BADCURSORMOVEINGRXMODE {
NOCM_X_PORTRAIT,
NOCM_X_LANDSCAPE,
NOCM_Y_PORTRAIT,
NOCM_Y_LANDSCAPE
} BADCURSORMOVEINGRXMODE;
//
// define values for *YMoveAttributes keyword
//
typedef enum _YMOVEATTRIBUTE {
YMOVE_FAVOR_LINEFEEDSPACING,
YMOVE_SENDCR_FIRST,
} YMOVEATTRIBUTE;
//
// define values for *PaletteScope keyword
//
typedef enum _PALETTESCOPE {
PALS_FOR_RASTER,
PALS_FOR_TEXT,
PALS_FOR_VECTOR
} PALETTESCOPE;
//
// define values for *StripBlanks keyword
//
typedef enum _STRIPBLANKS {
SB_LEADING,
SB_ENCLOSED,
SB_TRAILING
} STRIPBLANKS;
//
// define values for *TextCaps
//
typedef enum _TEXTCAP {
TEXTCAPS_OP_CHARACTER,
TEXTCAPS_OP_STROKE,
TEXTCAPS_CP_STROKE,
TEXTCAPS_CR_90,
TEXTCAPS_CR_ANY,
TEXTCAPS_SF_X_YINDEP,
TEXTCAPS_SA_DOUBLE,
TEXTCAPS_SA_INTEGER,
TEXTCAPS_SA_CONTIN,
TEXTCAPS_EA_DOUBLE,
TEXTCAPS_IA_ABLE,
TEXTCAPS_UA_ABLE,
TEXTCAPS_SO_ABLE,
TEXTCAPS_RA_ABLE,
TEXTCAPS_VA_ABLE
} TEXTCAP;
//
// define values for *MemoryUsage
//
typedef enum _MEMORYUSAGE {
MEMORY_FONT,
MEMORY_RASTER,
MEMORY_VECTOR
} MEMORYUSAGE;
//
// define values for *ReselectFont
//
typedef enum _RESELECTFONT {
RESELECTFONT_AFTER_GRXDATA,
RESELECTFONT_AFTER_XMOVE,
RESELECTFONT_AFTER_FF
} RESELECTFONT;
// ---- macrodefinitions to access various data structures: ---- //
// this macro returns a pointer to the COMMAND structure
// corresponding to the specified Unidrv CommandID.
#ifndef PERFTEST
#define COMMANDPTR(pGPDDrvInfo , UniCmdID ) \
((((PDWORD)((PBYTE)(pGPDDrvInfo)->pInfoHeader + \
(pGPDDrvInfo)->DataType[DT_COMMANDTABLE].loOffset)) \
[(UniCmdID)] == UNUSED_ITEM ) ? NULL : \
(PCOMMAND)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_COMMANDARRAY].loOffset) \
+ ((PDWORD)((PBYTE)(pGPDDrvInfo)->pInfoHeader + \
(pGPDDrvInfo)->DataType[DT_COMMANDTABLE].loOffset)) \
[(UniCmdID)])
#else //PERFTEST
#define COMMANDPTR CommandPtr
PCOMMAND
CommandPtr(
IN PGPDDRIVERINFO pGPDDrvInfo,
IN DWORD UniCmdID
);
#endif //PERFTEST
// this macro returns a pointer to the COMMAND structure
// corresponding to specified index(to the COMMAND ARRAY)
#define INDEXTOCOMMANDPTR(pGPDDrvInfo , CmdIndex ) \
((CmdIndex == UNUSED_ITEM ) ? NULL : \
(PCOMMAND)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_COMMANDARRAY].loOffset) \
+ CmdIndex)
// this macro returns a pointer to the specified PARAMETER structure
// within the parameter array
#define PARAMETERPTR(pGPDDrvInfo , dwIndex ) \
(PPARAMETER)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_PARAMETERS].loOffset) \
+ (dwIndex)
// this macro returns a pointer to the start of the specified
// TOKENSTREAM structure, dwIndex comes from pParameter->Tokens.loOffset
#define TOKENSTREAMPTR(pGPDDrvInfo , dwIndex ) \
(PTOKENSTREAM)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_TOKENSTREAM].loOffset) \
+ (dwIndex)
// This macro returns a pointer to the start of the FontCart Array.
// FONTCART is ARRAYREF so all the elements are contiguous.
#define GETFONTCARTARRAY(pGPDDrvInfo) \
(PFONTCART)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_FONTSCART].loOffset)
// This macro returns a pointer to the start of the Font Substitution table.
// Substitution table is ARRAYREF so all the elements are contiguous.
#define GETTTFONTSUBTABLE(pGPDDrvInfo) \
(PTTFONTSUBTABLE)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_FONTSUBST].loOffset)
// This macro returns the string pointer. The string is null terminated.
// Use the dwcount member of ARRAYEF to verify the correct size.
#define GETSTRING(pGPDDrvInfo, arfString) \
(WCHAR *)((pGPDDrvInfo)->pubResourceData + (arfString).loOffset )
// this macro returns a pointer to the start of the specified
// LISTNODE structure, for example, dwIndex may come from
// pParameter->dwStandardVarsList
#define LISTNODEPTR(pGPDDrvInfo , dwIndex ) \
((dwIndex == END_OF_LIST ) ? NULL : \
(PLISTNODE)((pGPDDrvInfo)->pubResourceData + \
(pGPDDrvInfo)->DataType[DT_LISTNODE].loOffset) \
+ (dwIndex))
// this macro returns a pointer to the start of the specified
// LOCALLISTNODE structure, for example, dwIndex may come from
// pParameter->dwStandardVarsList. Returns NULL if
// (dwIndex == UNUSED_ITEM)
#define LOCALLISTNODEPTR(pGPDDrvInfo , dwIndex ) \
((dwIndex == UNUSED_ITEM ) ? NULL : \
(PLISTNODE)((PBYTE)(pGPDDrvInfo)->pInfoHeader + \
(pGPDDrvInfo)->DataType[DT_LOCALLISTNODE].loOffset) \
+ (dwIndex))
// ---- end macrodefinitions section ----- //
// ----- GPD parser only helper function ----- //
DWORD
UniMapToDeviceOptIndex(
IN PINFOHEADER pInfoHdr ,
IN DWORD dwFeatureID,
IN LONG lParam1,
IN LONG lParam2,
OUT PDWORD pdwOptionIndexes, // used only for GID_PAGESIZE
IN PDWORD pdwPaperID // optional paperID
) ;
#endif // !_GPD_H_