// Copyright (c) 1996-1999 Microsoft Corporation /* framwrk.c - functions that tie different functions together. a supporting framework so to speak. History of Changes 9/30/98 --hsingh-- Added call to function BsetUQMFlag(). The function enables making the UpdateQualityMacro? keyword optional in .gpd file. */ #include "gpdparse.h" #include "globals.h" // ---- functions defined in framwrk.c ---- // BOOL BcreateGPDbinary( PWSTR pwstrFileName, DWORD dwVerbosity) ; VOID VinitMainKeywordTable( PGLOBL pglobl) ; DWORD DWinitMainKeywordTable1( DWORD dwI, PGLOBL pglobl) ; DWORD DWinitMainKeywordTable2( DWORD dwI, PGLOBL pglobl) ; DWORD DWinitMainKeywordTable3( DWORD dwI, PGLOBL pglobl) ; DWORD DWinitMainKeywordTable4( DWORD dwI, PGLOBL pglobl) ; DWORD DWinitMainKeywordTable5( DWORD dwI, PGLOBL pglobl) ; VOID VinitValueToSize( PGLOBL pglobl) ; VOID VinitGlobals( DWORD dwVerbosity, PGLOBL pglobl); BOOL BpreAllocateObjects( PGLOBL pglobl) ; BOOL BreturnBuffers( PGLOBL pglobl) ; BOOL BallocateCountableObjects( PGLOBL pglobl) ; BOOL BinitPreAllocatedObjects( PGLOBL pglobl) ; BOOL BinitCountableObjects( PGLOBL pglobl) ; BOOL BevaluateMacros( PGLOBL pglobl) ; BOOL BpostProcess( PWSTR pwstrFileName, PGLOBL pglobl) ; BOOL BconsolidateBuffers( PWSTR pwstrFileName, PGLOBL pglobl) ; BOOL BexpandMemConfigShortcut(DWORD dwSubType) ; BOOL BexpandCommandShortcut(DWORD dwSubType) ; // ---------------------------------------------------- // BOOL BcreateGPDbinary( PWSTR pwstrFileName, // root GPD file DWORD dwVerbosity ) // Verbosity Level { BOOL bStatus ; GLOBL globl; PGLOBL pglobl = &globl; // check. Temporary global. // check. pglobl = &globl; VinitGlobals(dwVerbosity, &globl) ; while(geErrorSev < ERRSEV_FATAL) { bStatus = BpreAllocateObjects(&globl) ; if(bStatus) { bStatus = BinitPreAllocatedObjects(&globl) ; } if(bStatus) { bStatus = BcreateTokenMap(pwstrFileName, &globl ) ; } if(bStatus) { bStatus = BexpandShortcuts(&globl) ; } if(bStatus) { bStatus = BevaluateMacros(&globl) ; } if(bStatus) { bStatus = BInterpretTokens((PTKMAP)gMasterTable[MTI_NEWTOKENMAP]. pubStruct, TRUE, &globl ) ; // is first pass } if(bStatus) { bStatus = BallocateCountableObjects(&globl) ; } if(bStatus) { bStatus = BinitCountableObjects(&globl) ; } if(bStatus) { bStatus = BInterpretTokens((PTKMAP)gMasterTable[MTI_NEWTOKENMAP]. pubStruct, FALSE, &globl ) ; // second pass } if(bStatus) { bStatus = BpostProcess(pwstrFileName, &globl) ; } ; // execution reaches here regardless // sets error code if needed. if(BreturnBuffers(&globl) ) // clears ERRSEV_RESTART but { // returns FALSE in this case. if(geErrorSev < ERRSEV_RESTART) { return(bStatus) ; // escape } } } return(FALSE) ; // died due to Fatal , unrecoverable error. } // BcreateGPDbinary(...) VOID VinitMainKeywordTable( PGLOBL pglobl) { DWORD dwI = 0 ; // index to MainKeywordTable. dwI = DWinitMainKeywordTable1(dwI, pglobl) ; dwI = DWinitMainKeywordTable2(dwI, pglobl) ; dwI = DWinitMainKeywordTable3(dwI, pglobl) ; dwI = DWinitMainKeywordTable4(dwI, pglobl) ; dwI = DWinitMainKeywordTable5(dwI, pglobl) ; if(dwI >= gMasterTable[MTI_MAINKEYWORDTABLE].dwArraySize) RIP(("Too many entries to fit inside MainKeywordTable\n")); } DWORD DWinitMainKeywordTable1( DWORD dwI, PGLOBL pglobl) /* note: VinitDictionaryIndex() assumes the MainKeywordTable is divided into sections. Each section is terminated by a NULL entry, that is an entry where pstrKeyword = NULL. The sections and their order in the KeywordTable are defined by the enum KEYWORD_SECTS. Make sure the MainKeywordTable has enough slots to hold all entries defined here. */ { /* NON_ATTR - constructs and special keywords. */ // *UIGroup: mMainKeywordTable[dwI].pstrKeyword = "UIGroup" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_UIGROUP ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *Feature: mMainKeywordTable[dwI].pstrKeyword = "Feature" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_FEATURE ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *Option: mMainKeywordTable[dwI].pstrKeyword = "Option" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_OPTION ; mMainKeywordTable[dwI].dwOffset = 0 ; gdwOptionConstruct = dwI ; dwI++ ; // *switch: mMainKeywordTable[dwI].pstrKeyword = "switch" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_SWITCH ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *case: mMainKeywordTable[dwI].pstrKeyword = "case" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_CASE ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *Switch: mMainKeywordTable[dwI].pstrKeyword = "Switch" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_SWITCH ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *Case: mMainKeywordTable[dwI].pstrKeyword = "Case" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_CASE ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *default: mMainKeywordTable[dwI].pstrKeyword = "default" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_DEFAULT ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *Command: mMainKeywordTable[dwI].pstrKeyword = "Command" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_COMMAND ; mMainKeywordTable[dwI].dwOffset = 0 ; gdwCommandConstruct = dwI ; dwI++ ; // *FontCartridge: mMainKeywordTable[dwI].pstrKeyword = "FontCartridge" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_FONTCART ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *TTFS: mMainKeywordTable[dwI].pstrKeyword = "TTFS" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_TTFONTSUBS ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *OEM: mMainKeywordTable[dwI].pstrKeyword = "OEM" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_OEM ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // BlockMacro: mMainKeywordTable[dwI].pstrKeyword = "BlockMacro" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_DEF ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_BLOCKMACRO ; mMainKeywordTable[dwI].dwOffset = 0 ; // not used dwI++ ; // Macros: mMainKeywordTable[dwI].pstrKeyword = "Macros" ; mMainKeywordTable[dwI].eAllowedValue = NO_VALUE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_MACROS; mMainKeywordTable[dwI].dwOffset = 0 ; // not used dwI++ ; // {: mMainKeywordTable[dwI].pstrKeyword = "{" ; mMainKeywordTable[dwI].eAllowedValue = NO_VALUE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_OPENBRACE ; mMainKeywordTable[dwI].dwOffset = 0 ; // not used gdwOpenBraceConstruct = dwI ; dwI++ ; // }: mMainKeywordTable[dwI].pstrKeyword = "}" ; mMainKeywordTable[dwI].eAllowedValue = NO_VALUE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_CONSTRUCT ; mMainKeywordTable[dwI].dwSubType = CONSTRUCT_CLOSEBRACE ; mMainKeywordTable[dwI].dwOffset = 0 ; // not used gdwCloseBraceConstruct = dwI ; dwI++ ; // end of constructs. // *Include: mMainKeywordTable[dwI].pstrKeyword = "Include" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_DEF_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_INCLUDE ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *InsertBlock: mMainKeywordTable[dwI].pstrKeyword = "InsertBlock" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_BLOCKMACRO ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_INSERTBLOCK ; mMainKeywordTable[dwI].dwOffset = 0 ; dwI++ ; // *IgnoreBlock: mMainKeywordTable[dwI].pstrKeyword = "IgnoreBlock" ; mMainKeywordTable[dwI].eAllowedValue = NO_VALUE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_IGNOREBLOCK ; mMainKeywordTable[dwI].dwOffset = 0 ; gdwID_IgnoreBlock = dwI ; dwI++ ; // *InvalidCombination: mMainKeywordTable[dwI].pstrKeyword = "InvalidCombination" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_INVALID_COMBO ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrInvalidCombos) ; dwI++ ; // *InvalidInstallableCombination: mMainKeywordTable[dwI].pstrKeyword = "InvalidInstallableCombination" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARTIALLY_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_INVALID_INS_COMBO ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrInvldInstallCombo) ; dwI++ ; // *Cmd: // mMainKeywordTable[dwI].pstrKeyword = "Cmd" ; // mMainKeywordTable[dwI].eAllowedValue = VALUE_COMMAND_SHORTCUT ; // mMainKeywordTable[dwI].flAgs = KWF_SHORTCUT ; // mMainKeywordTable[dwI].eType = TY_SPECIAL ; // mMainKeywordTable[dwI].dwSubType = SPEC_COMMAND_SHORTCUT ; // mMainKeywordTable[dwI].dwOffset = 0 ; // dwI++ ; // *TTFS: // mMainKeywordTable[dwI].pstrKeyword = "TTFS" ; // mMainKeywordTable[dwI].eAllowedValue = VALUE_FONTSUB ; // mMainKeywordTable[dwI].flAgs = KWF_SHORTCUT ; // mMainKeywordTable[dwI].eType = TY_SPECIAL ; // mMainKeywordTable[dwI].dwSubType = SPEC_TTFS ; // mMainKeywordTable[dwI].dwOffset = 0 ; // dwI++ ; // these memconfig keywords must be expanded into // options. // *MemConfigKB: mMainKeywordTable[dwI].pstrKeyword = "MemConfigKB" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = KWF_SHORTCUT ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_MEM_CONFIG_KB ; mMainKeywordTable[dwI].dwOffset = 0 ; gdwMemConfigKB = dwI ; dwI++ ; // *MemConfigMB: mMainKeywordTable[dwI].pstrKeyword = "MemConfigMB" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = KWF_SHORTCUT ; mMainKeywordTable[dwI].eType = TY_SPECIAL ; mMainKeywordTable[dwI].dwSubType = SPEC_MEM_CONFIG_MB ; mMainKeywordTable[dwI].dwOffset = 0 ; gdwMemConfigMB = dwI ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; return dwI ; } DWORD DWinitMainKeywordTable2( DWORD dwI, PGLOBL pglobl) { /* ---- GLOBAL Construct keywords: ----- */ // *GPDSpecVersion: mMainKeywordTable[dwI].pstrKeyword = "GPDSpecVersion" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_NO_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrGPDSpecVersion) ; dwI++ ; // *MasterUnits: mMainKeywordTable[dwI].pstrKeyword = "MasterUnits" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMasterUnits) ; dwI++ ; // *ModelName: mMainKeywordTable[dwI].pstrKeyword = "ModelName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrModelName) ; dwI++ ; // *rcModelNameID: mMainKeywordTable[dwI].pstrKeyword = "rcModelNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrModelNameID) ; dwI++ ; // *GPDFileVersion: mMainKeywordTable[dwI].pstrKeyword = "GPDFileVersion" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_NO_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrGPDFileVersion) ; dwI++ ; // *GPDFileName: mMainKeywordTable[dwI].pstrKeyword = "GPDFileName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_DEF_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrGPDFileName) ; dwI++ ; // *InstalledOptionName: mMainKeywordTable[dwI].pstrKeyword = "InstalledOptionName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrNameInstalled) ; dwI++ ; // *rcInstalledOptionNameID: mMainKeywordTable[dwI].pstrKeyword = "rcInstalledOptionNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrNameIDInstalled) ; dwI++ ; // *NotInstalledOptionName: mMainKeywordTable[dwI].pstrKeyword = "NotInstalledOptionName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrNameNotInstalled) ; dwI++ ; // *rcNotInstalledOptionNameID: mMainKeywordTable[dwI].pstrKeyword = "rcNotInstalledOptionNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrNameIDNotInstalled) ; dwI++ ; // *DraftQualitySettings: mMainKeywordTable[dwI].pstrKeyword = "DraftQualitySettings" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDraftQualitySettings) ; dwI++ ; // *BetterQualitySettings: mMainKeywordTable[dwI].pstrKeyword = "BetterQualitySettings" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrBetterQualitySettings) ; dwI++ ; // *BestQualitySettings: mMainKeywordTable[dwI].pstrKeyword = "BestQualitySettings" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrBestQualitySettings) ; dwI++ ; // *DefaultQuality: mMainKeywordTable[dwI].pstrKeyword = "DefaultQuality" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_QUALITYSETTING ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDefaultQuality) ; dwI++ ; // *PrinterType: mMainKeywordTable[dwI].pstrKeyword = "PrinterType" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PRINTERTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPrinterType) ; dwI++ ; // *Personality: mMainKeywordTable[dwI].pstrKeyword = "Personality" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPersonality) ; dwI++ ; // *rcPersonalityID: mMainKeywordTable[dwI].pstrKeyword = "rcPersonalityID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRcPersonalityID) ; dwI++ ; // *ResourceDLL: mMainKeywordTable[dwI].pstrKeyword = "ResourceDLL" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_DEF_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrResourceDLL) ; dwI++ ; // *CodePage: mMainKeywordTable[dwI].pstrKeyword = "CodePage" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCodePage) ; dwI++ ; // *MaxCopies: mMainKeywordTable[dwI].pstrKeyword = "MaxCopies" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxCopies) ; dwI++ ; // *FontCartSlots: mMainKeywordTable[dwI].pstrKeyword = "FontCartSlots" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrFontCartSlots) ; dwI++ ; // *MaxPrintableArea: mMainKeywordTable[dwI].pstrKeyword = "MaxPrintableArea" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxPrintableArea) ; dwI++ ; // *OutputDataFormat: mMainKeywordTable[dwI].pstrKeyword = "OutputDataFormat" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_OUTPUTDATAFORMAT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrOutputDataFormat) ; dwI++ ; // *LookaheadRegion: mMainKeywordTable[dwI].pstrKeyword = "LookAheadRegion" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrLookaheadRegion) ; dwI++ ; // *rcPrinterIconID: mMainKeywordTable[dwI].pstrKeyword = "rcPrinterIconID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPrinterIcon) ; dwI++ ; // *HelpFile: mMainKeywordTable[dwI].pstrKeyword = "HelpFile" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_DEF_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrHelpFile) ; dwI++ ; // *OEMCustomData: mMainKeywordTable[dwI].pstrKeyword = "OEMCustomData" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_NO_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrOEMCustomData) ; dwI++ ; // // Printer Capabilities related information // // *RotateCoordinate?: mMainKeywordTable[dwI].pstrKeyword = "RotateCoordinate?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRotateCoordinate) ; dwI++ ; // *RasterCaps: mMainKeywordTable[dwI].pstrKeyword = "RasterCaps" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_RASTERCAPS ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRasterCaps) ; dwI++ ; // *RotateRaster?: mMainKeywordTable[dwI].pstrKeyword = "RotateRaster?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRotateRasterData) ; dwI++ ; // *TextCaps: mMainKeywordTable[dwI].pstrKeyword = "TextCaps" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_TEXTCAPS ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrTextCaps) ; dwI++ ; // *RotateFont?: mMainKeywordTable[dwI].pstrKeyword = "RotateFont?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRotateFont) ; dwI++ ; // *MemoryUsage: mMainKeywordTable[dwI].pstrKeyword = "MemoryUsage" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_MEMORYUSAGE ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMemoryUsage) ; dwI++ ; // *ReselectFont: mMainKeywordTable[dwI].pstrKeyword = "ReselectFont" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_RESELECTFONT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrReselectFont) ; dwI++ ; // *PrintRate: mMainKeywordTable[dwI].pstrKeyword = "PrintRate" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPrintRate) ; dwI++ ; #ifndef WINNT_40 // *PrintRateUnit: mMainKeywordTable[dwI].pstrKeyword = "PrintRateUnit" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PRINTRATEUNIT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPrintRateUnit) ; dwI++ ; #endif // *PrintRatePPM: mMainKeywordTable[dwI].pstrKeyword = "PrintRatePPM" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPrintRatePPM) ; dwI++ ; // *OutputOrderReversed?: // note this keyword is also an option Keyword with type: // ATT_LOCAL_OPTION_ONLY mMainKeywordTable[dwI].pstrKeyword = "OutputOrderReversed?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrOutputOrderReversed) ; dwI++ ; // *ReverseBandOrderForEvenPages?: // special flag for HP970C with AutoDuplexer // mMainKeywordTable[dwI].pstrKeyword = "ReverseBandOrderForEvenPages?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrReverseBandOrderForEvenPages) ; dwI++ ; // *OEMPrintingCallbacks: mMainKeywordTable[dwI].pstrKeyword = "OEMPrintingCallbacks" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_OEMPRINTINGCALLBACKS ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrOEMPrintingCallbacks) ; dwI++ ; // // Cursor Control related information // // *CursorXAfterCR: mMainKeywordTable[dwI].pstrKeyword = "CursorXAfterCR" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CURSORXAFTERCR ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCursorXAfterCR) ; dwI++ ; // *BadCursorMoveInGrxMode: mMainKeywordTable[dwI].pstrKeyword = "BadCursorMoveInGrxMode" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BADCURSORMOVEINGRXMODE ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrBadCursorMoveInGrxMode) ; dwI++ ; // *YMoveAttributes: mMainKeywordTable[dwI].pstrKeyword = "YMoveAttributes" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_YMOVEATTRIB ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrYMoveAttributes) ; dwI++ ; // *MaxLineSpacing: mMainKeywordTable[dwI].pstrKeyword = "MaxLineSpacing" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxLineSpacing) ; dwI++ ; // *UseSpaceForXMove?: mMainKeywordTable[dwI].pstrKeyword = "UseSpaceForXMove?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrbUseSpaceForXMove) ; dwI++ ; // *AbsXMovesRightOnly?: mMainKeywordTable[dwI].pstrKeyword = "AbsXMovesRightOnly?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrbAbsXMovesRightOnly) ; dwI++ ; #if 0 // *SimulateXMove: mMainKeywordTable[dwI].pstrKeyword = "SimulateXMove" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_SIMULATEXMOVE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrSimulateXMove) ; dwI++ ; #endif // *EjectPageWithFF?: mMainKeywordTable[dwI].pstrKeyword = "EjectPageWithFF?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrEjectPageWithFF) ; dwI++ ; // *XMoveThreshold: mMainKeywordTable[dwI].pstrKeyword = "XMoveThreshold" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrXMoveThreshold) ; dwI++ ; // *YMoveThreshold: mMainKeywordTable[dwI].pstrKeyword = "YMoveThreshold" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrYMoveThreshold) ; dwI++ ; // *XMoveUnit: mMainKeywordTable[dwI].pstrKeyword = "XMoveUnit" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrXMoveUnits) ; dwI++ ; // *YMoveUnit: mMainKeywordTable[dwI].pstrKeyword = "YMoveUnit" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrYMoveUnits) ; dwI++ ; // *LineSpacingMoveUnit: mMainKeywordTable[dwI].pstrKeyword = "LineSpacingMoveUnit" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrLineSpacingMoveUnit) ; dwI++ ; return dwI ; } DWORD DWinitMainKeywordTable3( DWORD dwI, PGLOBL pglobl) { // // Color related information // // *ChangeColorModeOnPage?: mMainKeywordTable[dwI].pstrKeyword = "ChangeColorModeOnPage?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrChangeColorMode) ; dwI++ ; // *ChangeColorModeOnDoc?: mMainKeywordTable[dwI].pstrKeyword = "ChangeColorModeOnDoc?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrChangeColorModeDoc) ; dwI++ ; // *MagentaInCyanDye: mMainKeywordTable[dwI].pstrKeyword = "MagentaInCyanDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMagentaInCyanDye) ; dwI++ ; // *YellowInCyanDye: mMainKeywordTable[dwI].pstrKeyword = "YellowInCyanDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrYellowInCyanDye) ; dwI++ ; // *CyanInMagentaDye: mMainKeywordTable[dwI].pstrKeyword = "CyanInMagentaDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCyanInMagentaDye) ; dwI++ ; // *YellowInMagentaDye: mMainKeywordTable[dwI].pstrKeyword = "YellowInMagentaDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrYellowInMagentaDye) ; dwI++ ; // *CyanInYellowDye: mMainKeywordTable[dwI].pstrKeyword = "CyanInYellowDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCyanInYellowDye) ; dwI++ ; // *MagentaInYellowDye: mMainKeywordTable[dwI].pstrKeyword = "MagentaInYellowDye" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMagentaInYellowDye) ; dwI++ ; // *UseExpColorSelectCmd?: mMainKeywordTable[dwI].pstrKeyword = "UseExpColorSelectCmd?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrUseColorSelectCmd) ; dwI++ ; // *MoveToX0BeforeSetColor?: mMainKeywordTable[dwI].pstrKeyword = "MoveToX0BeforeSetColor?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMoveToX0BeforeColor) ; dwI++ ; // *EnableGDIColorMapping?: mMainKeywordTable[dwI].pstrKeyword = "EnableGDIColorMapping?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrEnableGDIColorMapping) ; dwI++ ; // obsolete fields // *MaxNumPalettes: mMainKeywordTable[dwI].pstrKeyword = "MaxNumPalettes" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxNumPalettes) ; dwI++ ; #if 0 // *PaletteSizes: mMainKeywordTable[dwI].pstrKeyword = "PaletteSizes" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPaletteSizes) ; dwI++ ; // *PaletteScope: mMainKeywordTable[dwI].pstrKeyword = "PaletteScope" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PALETTESCOPE ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrPaletteScope) ; dwI++ ; #endif // *MinOverlayID: mMainKeywordTable[dwI].pstrKeyword = "MinOverlayID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMinOverlayID) ; dwI++ ; // *MaxOverlayID: mMainKeywordTable[dwI].pstrKeyword = "MaxOverlayID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxOverlayID) ; dwI++ ; // *OptimizeLeftBound?: mMainKeywordTable[dwI].pstrKeyword = "OptimizeLeftBound?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrOptimizeLeftBound) ; dwI++ ; // *StripBlanks: mMainKeywordTable[dwI].pstrKeyword = "StripBlanks" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_STRIPBLANKS ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrStripBlanks) ; dwI++ ; // *LandscapeGrxRotation: mMainKeywordTable[dwI].pstrKeyword = "LandscapeGrxRotation" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_LANDSCAPEGRXROTATION ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrLandscapeGrxRotation) ; dwI++ ; // *RasterZeroFill?: mMainKeywordTable[dwI].pstrKeyword = "RasterZeroFill?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRasterZeroFill) ; dwI++ ; // *RasterSendAllData?: mMainKeywordTable[dwI].pstrKeyword = "RasterSendAllData?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRasterSendAllData) ; dwI++ ; // *SendMultipleRows?: mMainKeywordTable[dwI].pstrKeyword = "SendMultipleRows?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrSendMultipleRows) ; dwI++ ; // *MaxMultipleRowBytes: mMainKeywordTable[dwI].pstrKeyword = "MaxMultipleRowBytes" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxMultipleRowBytes) ; dwI++ ; // *CursorXAfterSendBlockData: mMainKeywordTable[dwI].pstrKeyword = "CursorXAfterSendBlockData" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CURSORXAFTERSENDBLOCKDATA ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCursorXAfterSendBlockData) ; dwI++ ; // *CursorYAfterSendBlockData: mMainKeywordTable[dwI].pstrKeyword = "CursorYAfterSendBlockData" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CURSORYAFTERSENDBLOCKDATA ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCursorYAfterSendBlockData) ; dwI++ ; // *MirrorRasterByte?: mMainKeywordTable[dwI].pstrKeyword = "MirrorRasterByte?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMirrorRasterByte) ; dwI++ ; // *MirrorRasterPage? mMainKeywordTable[dwI].pstrKeyword = "MirrorRasterPage?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMirrorRasterPage) ; dwI++ ; // *DeviceFonts: formerly known as *Font: mMainKeywordTable[dwI].pstrKeyword = "DeviceFonts" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_ADDITIVE ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDeviceFontsList ) ; dwI++ ; // *DefaultFont: mMainKeywordTable[dwI].pstrKeyword = "DefaultFont" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDefaultFont) ; dwI++ ; // *TTFSEnabled?: mMainKeywordTable[dwI].pstrKeyword = "TTFSEnabled?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrTTFSEnabled ) ; dwI++ ; // *RestoreDefaultFont?: mMainKeywordTable[dwI].pstrKeyword = "RestoreDefaultFont?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRestoreDefaultFont) ; dwI++ ; // *DefaultCTT: mMainKeywordTable[dwI].pstrKeyword = "DefaultCTT" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDefaultCTT) ; dwI++ ; // *MaxFontUsePerPage: mMainKeywordTable[dwI].pstrKeyword = "MaxFontUsePerPage" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxFontUsePerPage) ; dwI++ ; // *RotateFont?: mMainKeywordTable[dwI].pstrKeyword = "RotateFont?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrRotateFont) ; dwI++ ; // *TextYOffset: mMainKeywordTable[dwI].pstrKeyword = "TextYOffset" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrTextYOffset) ; dwI++ ; // *CharPosition: mMainKeywordTable[dwI].pstrKeyword = "CharPosition" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CHARPOSITION ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCharPosition) ; dwI++ ; // ------- Font Downloading // *MinFontID: mMainKeywordTable[dwI].pstrKeyword = "MinFontID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMinFontID) ; dwI++ ; // *MaxFontID: mMainKeywordTable[dwI].pstrKeyword = "MaxFontID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxFontID) ; dwI++ ; // *MaxNumDownFonts: mMainKeywordTable[dwI].pstrKeyword = "MaxNumDownFonts" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxNumDownFonts) ; dwI++ ; // *DLSymbolSet: mMainKeywordTable[dwI].pstrKeyword = "DLSymbolSet" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_DLSYMBOLSET ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDLSymbolSet) ; dwI++ ; // *MinGlyphID: mMainKeywordTable[dwI].pstrKeyword = "MinGlyphID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMinGlyphID) ; dwI++ ; // *MaxGlyphID: mMainKeywordTable[dwI].pstrKeyword = "MaxGlyphID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxGlyphID) ; dwI++ ; // *IncrementalDownload?: mMainKeywordTable[dwI].pstrKeyword = "IncrementalDownload?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrIncrementalDownload) ; dwI++ ; // *FontFormat: mMainKeywordTable[dwI].pstrKeyword = "FontFormat" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_FONTFORMAT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrFontFormat) ; dwI++ ; // *MemoryUsage: mMainKeywordTable[dwI].pstrKeyword = "MemoryUsage" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMemoryForFontsOnly) ; dwI++ ; // *DiffFontsPerByteMode?: mMainKeywordTable[dwI].pstrKeyword = "DiffFontsPerByteMode?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrDiffFontsPerByteMode) ; dwI++ ; // ----- // *CursorXAfterRectFill: mMainKeywordTable[dwI].pstrKeyword = "CursorXAfterRectFill" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CURXAFTER_RECTFILL ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCursorXAfterRectFill) ; dwI++ ; // *CursorYAfterRectFill: mMainKeywordTable[dwI].pstrKeyword = "CursorYAfterRectFill" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_CURYAFTER_RECTFILL ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrCursorYAfterRectFill) ; dwI++ ; // *MinGrayFill: mMainKeywordTable[dwI].pstrKeyword = "MinGrayFill" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMinGrayFill) ; dwI++ ; // *MaxGrayFill: mMainKeywordTable[dwI].pstrKeyword = "MaxGrayFill" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrMaxGrayFill) ; dwI++ ; // *TextHalftoneThreshold: mMainKeywordTable[dwI].pstrKeyword = "TextHalftoneThreshold" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_GLOBAL_FREEFLOAT ; mMainKeywordTable[dwI].dwOffset = offsetof(GLOBALATTRIB, atrTextHalftoneThreshold) ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; return dwI ; } DWORD DWinitMainKeywordTable4( DWORD dwI, PGLOBL pglobl) { /* ---- FEATURE Construct keywords: ----- */ // *FeatureType: mMainKeywordTable[dwI].pstrKeyword = "FeatureType" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_FEATURETYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeatureType) ; dwI++ ; // *UIType: aka PickMany? mMainKeywordTable[dwI].pstrKeyword = "UIType" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_UITYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrUIType) ; dwI++ ; // *DefaultOption: mMainKeywordTable[dwI].pstrKeyword = "DefaultOption" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_SYMBOL_OPTIONS ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDefaultOption) ; dwI++ ; // *ConflictPriority: mMainKeywordTable[dwI].pstrKeyword = "ConflictPriority" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPriority ) ; dwI++ ; // *Installable?: mMainKeywordTable[dwI].pstrKeyword = "Installable?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaInstallable) ; dwI++ ; // *InstallableFeatureName: mMainKeywordTable[dwI].pstrKeyword = "InstallableFeatureName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrInstallableFeaDisplayName ) ; dwI++ ; // *rcInstallableFeatureNameID: mMainKeywordTable[dwI].pstrKeyword = "rcInstallableFeatureNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrInstallableFeaRcNameID) ; dwI++ ; // *Name: mMainKeywordTable[dwI].pstrKeyword = "Name" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaDisplayName ) ; dwI++ ; // *rcNameID: mMainKeywordTable[dwI].pstrKeyword = "rcNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaRcNameID) ; dwI++ ; // *rcIconID: mMainKeywordTable[dwI].pstrKeyword = "rcIconID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaRcIconID) ; dwI++ ; // *rcHelpTextID: mMainKeywordTable[dwI].pstrKeyword = "rcHelpTextID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaRcHelpTextID) ; dwI++ ; // *rcPromptMsgID: mMainKeywordTable[dwI].pstrKeyword = "rcPromptMsgID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaRcPromptMsgID) ; dwI++ ; // *rcPromptTime: mMainKeywordTable[dwI].pstrKeyword = "rcPromptTime" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PROMPTTIME ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaRcPromptTime) ; dwI++ ; // *ConcealFromUI?: mMainKeywordTable[dwI].pstrKeyword = "ConcealFromUI?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrConcealFromUI) ; dwI++ ; // *UpdateQualityMacro?: mMainKeywordTable[dwI].pstrKeyword = "UpdateQualityMacro?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrUpdateQualityMacro) ; dwI++ ; // *HelpIndex: mMainKeywordTable[dwI].pstrKeyword = "HelpIndex" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaHelpIndex) ; dwI++ ; // *QueryOptionList: BUG_BUG! not supported in 5.0 mMainKeywordTable[dwI].pstrKeyword = "QueryOptionList" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrQueryOptionList) ; dwI++ ; // *QueryDataType: mMainKeywordTable[dwI].pstrKeyword = "QueryDataType" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_QUERYDATATYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrQueryDataType) ; dwI++ ; // *QueryDefaultOption: BUG_BUG! not supported in 5.0 mMainKeywordTable[dwI].pstrKeyword = "QueryDefaultOption" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrQueryDefaultOption) ; dwI++ ; // *InstalledConstraints: mMainKeywordTable[dwI].pstrKeyword = "InstalledConstraints" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTRAINT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaInstallConstraints) ; dwI++ ; // *NotInstalledConstraints: mMainKeywordTable[dwI].pstrKeyword = "NotInstalledConstraints" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTRAINT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FEATURE_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeaNotInstallConstraints) ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; /* ---- OPTION Construct keywords: ----- */ // *Installable?: mMainKeywordTable[dwI].pstrKeyword = "Installable?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptInstallable) ; dwI++ ; // *InstallableFeatureName: mMainKeywordTable[dwI].pstrKeyword = "InstallableFeatureName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrInstallableOptDisplayName ) ; dwI++ ; // *rcInstallableFeatureNameID: mMainKeywordTable[dwI].pstrKeyword = "rcInstallableFeatureNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrInstallableOptRcNameID) ; dwI++ ; // *Name: mMainKeywordTable[dwI].pstrKeyword = "Name" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptDisplayName ) ; gdwOptionName = dwI ; dwI++ ; // *rcNameID: mMainKeywordTable[dwI].pstrKeyword = "rcNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptRcNameID) ; dwI++ ; // *rcIconID: mMainKeywordTable[dwI].pstrKeyword = "rcIconID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptRcIconID) ; dwI++ ; // *rcHelpTextID: mMainKeywordTable[dwI].pstrKeyword = "rcHelpTextID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptRcHelpTextID) ; dwI++ ; // *HelpIndex: mMainKeywordTable[dwI].pstrKeyword = "HelpIndex" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptHelpIndex) ; dwI++ ; // *rcPromptMsgID: mMainKeywordTable[dwI].pstrKeyword = "rcPromptMsgID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptRcPromptMsgID) ; dwI++ ; // *rcPromptTime: mMainKeywordTable[dwI].pstrKeyword = "rcPromptTime" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PROMPTTIME ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptRcPromptTime) ; dwI++ ; // *Constraints: mMainKeywordTable[dwI].pstrKeyword = "Constraints" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTRAINT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrConstraints) ; dwI++ ; // *InstalledConstraints: mMainKeywordTable[dwI].pstrKeyword = "InstalledConstraints" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTRAINT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptInstallConstraints) ; dwI++ ; // *NotInstalledConstraints: mMainKeywordTable[dwI].pstrKeyword = "NotInstalledConstraints" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTRAINT ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptNotInstallConstraints) ; dwI++ ; // *OptionID: mMainKeywordTable[dwI].pstrKeyword = "OptionID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOptIDvalue) ; dwI++ ; // *DisabledFeatures: mMainKeywordTable[dwI].pstrKeyword = "DisabledFeatures" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARTIALLY_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_ADDITIVE ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDisabledFeatures) ; dwI++ ; #ifdef GMACROS // *DependentSettings: mMainKeywordTable[dwI].pstrKeyword = "DependentSettings" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_CHAIN ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDependentSettings) ; dwI++ ; // *UIChangeTriggersMacro: mMainKeywordTable[dwI].pstrKeyword = "UIChangeTriggersMacro" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME ; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_CHAIN ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrUIChangeTriggersMacro) ; dwI++ ; #endif // -- Option specific keywords -- // // *PrintableArea: mMainKeywordTable[dwI].pstrKeyword = "PrintableArea" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPrintableSize) ; dwI++ ; // *PrintableOrigin: mMainKeywordTable[dwI].pstrKeyword = "PrintableOrigin" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPrintableOrigin) ; dwI++ ; // *CursorOrigin: mMainKeywordTable[dwI].pstrKeyword = "CursorOrigin" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCursorOrigin) ; dwI++ ; // *VectorOffset: mMainKeywordTable[dwI].pstrKeyword = "VectorOffset" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrVectorOffset) ; dwI++ ; // *MinSize: mMainKeywordTable[dwI].pstrKeyword = "MinSize" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMinSize) ; dwI++ ; // *MaxSize: mMainKeywordTable[dwI].pstrKeyword = "MaxSize" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMaxSize) ; dwI++ ; // *TopMargin: mMainKeywordTable[dwI].pstrKeyword = "TopMargin" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrTopMargin) ; dwI++ ; // *BottomMargin: mMainKeywordTable[dwI].pstrKeyword = "BottomMargin" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrBottomMargin) ; dwI++ ; // *MaxPrintableWidth: mMainKeywordTable[dwI].pstrKeyword = "MaxPrintableWidth" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMaxPrintableWidth) ; dwI++ ; // *MinLeftMargin: mMainKeywordTable[dwI].pstrKeyword = "MinLeftMargin" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMinLeftMargin) ; dwI++ ; // *CenterPrintable?: mMainKeywordTable[dwI].pstrKeyword = "CenterPrintable?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCenterPrintable) ; dwI++ ; // *PageDimensions: mMainKeywordTable[dwI].pstrKeyword = "PageDimensions" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPageDimensions) ; dwI++ ; // *RotateSize?: mMainKeywordTable[dwI].pstrKeyword = "RotateSize?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrRotateSize) ; dwI++ ; // *PortRotationAngle: mMainKeywordTable[dwI].pstrKeyword = "PortRotationAngle" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPortRotationAngle) ; dwI++ ; // *PageProtectMem: mMainKeywordTable[dwI].pstrKeyword = "PageProtectMem" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPageProtectMem) ; dwI++ ; // *CustCursorOriginX: mMainKeywordTable[dwI].pstrKeyword = "CustCursorOriginX" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustCursorOriginX) ; dwI++ ; // *CustCursorOriginY: mMainKeywordTable[dwI].pstrKeyword = "CustCursorOriginY" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustCursorOriginY) ; dwI++ ; // *CustPrintableOriginX: mMainKeywordTable[dwI].pstrKeyword = "CustPrintableOriginX" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustPrintableOriginX) ; dwI++ ; // *CustPrintableOriginY: mMainKeywordTable[dwI].pstrKeyword = "CustPrintableOriginY" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustPrintableOriginY) ; dwI++ ; // *CustPrintableSizeX: mMainKeywordTable[dwI].pstrKeyword = "CustPrintableSizeX" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustPrintableSizeX) ; dwI++ ; // *CustPrintableSizeY: mMainKeywordTable[dwI].pstrKeyword = "CustPrintableSizeY" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_PARAMETER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrCustPrintableSizeY) ; dwI++ ; // *FeedMargins: mMainKeywordTable[dwI].pstrKeyword = "FeedMargins" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrFeedMargins) ; dwI++ ; // *PaperFeed: mMainKeywordTable[dwI].pstrKeyword = "PaperFeed" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_PAPERFEED_ORIENT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPaperFeed) ; dwI++ ; // *DPI: mMainKeywordTable[dwI].pstrKeyword = "DPI" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDPI) ; dwI++ ; // *SpotDiameter: mMainKeywordTable[dwI].pstrKeyword = "SpotDiameter" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrSpotDiameter) ; dwI++ ; // *TextDPI: mMainKeywordTable[dwI].pstrKeyword = "TextDPI" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrTextDPI) ; dwI++ ; // *PinsPerPhysPass: mMainKeywordTable[dwI].pstrKeyword = "PinsPerPhysPass" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPinsPerPhysPass) ; dwI++ ; // *PinsPerLogPass: mMainKeywordTable[dwI].pstrKeyword = "PinsPerLogPass" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPinsPerLogPass) ; dwI++ ; // *RequireUniDir?: mMainKeywordTable[dwI].pstrKeyword = "RequireUniDir?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrRequireUniDir) ; dwI++ ; // *MinStripBlankPixels: mMainKeywordTable[dwI].pstrKeyword = "MinStripBlankPixels" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMinStripBlankPixels) ; dwI++ ; // *RedDeviceGamma: mMainKeywordTable[dwI].pstrKeyword = "RedDeviceGamma" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrRedDeviceGamma) ; dwI++ ; // *GreenDeviceGamma: mMainKeywordTable[dwI].pstrKeyword = "GreenDeviceGamma" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrGreenDeviceGamma) ; dwI++ ; // *BlueDeviceGamma: mMainKeywordTable[dwI].pstrKeyword = "BlueDeviceGamma" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_FF ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrBlueDeviceGamma) ; dwI++ ; // *Color?: mMainKeywordTable[dwI].pstrKeyword = "Color?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrColor) ; dwI++ ; // *DevNumOfPlanes: mMainKeywordTable[dwI].pstrKeyword = "DevNumOfPlanes" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDevNumOfPlanes) ; dwI++ ; // *DevBPP: mMainKeywordTable[dwI].pstrKeyword = "DevBPP" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDevBPP) ; dwI++ ; // *ColorPlaneOrder: mMainKeywordTable[dwI].pstrKeyword = "ColorPlaneOrder" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_COLORPLANE ; mMainKeywordTable[dwI].flAgs = KWF_LIST ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrColorPlaneOrder) ; dwI++ ; // *DrvBPP: mMainKeywordTable[dwI].pstrKeyword = "DrvBPP" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrDrvBPP) ; dwI++ ; // *IPCallbackID: mMainKeywordTable[dwI].pstrKeyword = "IPCallbackID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrIPCallbackID) ; dwI++ ; // *ColorSeparation?: mMainKeywordTable[dwI].pstrKeyword = "ColorSeparation?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrColorSeparation) ; dwI++ ; // *RasterMode: mMainKeywordTable[dwI].pstrKeyword = "RasterMode" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_RASTERMODE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrRasterMode) ; dwI++ ; // *PaletteSize: mMainKeywordTable[dwI].pstrKeyword = "PaletteSize" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPaletteSize) ; dwI++ ; // *PaletteProgrammable?: mMainKeywordTable[dwI].pstrKeyword = "PaletteProgrammable?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrPaletteProgrammable) ; dwI++ ; // *rcHTPatternID: mMainKeywordTable[dwI].pstrKeyword = "rcHTPatternID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrRcHTPatternID) ; dwI++ ; // *HTPatternSize: mMainKeywordTable[dwI].pstrKeyword = "HTPatternSize" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrHTPatternSize) ; dwI++ ; // *HTNumPatterns: mMainKeywordTable[dwI].pstrKeyword = "HTNumPatterns" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrHTNumPatterns) ; dwI++ ; // *HTCallbackID: mMainKeywordTable[dwI].pstrKeyword = "HTCallbackID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrHTCallbackID) ; dwI++ ; // *Luminance: mMainKeywordTable[dwI].pstrKeyword = "Luminance" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrLuminance) ; dwI++ ; // *MemoryConfigKB: mMainKeywordTable[dwI].pstrKeyword = "MemoryConfigKB" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMemoryConfigKB) ; gdwMemoryConfigKB = dwI ; dwI++ ; // *MemoryConfigMB: mMainKeywordTable[dwI].pstrKeyword = "MemoryConfigMB" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_POINT ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrMemoryConfigMB) ; gdwMemoryConfigMB = dwI ; dwI++ ; // *OutputOrderReversed?: mMainKeywordTable[dwI].pstrKeyword = "OutputOrderReversed?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = 0 ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_OPTION_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(DFEATURE_OPTIONS, atrOutputOrderReversed) ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; return dwI ; } DWORD DWinitMainKeywordTable5( DWORD dwI, PGLOBL pglobl) { /* ---- COMMAND Construct keywords: ----- */ // *Cmd: mMainKeywordTable[dwI].pstrKeyword = "Cmd" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_COMMAND_INVOC ; mMainKeywordTable[dwI].flAgs = KWF_COMMAND ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_COMMAND_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(COMMAND, strInvocation ) ; gdwCommandCmd = dwI ; dwI++ ; // *CallbackID: mMainKeywordTable[dwI].pstrKeyword = "CallbackID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER; mMainKeywordTable[dwI].flAgs = KWF_COMMAND ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_COMMAND_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(COMMAND, dwCmdCallbackID ) ; dwI++ ; // *Order: mMainKeywordTable[dwI].pstrKeyword = "Order" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_ORDERDEPENDENCY; mMainKeywordTable[dwI].flAgs = KWF_COMMAND ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_COMMAND_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(COMMAND, ordOrder ) ; dwI++ ; // *Params: mMainKeywordTable[dwI].pstrKeyword = "Params" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_STANDARD_VARS ; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_COMMAND ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_COMMAND_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(COMMAND, dwStandardVarsList) ; dwI++ ; // *NoPageEject?: mMainKeywordTable[dwI].pstrKeyword = "NoPageEject?" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_CONSTANT_BOOLEANTYPE ; mMainKeywordTable[dwI].flAgs = KWF_COMMAND ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_COMMAND_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(COMMAND, bNoPageEject) ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; /* ---- FONTCART Construct keywords: ----- */ // *rcCartridgeNameID: mMainKeywordTable[dwI].pstrKeyword = "rcCartridgeNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = KWF_FONTCART ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FONTCART_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(FONTCART , dwRCCartNameID ) ; dwI++ ; // *CartridgeName: mMainKeywordTable[dwI].pstrKeyword = "CartridgeName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT; mMainKeywordTable[dwI].flAgs = KWF_FONTCART ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FONTCART_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(FONTCART , strCartName ) ; dwI++ ; // *Fonts: mMainKeywordTable[dwI].pstrKeyword = "Fonts" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_FONTCART ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FONTCART_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(FONTCART , dwFontLst ) ; dwI++ ; // *PortraitFonts: mMainKeywordTable[dwI].pstrKeyword = "PortraitFonts" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_FONTCART ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FONTCART_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(FONTCART , dwPortFontLst ) ; dwI++ ; // *LandscapeFonts: mMainKeywordTable[dwI].pstrKeyword = "LandscapeFonts" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX; mMainKeywordTable[dwI].flAgs = KWF_LIST | KWF_FONTCART ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_FONTCART_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(FONTCART , dwLandFontLst ) ; dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; /* ---- TTFONTSUBS Construct keywords: ----- */ // these keywords may be synthesized along with the construct // *TTFontSub from the shortcut: // *TTFS: "font name" : // *TTFontName: mMainKeywordTable[dwI].pstrKeyword = "TTFontName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = KWF_TTFONTSUBS ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_TTFONTSUBS_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(TTFONTSUBTABLE, arTTFontName) ; dwI++ ; // *DevFontName: mMainKeywordTable[dwI].pstrKeyword = "DevFontName" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_STRING_CP_CONVERT ; mMainKeywordTable[dwI].flAgs = KWF_TTFONTSUBS ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_TTFONTSUBS_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(TTFONTSUBTABLE, arDevFontName) ; dwI++ ; // *rcTTFontNameID: mMainKeywordTable[dwI].pstrKeyword = "rcTTFontNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = KWF_TTFONTSUBS ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_TTFONTSUBS_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(TTFONTSUBTABLE, dwRcTTFontNameID) ; dwI++ ; // *rcDevFontNameID: mMainKeywordTable[dwI].pstrKeyword = "rcDevFontNameID" ; mMainKeywordTable[dwI].eAllowedValue = VALUE_QUALIFIED_NAME_EX ; mMainKeywordTable[dwI].flAgs = KWF_TTFONTSUBS ; mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_TTFONTSUBS_ONLY ; mMainKeywordTable[dwI].dwOffset = offsetof(TTFONTSUBTABLE, dwRcDevFontNameID) ; dwI++ ; // *DevFontID: // mMainKeywordTable[dwI].pstrKeyword = "DevFontID" ; // mMainKeywordTable[dwI].eAllowedValue = VALUE_INTEGER ; // mMainKeywordTable[dwI].flAgs = KWF_TTFONTSUBS ; // mMainKeywordTable[dwI].eType = TY_ATTRIBUTE ; // mMainKeywordTable[dwI].dwSubType = ATT_LOCAL_TTFONTSUBS_ONLY ; // mMainKeywordTable[dwI].dwOffset = offsetof(TTFONTSUBTABLE, dwDevFontID) ; // dwI++ ; // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; /* ---- OEM Construct keywords: ----- */ // ---- End of Section ---- // mMainKeywordTable[dwI].pstrKeyword = NULL ; dwI++ ; /* ---- END_ATTR No more Construct keywords: ----- */ return dwI ; } VOID VinitValueToSize( PGLOBL pglobl) { DWORD dwI ; // initialize to DWORD size as defaults. for(dwI = 0 ; dwI < VALUE_MAX ; dwI++) gValueToSize[dwI] = sizeof(DWORD) ; gValueToSize[NO_VALUE] = 0 ; gValueToSize[VALUE_LARGEST] = 0 ; gValueToSize[VALUE_STRING_NO_CONVERT] = sizeof(ARRAYREF) ; gValueToSize[VALUE_STRING_DEF_CONVERT] = sizeof(ARRAYREF) ; gValueToSize[VALUE_STRING_CP_CONVERT] = sizeof(ARRAYREF) ; gValueToSize[VALUE_COMMAND_INVOC] = sizeof(ARRAYREF) ; gValueToSize[VALUE_PARAMETER] = sizeof(ARRAYREF) ; // SYMBOLS and CONSTANTS are all DWORD sized. gValueToSize[VALUE_POINT] = sizeof(POINT) ; // etc gValueToSize[VALUE_RECT] = sizeof(RECT) ; // etc gValueToSize[VALUE_QUALIFIED_NAME] = sizeof(DWORD) ; // currently // VALUE_CONSTRAINT, VALUE_INVALID_INSTALL_COMBO // are currently all accessed via DWORD indicies to nodes. gValueToSize[VALUE_ORDERDEPENDENCY] = sizeof(ORDERDEPENDENCY) ; gValueToSize[VALUE_FONTSUB] = sizeof(TTFONTSUBTABLE) ; // not really used since its a special keyword. gValueToSize[VALUE_LIST] = sizeof(DWORD) ; // etc // only the index of first listnode is stored. for(dwI = 0 ; dwI < VALUE_MAX ; dwI++) { if(gValueToSize[dwI] > gValueToSize[VALUE_LARGEST]) gValueToSize[VALUE_LARGEST] = gValueToSize[dwI] ; } } VOID VinitGlobals( DWORD dwVerbosity, PGLOBL pglobl) { DWORD dwIndex; CONST PBYTE pubStar = "*"; // Used for initializing gaarPPPrefix if(MAX_GID > 32) RIP(("MAX_GID > 32 violates some GPD parser assumptions.\n")); memset(pglobl, 0, sizeof(GLOBL)); // initialize all globals to default state. geErrorType = ERRTY_NONE ; // start with a clean slate geErrorSev = ERRSEV_NONE ; // check. Adding initializations that were previously done when variables were global gdwResDLL_ID = 0 ; // no Feature yet defined to hold Resource DLLs. gdwVerbosity = dwVerbosity ; // 0 = min verbosity, 4 max verbosity. // set preprocessor prefix to '*' gaarPPPrefix.pub = pubStar; gaarPPPrefix.dw = 1; VinitValueToSize(pglobl) ; // size of value links. VinitAllowedTransitions(pglobl) ; // AllowedTransitions and Attributes (VOID) BinitClassIndexTable(pglobl) ; // gcieTable[] constant classes. VinitOperPrecedence(pglobl) ; // arithmetic operators used in command // parameters. // no memory buffers allocated. for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { gMasterTable[dwIndex].pubStruct = NULL ; } gMasterTable[MTI_STRINGHEAP].dwArraySize = 0x010000 ; gMasterTable[MTI_STRINGHEAP].dwMaxArraySize = 0x200000 ; gMasterTable[MTI_STRINGHEAP].dwElementSiz = sizeof(BYTE) ; gMasterTable[MTI_GLOBALATTRIB].dwArraySize = 1 ; gMasterTable[MTI_GLOBALATTRIB].dwMaxArraySize = 1 ; gMasterTable[MTI_GLOBALATTRIB].dwElementSiz = sizeof(GLOBALATTRIB) ; gMasterTable[MTI_COMMANDTABLE].dwArraySize = CMD_MAX ; gMasterTable[MTI_COMMANDTABLE].dwMaxArraySize = CMD_MAX ; gMasterTable[MTI_COMMANDTABLE].dwElementSiz = sizeof(ATREEREF) ; gMasterTable[MTI_ATTRIBTREE].dwArraySize = 5000 ; gMasterTable[MTI_ATTRIBTREE].dwMaxArraySize = 50,000 ; gMasterTable[MTI_ATTRIBTREE].dwElementSiz = sizeof(ATTRIB_TREE) ; gMasterTable[MTI_COMMANDARRAY].dwArraySize = 500 ; gMasterTable[MTI_COMMANDARRAY].dwMaxArraySize = 5000 ; gMasterTable[MTI_COMMANDARRAY].dwElementSiz = sizeof(COMMAND) ; gMasterTable[MTI_PARAMETER].dwArraySize = 500 ; gMasterTable[MTI_PARAMETER].dwMaxArraySize = 5000 ; gMasterTable[MTI_PARAMETER].dwElementSiz = sizeof(PARAMETER) ; gMasterTable[MTI_TOKENSTREAM].dwArraySize = 3000 ; gMasterTable[MTI_TOKENSTREAM].dwMaxArraySize = 30000 ; gMasterTable[MTI_TOKENSTREAM].dwElementSiz = sizeof(TOKENSTREAM) ; gMasterTable[MTI_LISTNODES].dwArraySize = 3000 ; gMasterTable[MTI_LISTNODES].dwMaxArraySize = 50000 ; gMasterTable[MTI_LISTNODES].dwElementSiz = sizeof(LISTNODE) ; gMasterTable[MTI_CONSTRAINTS].dwArraySize = 300 ; gMasterTable[MTI_CONSTRAINTS].dwMaxArraySize = 5000 ; gMasterTable[MTI_CONSTRAINTS].dwElementSiz = sizeof(CONSTRAINTS) ; gMasterTable[MTI_INVALIDCOMBO].dwArraySize = 40 ; gMasterTable[MTI_INVALIDCOMBO].dwMaxArraySize = 500 ; gMasterTable[MTI_INVALIDCOMBO].dwElementSiz = sizeof(INVALIDCOMBO ) ; gMasterTable[MTI_GPDFILEDATEINFO].dwArraySize = 10 ; gMasterTable[MTI_GPDFILEDATEINFO].dwMaxArraySize = 100 ; gMasterTable[MTI_GPDFILEDATEINFO].dwElementSiz = sizeof(GPDFILEDATEINFO ) ; /* set dwArraySize = 0 for objects that are allocated on 2nd pass */ gMasterTable[MTI_DFEATURE_OPTIONS].dwArraySize = 0 ; gMasterTable[MTI_DFEATURE_OPTIONS].dwMaxArraySize = 300 ; gMasterTable[MTI_DFEATURE_OPTIONS].dwElementSiz = sizeof(DFEATURE_OPTIONS) ; gMasterTable[MTI_SYNTHESIZED_FEATURES].dwArraySize = 0 ; gMasterTable[MTI_SYNTHESIZED_FEATURES].dwMaxArraySize = 100 ; gMasterTable[MTI_SYNTHESIZED_FEATURES].dwElementSiz = sizeof(DFEATURE_OPTIONS) ; gMasterTable[MTI_PRIORITYARRAY].dwArraySize = 0 ; gMasterTable[MTI_PRIORITYARRAY].dwMaxArraySize = gMasterTable[MTI_DFEATURE_OPTIONS].dwMaxArraySize + gMasterTable[MTI_SYNTHESIZED_FEATURES].dwMaxArraySize ; gMasterTable[MTI_PRIORITYARRAY].dwElementSiz = sizeof(DWORD) ; gMasterTable[MTI_TTFONTSUBTABLE].dwArraySize = 0 ; gMasterTable[MTI_TTFONTSUBTABLE].dwMaxArraySize = 1000 ; gMasterTable[MTI_TTFONTSUBTABLE].dwElementSiz = sizeof(TTFONTSUBTABLE) ; gMasterTable[MTI_FONTCART].dwArraySize = 0 ; gMasterTable[MTI_FONTCART].dwMaxArraySize = 500 ; gMasterTable[MTI_FONTCART].dwElementSiz = sizeof(FONTCART) ; gMasterTable[MTI_SYMBOLROOT].dwArraySize = SCL_NUMSYMCLASSES ; gMasterTable[MTI_SYMBOLROOT].dwMaxArraySize = SCL_NUMSYMCLASSES ; gMasterTable[MTI_SYMBOLROOT].dwElementSiz = sizeof(DWORD) ; gMasterTable[MTI_SYMBOLTREE].dwArraySize = 1500 ; gMasterTable[MTI_SYMBOLTREE].dwMaxArraySize = 16000 ; gMasterTable[MTI_SYMBOLTREE].dwElementSiz = sizeof(SYMBOLNODE) ; gMasterTable[MTI_TMPHEAP].dwArraySize = 0x010000 ; gMasterTable[MTI_TMPHEAP].dwMaxArraySize = 0x200000 ; gMasterTable[MTI_TMPHEAP].dwElementSiz = sizeof(BYTE) ; gMasterTable[MTI_SOURCEBUFFER].dwArraySize = 10 ; gMasterTable[MTI_SOURCEBUFFER].dwMaxArraySize = 100 ; gMasterTable[MTI_SOURCEBUFFER].dwElementSiz = sizeof(SOURCEBUFFER) ; // NEWTOKENMAP is created from unused entries in TOKENMAP. gMasterTable[MTI_TOKENMAP].dwArraySize = 0x3000 ; gMasterTable[MTI_TOKENMAP].dwMaxArraySize = 0x40000 ; gMasterTable[MTI_TOKENMAP].dwElementSiz = sizeof(TKMAP) ; gMasterTable[MTI_NEWTOKENMAP].dwArraySize = 0x3000 ; gMasterTable[MTI_NEWTOKENMAP].dwMaxArraySize = 0x40000 ; gMasterTable[MTI_NEWTOKENMAP].dwElementSiz = sizeof(TKMAP) ; gMasterTable[MTI_BLOCKMACROARRAY].dwArraySize = 200 ; gMasterTable[MTI_BLOCKMACROARRAY].dwMaxArraySize = 3000 ; gMasterTable[MTI_BLOCKMACROARRAY].dwElementSiz = sizeof(BLOCKMACRODICTENTRY) ; gMasterTable[MTI_VALUEMACROARRAY].dwArraySize = 800 ; gMasterTable[MTI_VALUEMACROARRAY].dwMaxArraySize = 4000 ; gMasterTable[MTI_VALUEMACROARRAY].dwElementSiz = sizeof(VALUEMACRODICTENTRY) ; gMasterTable[MTI_MACROLEVELSTACK].dwArraySize = 20 ; gMasterTable[MTI_MACROLEVELSTACK].dwMaxArraySize = 60 ; gMasterTable[MTI_MACROLEVELSTACK].dwElementSiz = sizeof(MACROLEVELSTATE) ; gMasterTable[MTI_STSENTRY].dwArraySize = 20 ; gMasterTable[MTI_STSENTRY].dwMaxArraySize = 60 ; gMasterTable[MTI_STSENTRY].dwElementSiz = sizeof(STSENTRY) ; gMasterTable[MTI_OP_QUEUE].dwArraySize = 40 ; gMasterTable[MTI_OP_QUEUE].dwMaxArraySize = 150 ; gMasterTable[MTI_OP_QUEUE].dwElementSiz = sizeof(DWORD) ; gMasterTable[MTI_MAINKEYWORDTABLE].dwArraySize = 400 ; gMasterTable[MTI_MAINKEYWORDTABLE].dwMaxArraySize = 3000 ; gMasterTable[MTI_MAINKEYWORDTABLE].dwElementSiz = sizeof(KEYWORDTABLE_ENTRY) ; gMasterTable[MTI_RNGDICTIONARY].dwArraySize = END_ATTR ; gMasterTable[MTI_RNGDICTIONARY].dwMaxArraySize = END_ATTR ; gMasterTable[MTI_RNGDICTIONARY].dwElementSiz = sizeof(RANGE) ; gMasterTable[MTI_FILENAMES].dwArraySize = 40 ; gMasterTable[MTI_FILENAMES].dwMaxArraySize = 100 ; gMasterTable[MTI_FILENAMES].dwElementSiz = sizeof(PWSTR) ; gMasterTable[MTI_PREPROCSTATE].dwArraySize = 20 ; gMasterTable[MTI_PREPROCSTATE].dwMaxArraySize = 100 ; gMasterTable[MTI_PREPROCSTATE].dwElementSiz = sizeof(PPSTATESTACK) ; } BOOL BpreAllocateObjects( PGLOBL pglobl) { DWORD dwIndex, dwBytes ; /* set dwArraySize = 0 for objects that are allocated on 2nd pass */ gMasterTable[MTI_DFEATURE_OPTIONS].dwArraySize = 0 ; gMasterTable[MTI_SYNTHESIZED_FEATURES].dwArraySize = 0 ; gMasterTable[MTI_PRIORITYARRAY].dwArraySize = 0 ; // allocation occurs at PostProcessing time. gMasterTable[MTI_TTFONTSUBTABLE].dwArraySize = 0 ; gMasterTable[MTI_FONTCART].dwArraySize = 0 ; for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { gMasterTable[dwIndex].dwCurIndex = 0 ; // do initialization first: bug 308404 } for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { if(gMasterTable[dwIndex].dwArraySize) { dwBytes = gMasterTable[dwIndex].dwArraySize * gMasterTable[dwIndex].dwElementSiz ; if(!(gMasterTable[dwIndex].pubStruct = MemAllocZ(dwBytes) )) { ERR(("Fatal: unable to alloc requested memory: %d bytes.\n", dwBytes)); geErrorType = ERRTY_MEMORY_ALLOCATION ; geErrorSev = ERRSEV_FATAL ; gdwMasterTabIndex = dwIndex ; return(FALSE) ; // This is unrecoverable } } } // do not use heap offset zero because OFFSET_TO_POINTER() // macro will consider this an invalid value! gMasterTable[MTI_STRINGHEAP].dwCurIndex = 1 ; return(TRUE) ; } BOOL BreturnBuffers( PGLOBL pglobl) /* FALSE return indicates a go-round is needed. Otherwise you are free to exit caller's loop. */ { DWORD dwIndex ; // better close all the memory mapped files. while(mCurFile) { mCurFile-- ; // pop stack MemFree(mpSourcebuffer[mCurFile].pubSrcBuf) ; } vFreeFileNames(pglobl) ; for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { if(gMasterTable[dwIndex].pubStruct) { MemFree(gMasterTable[dwIndex].pubStruct) ; gMasterTable[dwIndex].pubStruct = NULL ; } } // resize one array if needed. if((geErrorType == ERRTY_MEMORY_ALLOCATION) && (geErrorSev == ERRSEV_RESTART)) { if( gMasterTable[gdwMasterTabIndex].dwArraySize < gMasterTable[gdwMasterTabIndex].dwMaxArraySize ) { DWORD dwInc ; dwInc = gMasterTable[gdwMasterTabIndex].dwArraySize / 2 ; gMasterTable[gdwMasterTabIndex].dwArraySize += (dwInc) ? (dwInc) : 1 ; geErrorSev = ERRSEV_NONE ; // hopefully this fixes // the problem. return(FALSE) ; // go round needed. } else { geErrorSev = ERRSEV_FATAL ; ERR(("Internal error: memory usage exceeded hardcoded limits.\n")); ERR((" %d bytes requested, %d bytes allowed.\n", gMasterTable[gdwMasterTabIndex].dwArraySize, gMasterTable[gdwMasterTabIndex].dwMaxArraySize)); } } return(TRUE); // due to success or utter failure, don't // try anymore. } BOOL BallocateCountableObjects( PGLOBL pglobl) /* The first pass of BinterpretTokens() has registered all the unique symbols for the various constructs. By querying the SymbolID value stored at the root of each symbol tree, we know how many structures of each type to allocate. */ { DWORD dwIndex, dwBytes ; PDWORD pdwSymbolClass ; PSYMBOLNODE psn ; pdwSymbolClass = (PDWORD)gMasterTable[MTI_SYMBOLROOT].pubStruct ; psn = (PSYMBOLNODE) gMasterTable[MTI_SYMBOLTREE].pubStruct ; if(pdwSymbolClass[SCL_FEATURES] != INVALID_INDEX) { gMasterTable[MTI_DFEATURE_OPTIONS].dwArraySize = psn[pdwSymbolClass[SCL_FEATURES]].dwSymbolID + 1 ; } // else no symbols registered - leave dwArraySize = 0 ; if(pdwSymbolClass[SCL_TTFONTNAMES] != INVALID_INDEX) { gMasterTable[MTI_TTFONTSUBTABLE].dwArraySize = psn[pdwSymbolClass[SCL_TTFONTNAMES]].dwSymbolID + 1; } if(pdwSymbolClass[SCL_FONTCART] != INVALID_INDEX) { gMasterTable[MTI_FONTCART].dwArraySize = psn[pdwSymbolClass[SCL_FONTCART]].dwSymbolID + 1; } for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { if(gMasterTable[dwIndex].dwArraySize && !gMasterTable[dwIndex].pubStruct) { dwBytes = gMasterTable[dwIndex].dwArraySize * gMasterTable[dwIndex].dwElementSiz ; if(!(gMasterTable[dwIndex].pubStruct = MemAllocZ(dwBytes) )) { ERR(("Fatal: unable to alloc requested memory: %d bytes.\n", dwBytes)); geErrorType = ERRTY_MEMORY_ALLOCATION ; geErrorSev = ERRSEV_FATAL ; gdwMasterTabIndex = dwIndex ; return(FALSE) ; // This is unrecoverable } else { gMasterTable[dwIndex].dwCurIndex = 0 ; } } } return(TRUE) ; // success ! } BOOL BinitPreAllocatedObjects( PGLOBL pglobl) { DWORD dwI, dwJ ; VinitMainKeywordTable(pglobl) ; // contents of mMainKeywordTable[] itself VinitDictionaryIndex(pglobl) ; // inits MTI_RNGDICTIONARY /* init roots of symbol trees */ for(dwI = 0 ; dwI < gMasterTable[MTI_SYMBOLROOT].dwArraySize ; dwI++) { ((PDWORD)gMasterTable[MTI_SYMBOLROOT].pubStruct)[dwI] = INVALID_INDEX ; } // init preprocessor state stack mdwNestingLevel = 0 ; mppStack[mdwNestingLevel].permState = PERM_ALLOW ; mppStack[mdwNestingLevel].ifState = IFS_ROOT; for(dwI = 0 ; dwI < gMasterTable[MTI_TOKENMAP].dwArraySize ; dwI++) { ((PTKMAP)gMasterTable[MTI_TOKENMAP].pubStruct)[dwI].dwFlags = 0 ; // must start with this field cleared. } for(dwI = 0 ; dwI < gMasterTable[MTI_GLOBALATTRIB].dwArraySize ; dwI++) { for(dwJ = 0 ; dwJ < gMasterTable[MTI_GLOBALATTRIB].dwElementSiz / sizeof(ATREEREF) ; dwJ++) { ((PATREEREF)( (PGLOBALATTRIB)gMasterTable[MTI_GLOBALATTRIB]. pubStruct + dwI))[dwJ] = ATTRIB_UNINITIALIZED ; // the GLOBALATTRIB struct is // comprised entirely of ATREEREFs. } } for(dwI = 0 ; dwI < gMasterTable[MTI_COMMANDARRAY].dwArraySize ; dwI++) { ((PCOMMAND)gMasterTable[MTI_COMMANDARRAY].pubStruct)[dwI]. dwCmdCallbackID = NO_CALLBACK_ID ; ((PCOMMAND)gMasterTable[MTI_COMMANDARRAY].pubStruct)[dwI]. ordOrder.eSection = SS_UNINITIALIZED ; ((PCOMMAND)gMasterTable[MTI_COMMANDARRAY].pubStruct)[dwI]. dwStandardVarsList = END_OF_LIST ; ((PCOMMAND)gMasterTable[MTI_COMMANDARRAY].pubStruct)[dwI]. bNoPageEject = FALSE ; } return(TRUE); } BOOL BinitCountableObjects( PGLOBL pglobl) { DWORD dwI, dwJ ; PFONTCART pfc ; for(dwI = 0 ; dwI < gMasterTable[MTI_DFEATURE_OPTIONS].dwArraySize ; dwI++) { for(dwJ = 0 ; dwJ < gMasterTable[MTI_DFEATURE_OPTIONS].dwElementSiz / sizeof(ATREEREF) ; dwJ++) { ((PATREEREF)( (PDFEATURE_OPTIONS)gMasterTable[MTI_DFEATURE_OPTIONS]. pubStruct + dwI))[dwJ] = ATTRIB_UNINITIALIZED ; // the DFEATURE_OPTIONS struct is // comprised entirely of ATREEREFs. } } for(dwI = 0 ; dwI < gMasterTable[MTI_COMMANDTABLE].dwArraySize ; dwI++) { ((PATREEREF)gMasterTable[MTI_COMMANDTABLE].pubStruct)[dwI] = ATTRIB_UNINITIALIZED ; // the command table is // comprised entirely of ATREEREFs. } pfc = (PFONTCART)gMasterTable[MTI_FONTCART].pubStruct ; for(dwI = 0 ; dwI < gMasterTable[MTI_FONTCART].dwArraySize ; dwI++) { pfc[dwI].dwFontLst = pfc[dwI].dwPortFontLst = pfc[dwI].dwLandFontLst = END_OF_LIST ; } return(TRUE); } #if 0 BOOL BevaluateMacros( PGLOBL pglobl) // and expand shortcuts { // placeholder code - use original tokenMap // BUG_BUG!!!!! just swap the two entries for now. DWORD dwTmp ; PBYTE pubTmp ; dwTmp = gMasterTable[MTI_NEWTOKENMAP].dwArraySize ; gMasterTable[MTI_NEWTOKENMAP].dwArraySize = gMasterTable[MTI_TOKENMAP].dwArraySize ; gMasterTable[MTI_TOKENMAP].dwArraySize = dwTmp ; dwTmp = gMasterTable[MTI_NEWTOKENMAP].dwMaxArraySize ; gMasterTable[MTI_NEWTOKENMAP].dwMaxArraySize = gMasterTable[MTI_TOKENMAP].dwMaxArraySize ; gMasterTable[MTI_TOKENMAP].dwMaxArraySize = dwTmp ; pubTmp = gMasterTable[MTI_NEWTOKENMAP].pubStruct ; gMasterTable[MTI_NEWTOKENMAP].pubStruct = gMasterTable[MTI_TOKENMAP].pubStruct ; gMasterTable[MTI_TOKENMAP].pubStruct = pubTmp ; return(TRUE); } #endif BOOL BpostProcess( PWSTR pwstrFileName, // root GPD file PGLOBL pglobl) { BOOL bStatus ; DWORD dwIndex, dwBytes, dwCount ; PDWORD pdwPriority ; /* check to see that all manditory fields have been initialized, warn otherwise. Have no way to reject entries once allocated. verify that all features referenced in switch statements are pickone. FeatureOption[ptkmap->dwValue].bReferenced = TRUE ; check that these features marked true are always of type PICK_ONE. reflect all constraints in list: if A constrains B, then B constrains A. Of course feature only qualified names are not permitted. so check for this here since we were cheap and used the same parsing routine as for InvalidInstallableCombinations. perform checks like all lists being converted must be of type installable. Lists may be rooted at the feature or option level. the Feature/Options named in the InvalidInstallableCombinations lists must also be *Installable. */ BappendCommonFontsToPortAndLandscape(pglobl) ; BinitSpecialFeatureOptionFields(pglobl) ; gMasterTable[MTI_SYNTHESIZED_FEATURES].dwArraySize = DwCountSynthFeatures(NULL, pglobl) ; gMasterTable[MTI_PRIORITYARRAY].dwArraySize = gMasterTable[MTI_DFEATURE_OPTIONS].dwArraySize + gMasterTable[MTI_SYNTHESIZED_FEATURES].dwArraySize ; for(dwIndex = 0 ; dwIndex < MTI_MAX_ENTRIES ; dwIndex++) { if(gMasterTable[dwIndex].dwArraySize && !gMasterTable[dwIndex].pubStruct) { dwBytes = gMasterTable[dwIndex].dwArraySize * gMasterTable[dwIndex].dwElementSiz ; if(!(gMasterTable[dwIndex].pubStruct = MemAllocZ(dwBytes) )) { ERR(("Fatal: unable to alloc requested memory: %d bytes.\n", dwBytes)); geErrorType = ERRTY_MEMORY_ALLOCATION ; geErrorSev = ERRSEV_FATAL ; gdwMasterTabIndex = dwIndex ; return(FALSE) ; // This is unrecoverable } else { gMasterTable[dwIndex].dwCurIndex = 0 ; } } } if ( !BsetUQMFlag(pglobl)) return FALSE; //There are 2 ways that this function will return false. // 1) When space from the heap cannot be allocated. // Soln: restart. // 2) An unexpected Condition is encountered. // Soln: Fatal. Stop Parsing. VCountPrinterDocStickyFeatures(pglobl) ; (VOID)BConvertSpecVersionToDWORD(pwstrFileName, pglobl) ; BinitMiniRawBinaryData(pglobl) ; DwCountSynthFeatures(BCreateSynthFeatures, pglobl) ; BInitPriorityArray(pglobl) ; // save selected buffers to file bStatus = BconsolidateBuffers(pwstrFileName, pglobl); return(bStatus) ; } BOOL BconsolidateBuffers( PWSTR pwstrFileName, // root GPD file PGLOBL pglobl) { DWORD dwCurOffset , dwI; ENHARRAYREF earTableContents[MTI_NUM_SAVED_OBJECTS] ; PBYTE pubDest ; // points to new destination buffer PWSTR pwstrBinaryFileName ; HANDLE hFile; DWORD dwBytesWritten, dwAlign = 4; // padding for DWORD alignment of all sub buffers. BOOL bResult = FALSE; OPTSELECT optsel[MAX_COMBINED_OPTIONS] ; // assume is large enough WIN32_FILE_ATTRIBUTE_DATA File_Attributes ; // first update dwCurIndex for fixed allocation buffers // since dwCurIndex does not indicate elements used in this // case. dwI = MTI_GLOBALATTRIB ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_DFEATURE_OPTIONS ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_SYNTHESIZED_FEATURES ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_PRIORITYARRAY ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_TTFONTSUBTABLE ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_COMMANDTABLE ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_FONTCART ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; dwI = MTI_SYMBOLROOT ; gMasterTable[dwI].dwCurIndex = gMasterTable[dwI].dwArraySize ; // at offset zero is the MINIRAWBINARYDATA header. // Immediately after this is the array of ENHARRAYREFS // supplying offsets to all other objects // comprising the GPD binary. // use the MTI_ defines to automate the copying of selected // buffers. Just make sure the subset that is being copied // occupies the lower MTI_ indicies and is terminated by // MTI_NUM_SAVED_OBJECTS. The enumeration value will // determine the order in which the various MTI_ buffers // appear in the new buffer. dwCurOffset = sizeof(MINIRAWBINARYDATA) ; dwCurOffset += sizeof(ENHARRAYREF) * MTI_NUM_SAVED_OBJECTS ; dwCurOffset = (dwCurOffset + dwAlign - 1) / dwAlign ; dwCurOffset *= dwAlign ; for(dwI = 0 ; dwI < MTI_NUM_SAVED_OBJECTS ; dwI++) { earTableContents[dwI].loOffset = dwCurOffset ; earTableContents[dwI].dwCount = gMasterTable[dwI].dwCurIndex ; earTableContents[dwI].dwElementSiz = gMasterTable[dwI].dwElementSiz ; dwCurOffset += gMasterTable[dwI].dwElementSiz * gMasterTable[dwI].dwCurIndex ; dwCurOffset = (dwCurOffset + dwAlign - 1) / dwAlign ; dwCurOffset *= dwAlign ; } pubDest = MemAlloc(dwCurOffset) ; // new destination buffer. if(!pubDest) { ERR(("Fatal: unable to alloc requested memory: %d bytes.\n", dwCurOffset)); geErrorType = ERRTY_MEMORY_ALLOCATION ; geErrorSev = ERRSEV_FATAL ; return(FALSE) ; // This is unrecoverable } // Last minute initializations: gmrbd.rbd.dwFileSize = dwCurOffset ; // gmrbd.pvPrivateData is not required by the .bud. It is only initialized // at snapshot time. Therefore putting it to NULL. // gmrbd.FileDateInfo is not used by the parser at all. gmrbd.rbd.pvPrivateData = (PVOID) NULL; gmrbd.rbd.FileDateInfo.dwCount = 0x00000000; gmrbd.rbd.FileDateInfo.loOffset = (PTRREF)0x00000000; // copy table of contents to start of dest buffer. memcpy(pubDest, &gmrbd , sizeof(MINIRAWBINARYDATA) ) ; memcpy(pubDest + sizeof(MINIRAWBINARYDATA), earTableContents , sizeof(ENHARRAYREF) * MTI_NUM_SAVED_OBJECTS ) ; for(dwI = 0 ; dwI < MTI_NUM_SAVED_OBJECTS ; dwI++) { memcpy( pubDest + earTableContents[dwI].loOffset, // dest gMasterTable[dwI].pubStruct, // src earTableContents[dwI].dwCount * // count earTableContents[dwI].dwElementSiz ) ; } // priority array is modified at snapshot time // if(!BinitDefaultOptionArray(optsel, pubDest)) // can't call this function from parser DLL. // Generate a binary file name based the original filename // Create a file and write data to it if ((pwstrBinaryFileName = pwstrGenerateGPDfilename(pwstrFileName)) == NULL) { goto CLEANUP_BconsolidateBuffers ; } if(GetFileAttributesEx( (LPCTSTR) pwstrBinaryFileName, // assumes widestrings GetFileExInfoStandard, (LPVOID) &File_Attributes) ) { // BUD exists - attempt to delete . if(! DeleteFile((LPCTSTR) pwstrBinaryFileName)) { WCHAR awchTmpName[MAX_PATH], awchPath[MAX_PATH]; PWSTR pwstrLastBackSlash ; // cannot delete, attempt to rename wcsncpy(awchPath, pwstrBinaryFileName , MAX_PATH -1); pwstrLastBackSlash = wcsrchr(awchPath,TEXT('\\')) ; if (!pwstrLastBackSlash) goto CLEANUP_BconsolidateBuffers ; *(pwstrLastBackSlash + 1) = NUL; if(!GetTempFileName( (LPCTSTR) awchPath, TEXT("BUD"), // pointer to filename prefix 0, // number used to create temporary filename (LPTSTR) awchTmpName)) goto CLEANUP_BconsolidateBuffers ; // failed to make tmp filename if( !MoveFileEx( (LPCTSTR) pwstrBinaryFileName, (LPCTSTR) awchTmpName, MOVEFILE_REPLACE_EXISTING)) goto CLEANUP_BconsolidateBuffers ; // Now cause temp file to disappear on reboot. MoveFileEx( (LPCTSTR) awchTmpName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT) ; // not a big problem if temp file cannot be deleted. } } if((hFile = CreateFile(pwstrBinaryFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | SECURITY_SQOS_PRESENT | SECURITY_ANONYMOUS, NULL)) != INVALID_HANDLE_VALUE) { bResult = WriteFile(hFile, pubDest, dwCurOffset, &dwBytesWritten, NULL) && (dwCurOffset == dwBytesWritten); CloseHandle(hFile); } CLEANUP_BconsolidateBuffers: if (! bResult) { // Fail fatally if file cannot be opened for writing. If somebody else // has opened the file, we do not wait for that guy to close the file. // We simply fail. geErrorSev = ERRSEV_FATAL; geErrorType = ERRTY_FILE_OPEN; ERR(("Unable to save binary GPD data to file.\n")); } if(pwstrBinaryFileName) MemFree(pwstrBinaryFileName); if(pubDest) MemFree(pubDest); return bResult; } BOOL BexpandMemConfigShortcut(DWORD dwSubType) { BOOL bStatus = FALSE; return(bStatus) ; } // create strings in tmpHeap. // checks to make sure there are // enough slots in the tokenmap before proceeding. BOOL BexpandCommandShortcut(DWORD dwSubType) { BOOL bStatus = FALSE; return(bStatus) ; } // add sensor to detect colons within a value as // this indicates something extra was tacked on. // if(ptkmap[*pdwTKMindex].dwFlags & TKMF_COLON) /* BOOL BinitRemainingFields() { This function initializes synthesized fields like these in the FeatureOption array. ATREEREF atrOptIDvalue; // ID value ATREEREF atrFeaFlags ; // invalid or not ATREEREF atrPriority ; // warning: any non-attribtreeref added to // the DFEATURE_OPTIONS structure will get stomped on in strange // and wonderful ways by BinitPreAllocatedObjects. // internal consistency checks. BOOL bReferenced ; // default is FALSE. DWORD dwGID , // GID tag dwNumOptions ; // these are not read in from GPD file. maybe also determine count of DocSticky and PrinterSticky or maybe that is only stored in the RawBinaryData block. } */